Трейт scala.reflect.macros.Typers
trait Typers extends AnyRef
Члены типа
type TypecheckException = macros.TypecheckException
- См. также
scala.reflect.macros.TypecheckException
abstract type TypecheckMode
Представляет режим работы проверки типов, лежащий в основе c.typecheck вызовов. Необходим, так как форма проверенного дерева недостаточна для угадывания способа его проверки типов. Может быть TERMmode (проверка как терм), TYPEmode (проверка как тип) или PATTERNmode (проверка как шаблон).
Члены-значения абстрактные
abstract val PATTERNmode: blackbox.Context.TypecheckMode
abstract val TERMmode: blackbox.Context.TypecheckMode
Указывает, что аргумент к c.typecheck должен быть проверен на типы как терм. Это режим проверки типов по умолчанию в Scala 2.11 и единственный поддерживаемый режим в Scala 2.10.
abstract val TYPEmode: blackbox.Context.TypecheckMode
abstract def inferImplicitValue(pt: blackbox.Context.Type, silent: Boolean = true, withMacrosDisabled: Boolean = false, pos: blackbox.Context.Position = enclosingPosition): blackbox.Context.Tree
Выводит неявное значение ожидаемого типа pt в контексте вызова макроса. Необязательный параметр pos задаёт позицию, которая будет ассоциироваться с поиском неявного значения.
Если silent равно false, TypecheckException будет выброшено в случае ошибки вывода. Если silent равно true, проверка типов выполняется без сообщений, и будет возвращено EmptyTree в случае ошибки. Такие ошибки не исчезают и могут быть просмотрены при включении -Xlog-implicits. В отличие от typecheck, silent по умолчанию равно true.
- Исключения
abstract def inferImplicitView(tree: blackbox.Context.Tree, from: blackbox.Context.Type, to: blackbox.Context.Type, silent: Boolean = true, withMacrosDisabled: Boolean = false, pos: blackbox.Context.Position = enclosingPosition): blackbox.Context.Tree
Выводит неявное преобразование из указанного дерева tree типа from к типу to в контексте вызова макроса. Необязательный параметр pos задаёт позицию, которая будет ассоциироваться с поиском неявного значения.
Если silent равно false, TypecheckException будет выброшено в случае ошибки вывода. Если silent равно true, проверка типов выполняется без сообщений, и будет возвращено EmptyTree в случае ошибки. Такие ошибки не исчезают и могут быть просмотрены при включении -Xlog-implicits. В отличие от typecheck, silent по умолчанию равно true.
- Исключения
abstract def openMacros: List[blackbox.Context]
Контексты, представляющие макросы в процессе выполнения, включая текущий. Очень похоже на трассировку стека, но только для макросов. Может быть полезно для взаимодействия с другими макросами и для наложения дружественных компилятору ограничений на расширение макросов.
Также незаменимо для выдачи осмысленных сообщений об ошибках для макросов, которые вызываются другими макросами по синтетическим (т.е. без позиций) деревьям. В таком случае перейдите к стеку openMacros, и он, скорее всего, будет содержать по крайней мере один макрос с позиционным применением макроса. См. enclosingPosition для реализации логики по умолчанию.
В отличие от enclosingMacros, это def, что означает, что он пересчитывается при каждом вызове, поэтому он может меняться в зависимости от того, что происходит во время расширения макроса.
abstract def typecheck(tree: blackbox.Context.Tree, mode: blackbox.Context.TypecheckMode = TERMmode, pt: blackbox.Context.Type = universe.WildcardType, silent: Boolean = false, withImplicitViewsDisabled: Boolean = false, withMacrosDisabled: Boolean = false): blackbox.Context.Tree
Проверяет предоставленное дерево на соответствие ожидаемому типу pt в контексте вызова макроса в режиме проверки типов, указанном в mode, по умолчанию mode. Это заполняет символы и типы дерева и, возможно, преобразует его, чтобы отразить определённые десахаржения.
Если silent равно false, TypecheckException будет выброшено в случае ошибки проверки типов. Если silent равно true, проверка типов выполняется без сообщений, и будет возвращено EmptyTree в случае ошибки. Такие ошибки не исчезают и могут быть просмотрены при включении -Ymacro-debug-verbose. В отличие от inferImplicitValue и inferImplicitView, silent по умолчанию равно false.
Проверку типов можно настроить с помощью следующих необязательных параметров: withImplicitViewsDisabled рекурсивно запрещает неявные преобразования (хотя неявные значения всё равно будут искаться и заполняться), значение по умолчанию — false; withMacrosDisabled рекурсивно запрещает расширение макросов и макросные неявные значения, значение по умолчанию — false.
- Исключения
abstract def untypecheck(tree: blackbox.Context.Tree): blackbox.Context.Tree
В текущей реализации API рефлексии Scala, нетипизированные деревья (также известные как деревья парсера или неатрибутированные деревья) наблюдательно отличаются от типизированных деревьев (также известных как деревья типового анализа, деревья с типом проверки или атрибутированные деревья).
Обычно, если некоторый API компилятора принимает дерево, то как нетипизированные, так и типизированные деревья подойдут. Однако в некоторых случаях только нетипизированные или только типизированные деревья являются подходящими. Например, eval принимает только нетипизированные деревья, и можно вставлять только типизированные деревья в типизированные деревья. Поэтому в текущем API рефлексии необходимы функции для перехода между нетипизированными и типизированными деревьями. Для этого у нас есть typecheck и untypecheck.
Обратите внимание, что untypecheck в настоящее время страдает от https://github.com/scala/bug/issues/5464, что иногда приводит к повреждению деревьев, делая их бессмысленными. К сожалению, для этого нет обходного решения. Мы планируем исправить эту проблему в ближайшее время, но пока имейте это в виду.
abstract def resetLocalAttrs(tree: blackbox.Context.Tree): blackbox.Context.Tree
Рекурсивно сбрасывает локально определенные символы и типы в заданном дереве. ПРЕДУПРЕЖДЕНИЕ: Не используйте этот API, используйте вместо этого untypecheck.
- Аннотации
- @deprecated
- Устарело
(Начиная с версии 2.11.0) используйте вместо этого
c.untypecheck
Члены-значения конкретных типов
final def !=(arg0: Any): Boolean
- Определяющие классы
- AnyRef → Any
final def ##(): Int
- Определяющие классы
- AnyRef → Any
def +(other: String): String
def ->[B](y: B): (Typers, B)
final def ==(arg0: Any): Boolean
- Определяющие классы
- AnyRef → Any
val TypecheckException: macros.TypecheckException.type
- См. также
scala.reflect.macros.TypecheckException
final def asInstanceOf[T0]: T0
- Определяющие классы
- Any
def clone(): AnyRef
- Атрибуты
- protected[java.lang]
- Определяющие классы
- AnyRef
- Аннотации
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
def ensuring(cond: (Typers) => Boolean, msg: => Any): Typers
def ensuring(cond: (Typers) => Boolean): Typers
def ensuring(cond: Boolean, msg: => Any): Typers
def ensuring(cond: Boolean): Typers
final def eq(arg0: AnyRef): Boolean
- Определяющие классы
- AnyRef
def equals(arg0: AnyRef): Boolean
- Определяющие классы
- AnyRef → Any
def finalize(): Unit
- Атрибуты
- protected[java.lang]
- Определяющие классы
- AnyRef
- Аннотации
- @throws(classOf[java.lang.Throwable])
def formatted(fmtstr: String): String
final def getClass(): Class[_ <: AnyRef]
- Классы определений
- AnyRef → Any
- Аннотации
- @native()
def hashCode(): Int
- Классы определений
- AnyRef → Any
- Аннотации
- @native()
final def isInstanceOf[T0]: Boolean
- Классы определений
- Any
final def ne(arg0: AnyRef): Boolean
- Классы определений
- AnyRef
final def notify(): Unit
- Классы определений
- AnyRef
- Аннотации
- @native()
final def notifyAll(): Unit
- Классы определений
- AnyRef
- Аннотации
- @native()
final def synchronized[T0](arg0: => T0): T0
- Классы определений
- AnyRef
def toString(): String
- Классы определений
- AnyRef → Any
final def wait(): Unit
- Классы определений
- AnyRef
- Аннотации
- @throws(classOf[java.lang.InterruptedException])
final def wait(arg0: Long, arg1: Int): Unit
- Классы определений
- AnyRef
- Аннотации
- @throws(classOf[java.lang.InterruptedException])
final def wait(arg0: Long): Unit
- Классы определений
- AnyRef
- Аннотации
- @throws(classOf[java.lang.InterruptedException]) @native()
© 2002-2019 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://www.scala-lang.org/api/2.13.0/scala-reflect/scala/reflect/macros/Typers.html
ЭКСПЕРИМЕНТАЛЬНО
Срезы контекста макросов Scala, частично раскрывающие тип проверяющего для авторов макросов.