org.scalameta.tokens.internal.scala Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of scalameta-foundation_2.11 Show documentation
Show all versions of scalameta-foundation_2.11 Show documentation
Metaprogramming and hosting APIs of scala.meta
The newest version!
package org.scalameta.tokens
import scala.language.experimental.macros
import scala.reflect.macros.whitebox.Context
package object internal {
trait Token extends org.scalameta.adt.Internal.Adt
class root extends scala.annotation.StaticAnnotation
class branch extends scala.annotation.StaticAnnotation
class tokenClass extends scala.annotation.StaticAnnotation
class tokenCompanion extends scala.annotation.StaticAnnotation
def staticDynamicCheck[T]: Unit = macro Macros.staticDynamicCheck[T]
class Macros(val c: Context) {
import c.universe._
lazy val StaticTokenClass = rootMirror.staticModule("scala.meta.syntactic.parsers.Tok").info.decl(TypeName("Static")).asClass
lazy val DynamicTokenClass = rootMirror.staticModule("scala.meta.syntactic.parsers.Tok").info.decl(TypeName("Dynamic")).asClass
def staticDynamicCheck[T](implicit T: c.WeakTypeTag[T]) = {
if ((T.tpe <:< StaticTokenClass.toType) && (T.tpe <:< DynamicTokenClass.toType)) c.abort(c.enclosingPosition, s"${T.tpe} is classified as both static and dynamic token")
if (!(T.tpe <:< StaticTokenClass.toType) && !(T.tpe <:< DynamicTokenClass.toType)) c.abort(c.enclosingPosition, s"${T.tpe} is classified as neither static nor dynamic token")
q""
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy