diff options
author | Felix Mulder <felix.mulder@gmail.com> | 2016-11-02 11:08:28 +0100 |
---|---|---|
committer | Guillaume Martres <smarter@ubuntu.com> | 2016-11-22 01:35:07 +0100 |
commit | 8a61ff432543a29234193cd1f7c14abd3f3d31a0 (patch) | |
tree | a8147561d307af862c295cfc8100d271063bb0dd /compiler/src/dotty/tools/dotc/core/StdNames.scala | |
parent | 6a455fe6da5ff9c741d91279a2dc6fe2fb1b472f (diff) | |
download | dotty-8a61ff432543a29234193cd1f7c14abd3f3d31a0.tar.gz dotty-8a61ff432543a29234193cd1f7c14abd3f3d31a0.tar.bz2 dotty-8a61ff432543a29234193cd1f7c14abd3f3d31a0.zip |
Move compiler and compiler tests to compiler dir
Diffstat (limited to 'compiler/src/dotty/tools/dotc/core/StdNames.scala')
-rw-r--r-- | compiler/src/dotty/tools/dotc/core/StdNames.scala | 844 |
1 files changed, 844 insertions, 0 deletions
diff --git a/compiler/src/dotty/tools/dotc/core/StdNames.scala b/compiler/src/dotty/tools/dotc/core/StdNames.scala new file mode 100644 index 000000000..c2a14b36f --- /dev/null +++ b/compiler/src/dotty/tools/dotc/core/StdNames.scala @@ -0,0 +1,844 @@ +package dotty.tools.dotc +package core + +import scala.language.implicitConversions +import scala.collection.{mutable, immutable} +import scala.annotation.switch +import Names._ +import Symbols._ +import Contexts._ +import Decorators.StringDecorator +import util.NameTransformer +import scala.collection.breakOut + +object StdNames { + +/** Base strings from which synthetic names are derived. */ + + abstract class DefinedNames[N <: Name] { + protected implicit def fromString(s: String): N + protected def fromName(name: Name): N = fromString(name.toString) + + private val kws = mutable.Set[N]() + protected def kw(name: N) = { kws += name; name } + + final val keywords: collection.Set[N] = kws + } + + abstract class ScalaNames[N <: Name] extends DefinedNames[N] { + protected def encode(s: String): N = fromName(fromString(s).encode) + +// Keywords, need to come first ----------------------- + + final val ABSTRACTkw: N = kw("abstract") + final val CASEkw: N = kw("case") + final val CLASSkw: N = kw("class") + final val CATCHkw: N = kw("catch") + final val DEFkw: N = kw("def") + final val DOkw: N = kw("do") + final val ELSEkw: N = kw("else") + final val EXTENDSkw: N = kw("extends") + final val FALSEkw: N = kw("false") + final val FINALkw: N = kw("final") + final val FINALLYkw: N = kw("finally") + final val FORkw: N = kw("for") + final val FORSOMEkw: N = kw("forSome") + final val IFkw: N = kw("if") + final val IMPLICITkw: N = kw("implicit") + final val IMPORTkw: N = kw("import") + final val INLINEkw: N = kw("inline") + final val LAZYkw: N = kw("lazy") + final val MACROkw: N = kw("macro") + final val MATCHkw: N = kw("match") + final val NEWkw: N = kw("new") + final val NULLkw: N = kw("null") + final val OBJECTkw: N = kw("object") + final val OVERRIDEkw: N = kw("override") + final val PACKAGEkw: N = kw("package") + final val PRIVATEkw: N = kw("private") + final val PROTECTEDkw: N = kw("protected") + final val RETURNkw: N = kw("return") + final val SEALEDkw: N = kw("sealed") + final val SUPERkw: N = kw("super") + final val THENkw: N = kw("then") + final val THISkw: N = kw("this") + final val THROWkw: N = kw("throw") + final val TRAITkw: N = kw("trait") + final val TRUEkw: N = kw("true") + final val TRYkw: N = kw("try") + final val TYPEkw: N = kw("type") + final val VALkw: N = kw("val") + final val VARkw: N = kw("var") + final val WITHkw: N = kw("with") + final val WHILEkw: N = kw("while") + final val YIELDkw: N = kw("yield") + final val DOTkw: N = kw(".") + final val USCOREkw: N = kw("_") + final val COLONkw: N = kw(":") + final val EQUALSkw: N = kw("=") + final val ARROWkw: N = kw("=>") + final val LARROWkw: N = kw("<-") + final val SUBTYPEkw: N = kw("<:") + final val VIEWBOUNDkw: N = kw("<%") + final val SUPERTYPEkw: N = kw(">:") + final val HASHkw: N = kw("#") + final val ATkw: N = kw("@") + + val ANON_CLASS: N = "$anon" + val ANON_FUN: N = "$anonfun" + val BITMAP_PREFIX: N = "bitmap$" + val BITMAP_NORMAL: N = BITMAP_PREFIX // initialization bitmap for public/protected lazy vals + val BITMAP_TRANSIENT: N = BITMAP_PREFIX + "trans$" // initialization bitmap for transient lazy vals + val BITMAP_CHECKINIT: N = BITMAP_PREFIX + "init$" // initialization bitmap for checkinit values + val BITMAP_CHECKINIT_TRANSIENT: N = BITMAP_PREFIX + "inittrans$" // initialization bitmap for transient checkinit values + val DEFAULT_GETTER: N = "$default$" + val DEFAULT_GETTER_INIT: N = NameTransformer.encode("<init>") + val DO_WHILE_PREFIX: N = "doWhile$" + val EMPTY: N = "" + val EMPTY_PACKAGE: N = Names.EMPTY_PACKAGE.toString + val EVIDENCE_PARAM_PREFIX: N = "evidence$" + val EXCEPTION_RESULT_PREFIX: N = "exceptionResult" + val EXPAND_SEPARATOR: N = "$$" + val IMPL_CLASS_SUFFIX: N = "$class" + val IMPORT: N = "<import>" + val INLINE_ACCESSOR_PREFIX = "$inlineAccessor$" + val INTERPRETER_IMPORT_WRAPPER: N = "$iw" + val INTERPRETER_LINE_PREFIX: N = "line" + val INTERPRETER_VAR_PREFIX: N = "res" + val INTERPRETER_WRAPPER_SUFFIX: N = "$object" + val LOCALDUMMY_PREFIX: N = "<local " // owner of local blocks + val MODULE_SUFFIX: N = NameTransformer.MODULE_SUFFIX_STRING + val AVOID_CLASH_SUFFIX: N = "$_avoid_name_clash_$" + val MODULE_VAR_SUFFIX: N = "$module" + val NAME_JOIN: N = NameTransformer.NAME_JOIN_STRING + val USCORE_PARAM_PREFIX: N = "_$" + val OPS_PACKAGE: N = "<special-ops>" + val OVERLOADED: N = "<overloaded>" + val PACKAGE: N = "package" + val PACKAGE_CLS: N = "package$" + val PROTECTED_PREFIX: N = "protected$" + val PROTECTED_SET_PREFIX: N = PROTECTED_PREFIX + "set" + val ROOT: N = "<root>" + val SHADOWED: N = "(shadowed)" // tag to be used until we have proper name kinds + val SINGLETON_SUFFIX: N = ".type" + val SPECIALIZED_SUFFIX: N = "$sp" + val SUPER_PREFIX: N = "super$" + val WHILE_PREFIX: N = "while$" + val DEFAULT_EXCEPTION_NAME: N = "ex$" + val INITIALIZER_PREFIX: N = "initial$" + val COMPANION_MODULE_METHOD: N = "companion$module" + val COMPANION_CLASS_METHOD: N = "companion$class" + val TRAIT_SETTER_SEPARATOR: N = "$_setter_$" + + // value types (and AnyRef) are all used as terms as well + // as (at least) arguments to the @specialize annotation. + final val Boolean: N = "Boolean" + final val Byte: N = "Byte" + final val Char: N = "Char" + final val Double: N = "Double" + final val Float: N = "Float" + final val Int: N = "Int" + final val Long: N = "Long" + final val Short: N = "Short" + final val Unit: N = "Unit" + + final val ScalaValueNames: scala.List[N] = + scala.List(Byte, Char, Short, Int, Long, Float, Double, Boolean, Unit) + + // some types whose companions we utilize + final val AnyRef: N = "AnyRef" + final val Array: N = "Array" + final val List: N = "List" + final val Seq: N = "Seq" + final val Symbol: N = "Symbol" + final val ClassTag: N = "ClassTag" + final val classTag: N = "classTag" + final val WeakTypeTag: N = "WeakTypeTag" + final val TypeTag : N = "TypeTag" + final val typeTag: N = "typeTag" + final val Expr: N = "Expr" + final val String: N = "String" + final val Annotation: N = "Annotation" + + // fictions we use as both types and terms + final val ERROR: N = "<error>" + final val ERRORenc: N = encode("<error>") + final val NO_NAME: N = "<none>" // formerly NOSYMBOL + final val WILDCARD: N = "_" + +// ----- Type names ----------------------------------------- + + final val BYNAME_PARAM_CLASS: N = "<byname>" + final val EQUALS_PATTERN: N = "<equals>" + final val LOCAL_CHILD: N = "<local child>" + final val REPEATED_PARAM_CLASS: N = "<repeated>" + final val WILDCARD_STAR: N = "_*" + final val REIFY_TREECREATOR_PREFIX: N = "$treecreator" + final val REIFY_TYPECREATOR_PREFIX: N = "$typecreator" + + final val AbstractFunction: N = "AbstractFunction" + final val Any: N = "Any" + final val AnyVal: N = "AnyVal" + final val ExprApi: N = "ExprApi" + final val Function: N = "Function" + final val Mirror: N = "Mirror" + final val Nothing: N = "Nothing" + final val Null: N = "Null" + final val Object: N = "Object" + final val PartialFunction: N = "PartialFunction" + final val PrefixType: N = "PrefixType" + final val Product: N = "Product" + final val Serializable: N = "Serializable" + final val Singleton: N = "Singleton" + final val Throwable: N = "Throwable" + final val Tuple: N = "Tuple" + + final val ClassfileAnnotation: N = "ClassfileAnnotation" + final val ClassManifest: N = "ClassManifest" + final val Enum: N = "Enum" + final val Group: N = "Group" + final val Tree: N = "Tree" + final val Type : N = "Type" + final val TypeTree: N = "TypeTree" + + // Annotation simple names, used in Namer + final val BeanPropertyAnnot: N = "BeanProperty" + final val BooleanBeanPropertyAnnot: N = "BooleanBeanProperty" + final val bridgeAnnot: N = "bridge" + + // Classfile Attributes + final val AnnotationDefaultATTR: N = "AnnotationDefault" + final val BridgeATTR: N = "Bridge" + final val ClassfileAnnotationATTR: N = "RuntimeInvisibleAnnotations" // RetentionPolicy.CLASS. Currently not used (Apr 2009). + final val CodeATTR: N = "Code" + final val ConstantValueATTR: N = "ConstantValue" + final val DeprecatedATTR: N = "Deprecated" + final val ExceptionsATTR: N = "Exceptions" + final val InnerClassesATTR: N = "InnerClasses" + final val LineNumberTableATTR: N = "LineNumberTable" + final val LocalVariableTableATTR: N = "LocalVariableTable" + final val RuntimeAnnotationATTR: N = "RuntimeVisibleAnnotations" // RetentionPolicy.RUNTIME + final val RuntimeParamAnnotationATTR: N = "RuntimeVisibleParameterAnnotations" // RetentionPolicy.RUNTIME (annotations on parameters) + final val ScalaATTR: N = "Scala" + final val ScalaSignatureATTR: N = "ScalaSig" + final val TASTYATTR: N = "TASTY" + final val SignatureATTR: N = "Signature" + final val SourceFileATTR: N = "SourceFile" + final val SyntheticATTR: N = "Synthetic" + +// ----- Term names ----------------------------------------- + + // Compiler-internal + val ANYname: N = "<anyname>" + val CONSTRUCTOR: N = Names.CONSTRUCTOR.toString + val DEFAULT_CASE: N = "defaultCase$" + val EVT2U: N = "evt2u$" + val EQEQ_LOCAL_VAR: N = "eqEqTemp$" + val FAKE_LOCAL_THIS: N = "this$" + val LAZY_LOCAL: N = "$lzy" + val LAZY_LOCAL_INIT: N = "$lzyINIT" + val LAZY_FIELD_OFFSET: N = "OFFSET$" + val LAZY_SLOW_SUFFIX: N = "$lzycompute" + val LOCAL_SUFFIX: N = "$$local" + val UNIVERSE_BUILD_PREFIX: N = "$u.build." + val UNIVERSE_BUILD: N = "$u.build" + val UNIVERSE_PREFIX: N = "$u." + val UNIVERSE_SHORT: N = "$u" + val MIRROR_PREFIX: N = "$m." + val MIRROR_SHORT: N = "$m" + val MIRROR_UNTYPED: N = "$m$untyped" + val REIFY_FREE_PREFIX: N = "free$" + val REIFY_FREE_THIS_SUFFIX: N = "$this" + val REIFY_FREE_VALUE_SUFFIX: N = "$value" + val REIFY_SYMDEF_PREFIX: N = "symdef$" + val MODULE_INSTANCE_FIELD: N = NameTransformer.MODULE_INSTANCE_NAME // "MODULE$" + val OUTER: N = "$outer" + val OUTER_LOCAL: N = "$outer " + val OUTER_SELECT: N = "_<outer>" // emitted by inliner, replaced by outer path in explicitouter + val REFINE_CLASS: N = "<refinement>" + val ROOTPKG: N = "_root_" + val SELECTOR_DUMMY: N = "<unapply-selector>" + val SELF: N = "$this" + val SETTER_SUFFIX: N = encode("_=") + val SKOLEM: N = "<skolem>" + val SPECIALIZED_INSTANCE: N = "specInstance$" + val THIS: N = "_$this" + val TRAIT_CONSTRUCTOR: N = "$init$" + val U2EVT: N = "u2evt$" + + final val Nil: N = "Nil" + final val Predef: N = "Predef" + final val ScalaRunTime: N = "ScalaRunTime" + final val Some: N = "Some" + + val x_0 : N = "x$0" + val x_1 : N = "x$1" + val x_2 : N = "x$2" + val x_3 : N = "x$3" + val x_4 : N = "x$4" + val x_5 : N = "x$5" + val x_6 : N = "x$6" + val x_7 : N = "x$7" + val x_8 : N = "x$8" + val x_9 : N = "x$9" + val _1 : N = "_1" + val _2 : N = "_2" + val _3 : N = "_3" + val _4 : N = "_4" + val _5 : N = "_5" + val _6 : N = "_6" + val _7 : N = "_7" + val _8 : N = "_8" + val _9 : N = "_9" + val _10 : N = "_10" + val _11 : N = "_11" + val _12 : N = "_12" + val _13 : N = "_13" + val _14 : N = "_14" + val _15 : N = "_15" + val _16 : N = "_16" + val _17 : N = "_17" + val _18 : N = "_18" + val _19 : N = "_19" + val _20 : N = "_20" + val _21 : N = "_21" + val _22 : N = "_22" + + val ??? = encode("???") + + val genericWrapArray: N = "genericWrapArray" + def wrapRefArray: N = "wrapRefArray" + def wrapXArray(clsName: Name): N = "wrap" + clsName + "Array" + + // Compiler utilized names + + val AnnotatedType: N = "AnnotatedType" + val AppliedTypeTree: N = "AppliedTypeTree" + val ArrayAnnotArg: N = "ArrayAnnotArg" + val Constant: N = "Constant" + val ConstantType: N = "ConstantType" + val ExistentialTypeTree: N = "ExistentialTypeTree" + val Flag : N = "Flag" + val Ident: N = "Ident" + val Import: N = "Import" + val Literal: N = "Literal" + val LiteralAnnotArg: N = "LiteralAnnotArg" + val Modifiers: N = "Modifiers" + val NestedAnnotArg: N = "NestedAnnotArg" + val NoFlags: N = "NoFlags" + val NoPrefix: N = "NoPrefix" + val NoSymbol: N = "NoSymbol" + val NoType: N = "NoType" + val Pair: N = "Pair" + val Ref: N = "Ref" + val RootPackage: N = "RootPackage" + val RootClass: N = "RootClass" + val Scala2: N = "Scala2" + val Select: N = "Select" + val StringContext: N = "StringContext" + val This: N = "This" + val ThisType: N = "ThisType" + val Tuple2: N = "Tuple2" + val TYPE_ : N = "TYPE" + val TypeApply: N = "TypeApply" + val TypeRef: N = "TypeRef" + val UNIT : N = "UNIT" + val add_ : N = "add" + val annotation: N = "annotation" + val anyValClass: N = "anyValClass" + val append: N = "append" + val apply: N = "apply" + val applyDynamic: N = "applyDynamic" + val applyDynamicNamed: N = "applyDynamicNamed" + val applyOrElse: N = "applyOrElse" + val args : N = "args" + val argv : N = "argv" + val arrayClass: N = "arrayClass" + val arrayElementClass: N = "arrayElementClass" + val arrayValue: N = "arrayValue" + val array_apply : N = "array_apply" + val array_clone : N = "array_clone" + val array_length : N = "array_length" + val array_update : N = "array_update" + val arraycopy: N = "arraycopy" + val asTerm: N = "asTerm" + val asModule: N = "asModule" + val asMethod: N = "asMethod" + val asType: N = "asType" + val asClass: N = "asClass" + val asInstanceOf_ : N = "asInstanceOf" + val assert_ : N = "assert" + val assume_ : N = "assume" + val box: N = "box" + val build : N = "build" + val bytes: N = "bytes" + val canEqual_ : N = "canEqual" + val checkInitialized: N = "checkInitialized" + val ClassManifestFactory: N = "ClassManifestFactory" + val classOf: N = "classOf" + val clone_ : N = "clone" + // val conforms : N = "conforms" // Dotty deviation: no special treatment of conforms, so the occurrence of the name here would cause to unintended implicit shadowing. Should find a less common name for it in Predef. + val copy: N = "copy" + val currentMirror: N = "currentMirror" + val create: N = "create" + val definitions: N = "definitions" + val delayedInit: N = "delayedInit" + val delayedInitArg: N = "delayedInit$body" + val drop: N = "drop" + val dynamics: N = "dynamics" + val dummyApply: N = "<dummy-apply>" + val elem: N = "elem" + val emptyValDef: N = "emptyValDef" + val ensureAccessible : N = "ensureAccessible" + val eq: N = "eq" + val equalsNumChar : N = "equalsNumChar" + val equalsNumNum : N = "equalsNumNum" + val equalsNumObject : N = "equalsNumObject" + val equals_ : N = "equals" + val error: N = "error" + val eval: N = "eval" + val eqAny: N = "eqAny" + val ex: N = "ex" + val experimental: N = "experimental" + val f: N = "f" + val false_ : N = "false" + val filter: N = "filter" + val finalize_ : N = "finalize" + val find_ : N = "find" + val flagsFromBits : N = "flagsFromBits" + val flatMap: N = "flatMap" + val foreach: N = "foreach" + val genericArrayOps: N = "genericArrayOps" + val get: N = "get" + val getClass_ : N = "getClass" + val getOrElse: N = "getOrElse" + val hasNext: N = "hasNext" + val hashCode_ : N = "hashCode" + val hash_ : N = "hash" + val head: N = "head" + val higherKinds: N = "higherKinds" + val identity: N = "identity" + val implicitly: N = "implicitly" + val in: N = "in" + val info: N = "info" + val inlinedEquals: N = "inlinedEquals" + val isArray: N = "isArray" + val isDefined: N = "isDefined" + val isDefinedAt: N = "isDefinedAt" + val isDefinedAtImpl: N = "$isDefinedAt" + val isEmpty: N = "isEmpty" + val isInstanceOf_ : N = "isInstanceOf" + val java: N = "java" + val key: N = "key" + val lang: N = "lang" + val length: N = "length" + val lengthCompare: N = "lengthCompare" + val liftedTree: N = "liftedTree" + val `macro` : N = "macro" + val macroThis : N = "_this" + val macroContext : N = "c" + val main: N = "main" + val manifest: N = "manifest" + val ManifestFactory: N = "ManifestFactory" + val manifestToTypeTag: N = "manifestToTypeTag" + val map: N = "map" + val materializeClassTag: N = "materializeClassTag" + val materializeWeakTypeTag: N = "materializeWeakTypeTag" + val materializeTypeTag: N = "materializeTypeTag" + val mirror : N = "mirror" + val moduleClass : N = "moduleClass" + val name: N = "name" + val ne: N = "ne" + val newFreeTerm: N = "newFreeTerm" + val newFreeType: N = "newFreeType" + val newNestedSymbol: N = "newNestedSymbol" + val newScopeWith: N = "newScopeWith" + val next: N = "next" + val nmeNewTermName: N = "newTermName" + val nmeNewTypeName: N = "newTypeName" + val noAutoTupling: N = "noAutoTupling" + val normalize: N = "normalize" + val notifyAll_ : N = "notifyAll" + val notify_ : N = "notify" + val null_ : N = "null" + val ofDim: N = "ofDim" + val origin: N = "origin" + val prefix : N = "prefix" + val productArity: N = "productArity" + val productElement: N = "productElement" + val productIterator: N = "productIterator" + val productPrefix: N = "productPrefix" + val readResolve: N = "readResolve" + val reflect : N = "reflect" + val reify : N = "reify" + val rootMirror : N = "rootMirror" + val runOrElse: N = "runOrElse" + val runtime: N = "runtime" + val runtimeClass: N = "runtimeClass" + val runtimeMirror: N = "runtimeMirror" + val sameElements: N = "sameElements" + val scala_ : N = "scala" + val selectDynamic: N = "selectDynamic" + val selectOverloadedMethod: N = "selectOverloadedMethod" + val selectTerm: N = "selectTerm" + val selectType: N = "selectType" + val self: N = "self" + val seqToArray: N = "seqToArray" + val setAccessible: N = "setAccessible" + val setAnnotations: N = "setAnnotations" + val setSymbol: N = "setSymbol" + val setType: N = "setType" + val setTypeSignature: N = "setTypeSignature" + val splice: N = "splice" + val staticClass : N = "staticClass" + val staticModule : N = "staticModule" + val staticPackage : N = "staticPackage" + val synchronized_ : N = "synchronized" + val tail: N = "tail" + val `then` : N = "then" + val this_ : N = "this" + val thisPrefix : N = "thisPrefix" + val throw_ : N = "throw" + val toArray: N = "toArray" + val toList: N = "toList" + val toObjectArray : N = "toObjectArray" + val toSeq: N = "toSeq" + val toString_ : N = "toString" + val toTypeConstructor: N = "toTypeConstructor" + val tpe : N = "tpe" + val tree : N = "tree" + val true_ : N = "true" + val typedProductIterator: N = "typedProductIterator" + val typeTagToManifest: N = "typeTagToManifest" + val unapply: N = "unapply" + val unapplySeq: N = "unapplySeq" + val unbox: N = "unbox" + val universe: N = "universe" + val update: N = "update" + val updateDynamic: N = "updateDynamic" + val value: N = "value" + val valueOf : N = "valueOf" + val values : N = "values" + val view_ : N = "view" + val wait_ : N = "wait" + val withFilter: N = "withFilter" + val withFilterIfRefutable: N = "withFilterIfRefutable$" + val wrap: N = "wrap" + val zero: N = "zero" + val zip: N = "zip" + val nothingRuntimeClass: N = "scala.runtime.Nothing$" + val nullRuntimeClass: N = "scala.runtime.Null$" + + val synthSwitch: N = "$synthSwitch" + + // unencoded operators + object raw { + final val AMP : N = "&" + final val BANG : N = "!" + final val BAR : N = "|" + final val DOLLAR: N = "$" + final val GE: N = ">=" + final val LE: N = "<=" + final val MINUS: N = "-" + final val NE: N = "!=" + final val PLUS : N = "+" + final val SLASH: N = "/" + final val STAR : N = "*" + final val TILDE: N = "~" + + final val isUnary: Set[Name] = Set(MINUS, PLUS, TILDE, BANG) + } + + object specializedTypeNames { + final val Boolean: N = "Z" + final val Byte: N = "B" + final val Char: N = "C" + final val Short: N = "S" + final val Int: N = "I" + final val Long: N = "J" + final val Float: N = "F" + final val Double: N = "D" + final val Void: N = "V" + final val Object: N = "L" + + final val prefix: N = "$m" + final val separator: N = "c" + final val suffix: N = "$sp" + } + + // value-conversion methods + val toByte: N = "toByte" + val toShort: N = "toShort" + val toChar: N = "toChar" + val toInt: N = "toInt" + val toLong: N = "toLong" + val toFloat: N = "toFloat" + val toDouble: N = "toDouble" + + // primitive operation methods for structural types mostly + // overlap with the above, but not for these two. + val toCharacter: N = "toCharacter" + val toInteger: N = "toInteger" + + def newLazyValSlowComputeName(lzyValName: N) = lzyValName ++ LAZY_SLOW_SUFFIX + + // ASCII names for operators + val ADD = encode("+") + val AND = encode("&") + val ASR = encode(">>") + val DIV = encode("/") + val EQ = encode("==") + val EQL = encode("=") + val GE = encode(">=") + val GT = encode(">") + val HASHHASH = encode("##") + val LE = encode("<=") + val LSL = encode("<<") + val LSR = encode(">>>") + val LT = encode("<") + val MINUS = encode("-") + val MOD = encode("%") + val MUL = encode("*") + val NE = encode("!=") + val OR = encode("|") + val PLUS = ADD // technically redundant, but ADD looks funny with MINUS + val SUB = MINUS // ... as does SUB with PLUS + val XOR = encode("^") + val ZAND = encode("&&") + val ZOR = encode("||") + + // unary operators + val UNARY_PREFIX: N = "unary_" + val UNARY_~ = encode("unary_~") + val UNARY_+ = encode("unary_+") + val UNARY_- = encode("unary_-") + val UNARY_! = encode("unary_!") + + // Grouped here so Cleanup knows what tests to perform. + val CommonOpNames = Set[Name](OR, XOR, AND, EQ, NE) + val ConversionNames = Set[Name](toByte, toChar, toDouble, toFloat, toInt, toLong, toShort) + val BooleanOpNames = Set[Name](ZOR, ZAND, UNARY_!) ++ CommonOpNames + val NumberOpNames = ( + Set[Name](ADD, SUB, MUL, DIV, MOD, LSL, LSR, ASR, LT, LE, GE, GT) + ++ Set(UNARY_+, UNARY_-, UNARY_!) + ++ ConversionNames + ++ CommonOpNames + ) + + val add: N = "add" + val complement: N = "complement" + val divide: N = "divide" + val multiply: N = "multiply" + val negate: N = "negate" + val positive: N = "positive" + val shiftLogicalRight: N = "shiftLogicalRight" + val shiftSignedLeft: N = "shiftSignedLeft" + val shiftSignedRight: N = "shiftSignedRight" + val subtract: N = "subtract" + val takeAnd: N = "takeAnd" + val takeConditionalAnd: N = "takeConditionalAnd" + val takeConditionalOr: N = "takeConditionalOr" + val takeModulo: N = "takeModulo" + val takeNot: N = "takeNot" + val takeOr: N = "takeOr" + val takeXor: N = "takeXor" + val testEqual: N = "testEqual" + val testGreaterOrEqualThan: N = "testGreaterOrEqualThan" + val testGreaterThan: N = "testGreaterThan" + val testLessOrEqualThan: N = "testLessOrEqualThan" + val testLessThan: N = "testLessThan" + val testNotEqual: N = "testNotEqual" + + val isBoxedNumberOrBoolean: N = "isBoxedNumberOrBoolean" + val isBoxedNumber: N = "isBoxedNumber" + + val reflPolyCacheName: N = "reflPoly$Cache" + val reflClassCacheName: N = "reflClass$Cache" + val reflParamsCacheName: N = "reflParams$Cache" + val reflMethodCacheName: N = "reflMethod$Cache" + val reflMethodName: N = "reflMethod$Method" + + private val reflectionCacheNames = Set[N]( + reflPolyCacheName, + reflClassCacheName, + reflParamsCacheName, + reflMethodCacheName, + reflMethodName + ) + + def isReflectionCacheName(name: Name) = reflectionCacheNames exists (name startsWith _) + } + + class ScalaTermNames extends ScalaNames[TermName] { + protected implicit def fromString(s: String): TermName = termName(s) + + @switch def syntheticParamName(i: Int): TermName = i match { + case 0 => x_0 + case 1 => x_1 + case 2 => x_2 + case 3 => x_3 + case 4 => x_4 + case 5 => x_5 + case 6 => x_6 + case 7 => x_7 + case 8 => x_8 + case 9 => x_9 + case _ => termName("x$" + i) + } + + @switch def productAccessorName(j: Int): TermName = j match { + case 1 => nme._1 + case 2 => nme._2 + case 3 => nme._3 + case 4 => nme._4 + case 5 => nme._5 + case 6 => nme._6 + case 7 => nme._7 + case 8 => nme._8 + case 9 => nme._9 + case 10 => nme._10 + case 11 => nme._11 + case 12 => nme._12 + case 13 => nme._13 + case 14 => nme._14 + case 15 => nme._15 + case 16 => nme._16 + case 17 => nme._17 + case 18 => nme._18 + case 19 => nme._19 + case 20 => nme._20 + case 21 => nme._21 + case 22 => nme._22 + case _ => termName("_" + j) + } + + def syntheticParamNames(num: Int): List[TermName] = + (0 until num).map(syntheticParamName)(breakOut) + + def localDummyName(clazz: Symbol)(implicit ctx: Context): TermName = + LOCALDUMMY_PREFIX ++ clazz.name ++ ">" + + def newBitmapName(bitmapPrefix: TermName, n: Int): TermName = bitmapPrefix ++ n.toString + + def selectorName(n: Int): TermName = "_" + (n + 1) + + object primitive { + val arrayApply: TermName = "[]apply" + val arrayUpdate: TermName = "[]update" + val arrayLength: TermName = "[]length" + val names: Set[Name] = Set(arrayApply, arrayUpdate, arrayLength) + } + + def isPrimitiveName(name: Name) = primitive.names.contains(name) + } + + class ScalaTypeNames extends ScalaNames[TypeName] { + protected implicit def fromString(s: String): TypeName = typeName(s) + + def syntheticTypeParamName(i: Int): TypeName = "X" + i + + def syntheticTypeParamNames(num: Int): List[TypeName] = + (0 until num).map(syntheticTypeParamName)(breakOut) + + final val Conforms = encode("<:<") + + final val Uninstantiated: TypeName = "?$" + } + + abstract class JavaNames[N <: Name] extends DefinedNames[N] { + final val ABSTRACTkw: N = kw("abstract") + final val ASSERTkw: N = kw("assert") + final val BOOLEANkw: N = kw("boolean") + final val BREAKkw: N = kw("break") + final val BYTEkw: N = kw("byte") + final val CASEkw: N = kw("case") + final val CATCHkw: N = kw("catch") + final val CHARkw: N = kw("char") + final val CLASSkw: N = kw("class") + final val CONSTkw: N = kw("const") + final val CONTINUEkw: N = kw("continue") + final val DEFAULTkw: N = kw("default") + final val DOkw: N = kw("do") + final val DOUBLEkw: N = kw("double") + final val ELSEkw: N = kw("else") + final val ENUMkw: N = kw("enum") + final val EXTENDSkw: N = kw("extends") + final val FINALkw: N = kw("final") + final val FINALLYkw: N = kw("finally") + final val FLOATkw: N = kw("float") + final val FORkw: N = kw("for") + final val IFkw: N = kw("if") + final val GOTOkw: N = kw("goto") + final val IMPLEMENTSkw: N = kw("implements") + final val IMPORTkw: N = kw("import") + final val INSTANCEOFkw: N = kw("instanceof") + final val INTkw: N = kw("int") + final val INTERFACEkw: N = kw("interface") + final val LONGkw: N = kw("long") + final val NATIVEkw: N = kw("native") + final val NEWkw: N = kw("new") + final val PACKAGEkw: N = kw("package") + final val PRIVATEkw: N = kw("private") + final val PROTECTEDkw: N = kw("protected") + final val PUBLICkw: N = kw("public") + final val RETURNkw: N = kw("return") + final val SHORTkw: N = kw("short") + final val STATICkw: N = kw("static") + final val STRICTFPkw: N = kw("strictfp") + final val SUPERkw: N = kw("super") + final val SWITCHkw: N = kw("switch") + final val SYNCHRONIZEDkw: N = kw("synchronized") + final val THISkw: N = kw("this") + final val THROWkw: N = kw("throw") + final val THROWSkw: N = kw("throws") + final val TRANSIENTkw: N = kw("transient") + final val TRYkw: N = kw("try") + final val VOIDkw: N = kw("void") + final val VOLATILEkw: N = kw("volatile") + final val WHILEkw: N = kw("while") + + final val BoxedBoolean: N = "java.lang.Boolean" + final val BoxedByte: N = "java.lang.Byte" + final val BoxedCharacter: N = "java.lang.Character" + final val BoxedDouble: N = "java.lang.Double" + final val BoxedFloat: N = "java.lang.Float" + final val BoxedInteger: N = "java.lang.Integer" + final val BoxedLong: N = "java.lang.Long" + final val BoxedNumber: N = "java.lang.Number" + final val BoxedShort: N = "java.lang.Short" + final val Class: N = "java.lang.Class" + final val IOOBException: N = "java.lang.IndexOutOfBoundsException" + final val InvTargetException: N = "java.lang.reflect.InvocationTargetException" + final val MethodAsObject: N = "java.lang.reflect.Method" + final val NPException: N = "java.lang.NullPointerException" + final val Object: N = "java.lang.Object" + final val String: N = "java.lang.String" + final val Throwable: N = "java.lang.Throwable" + + final val ForName: N = "forName" + final val GetCause: N = "getCause" + final val GetClass: N = "getClass" + final val GetClassLoader: N = "getClassLoader" + final val GetComponentType: N = "getComponentType" + final val GetMethod: N = "getMethod" + final val Invoke: N = "invoke" + final val JavaLang: N = "java.lang" + + final val BeanProperty: N = "scala.beans.BeanProperty" + final val BooleanBeanProperty: N = "scala.beans.BooleanBeanProperty" + final val JavaSerializable: N = "java.io.Serializable" + } + + class JavaTermNames extends JavaNames[TermName] { + protected def fromString(s: String): TermName = termName(s) + } + class JavaTypeNames extends JavaNames[TypeName] { + protected def fromString(s: String): TypeName = typeName(s) + } + + val nme = new ScalaTermNames + val tpnme = new ScalaTypeNames + val jnme = new JavaTermNames + val jtpnme = new JavaTypeNames + +} |