Spec-Zone.ru › Scala 2.13 Reflection

Трейт scala.reflect.macros.Typers

trait Typers extends AnyRef

ЭКСПЕРИМЕНТАЛЬНО

Срезы контекста макросов Scala, частично раскрывающие тип проверяющего для авторов макросов.

Self Type
blackbox.Context
Source
Typers.scala
Линейные супертипы
AnyRef, Any
Известные подклассы
Context, Context

Члены типа

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, что иногда приводит к повреждению деревьев, делая их бессмысленными. К сожалению, для этого нет обходного решения. Мы планируем исправить эту проблему в ближайшее время, но пока имейте это в виду.

См. также

http://stackoverflow.com/questions/20936509/scala-macros-what-is-the-difference-between-typed-aka-typechecked-an-untyped

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

Неявный
Этот член добавлен неявным преобразованием из Typers вany2stringadd[Typers] с помощью метода any2stringadd в scala.Predef.
Определяющие классы
any2stringadd

def ->[B](y: B): (Typers, B)

Неявный
Этот член добавлен неявным преобразованием из Typers вArrowAssoc[Typers] с помощью метода ArrowAssoc в scala.Predef.
Определяющие классы
ArrowAssoc
Аннотации
@inline()

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

Неявный
Этот член добавлен неявным преобразованием из Typers вEnsuring[Typers] с помощью метода Ensuring в scala.Predef.
Определяющие классы
Ensuring

def ensuring(cond: (Typers) => Boolean): Typers

Неявный
Этот член добавлен неявным преобразованием из Typers вEnsuring[Typers] с помощью метода Ensuring в scala.Predef.
Определяющие классы
Ensuring

def ensuring(cond: Boolean, msg: => Any): Typers

Неявный
Этот член добавлен неявным преобразованием из Typers вEnsuring[Typers] с помощью метода Ensuring в scala.Predef.
Определяющие классы
Ensuring

def ensuring(cond: Boolean): Typers

Неявный
Этот член добавлен неявным преобразованием из Typers вEnsuring[Typers] с помощью метода Ensuring в scala.Predef.
Определяющие классы
Ensuring

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

Неявный
Этот член добавляется неявным преобразованием из Typers вStringFormat[Typers] выполняемым методом StringFormat в scala.Predef.
Классы определений
StringFormat
Аннотации
@inline()

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API