diff options
Diffstat (limited to 'compiler/src/main/scala/scala/scalajs/compiler/JSDefinitions.scala')
-rw-r--r-- | compiler/src/main/scala/scala/scalajs/compiler/JSDefinitions.scala | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/compiler/src/main/scala/scala/scalajs/compiler/JSDefinitions.scala b/compiler/src/main/scala/scala/scalajs/compiler/JSDefinitions.scala new file mode 100644 index 0000000..b8a483a --- /dev/null +++ b/compiler/src/main/scala/scala/scalajs/compiler/JSDefinitions.scala @@ -0,0 +1,128 @@ +/* Scala.js compiler + * Copyright 2013 LAMP/EPFL + * @author Sébastien Doeraene + */ + +package scala.scalajs.compiler + +import scala.tools.nsc._ + +/** Core definitions for Scala.js + * + * @author Sébastien Doeraene + */ +trait JSDefinitions { self: JSGlobalAddons => + import global._ + + object jsDefinitions extends JSDefinitionsClass + + import definitions._ + import rootMirror._ + + class JSDefinitionsClass { + + lazy val ScalaJSJSPackage = getPackage(newTermNameCached("scala.scalajs.js")) // compat 2.10/2.11 + lazy val JSPackage_undefined = getMemberMethod(ScalaJSJSPackage, newTermName("undefined")) + lazy val JSPackage_isUndefined = getMemberMethod(ScalaJSJSPackage, newTermName("isUndefined")) + lazy val JSPackage_typeOf = getMemberMethod(ScalaJSJSPackage, newTermName("typeOf")) + lazy val JSPackage_debugger = getMemberMethod(ScalaJSJSPackage, newTermName("debugger")) + lazy val JSPackage_native = getMemberMethod(ScalaJSJSPackage, newTermName("native")) + + lazy val ScalaJSJSPrimPackage = getPackage(newTermNameCached("scala.scalajs.js.prim")) // compat 2.10/2.11 + + lazy val JSAnyClass = getRequiredClass("scala.scalajs.js.Any") + lazy val JSDynamicClass = getRequiredClass("scala.scalajs.js.Dynamic") + lazy val JSDynamic_selectDynamic = getMemberMethod(JSDynamicClass, newTermName("selectDynamic")) + lazy val JSDynamic_updateDynamic = getMemberMethod(JSDynamicClass, newTermName("updateDynamic")) + lazy val JSDynamic_applyDynamic = getMemberMethod(JSDynamicClass, newTermName("applyDynamic")) + lazy val JSDictionaryClass = getRequiredClass("scala.scalajs.js.Dictionary") + lazy val JSDictionary_delete = getMemberMethod(JSDictionaryClass, newTermName("delete")) + lazy val JSNumberClass = getRequiredClass("scala.scalajs.js.prim.Number") + lazy val JSBooleanClass = getRequiredClass("scala.scalajs.js.prim.Boolean") + lazy val JSStringClass = getRequiredClass("scala.scalajs.js.prim.String") + lazy val JSUndefinedClass = getRequiredClass("scala.scalajs.js.prim.Undefined") + lazy val JSObjectClass = getRequiredClass("scala.scalajs.js.Object") + lazy val JSThisFunctionClass = getRequiredClass("scala.scalajs.js.ThisFunction") + + lazy val JSGlobalScopeClass = getRequiredClass("scala.scalajs.js.GlobalScope") + + lazy val UndefOrClass = getRequiredClass("scala.scalajs.js.UndefOr") + + lazy val JSArrayClass = getRequiredClass("scala.scalajs.js.Array") + lazy val JSArray_apply = getMemberMethod(JSArrayClass, newTermName("apply")) + lazy val JSArray_update = getMemberMethod(JSArrayClass, newTermName("update")) + + lazy val JSFunctionClasses = (0 to 22) map (n => getRequiredClass("scala.scalajs.js.Function"+n)) + lazy val JSThisFunctionClasses = (0 to 21) map (n => getRequiredClass("scala.scalajs.js.ThisFunction"+n)) + lazy val AllJSFunctionClasses = JSFunctionClasses ++ JSThisFunctionClasses + + lazy val RuntimeExceptionClass = requiredClass[RuntimeException] + lazy val JavaScriptExceptionClass = getClassIfDefined("scala.scalajs.js.JavaScriptException") + + lazy val JSNameAnnotation = getRequiredClass("scala.scalajs.js.annotation.JSName") + lazy val JSBracketAccessAnnotation = getRequiredClass("scala.scalajs.js.annotation.JSBracketAccess") + lazy val JSExportAnnotation = getRequiredClass("scala.scalajs.js.annotation.JSExport") + lazy val JSExportDescendentObjectsAnnotation = getRequiredClass("scala.scalajs.js.annotation.JSExportDescendentObjects") + lazy val JSExportDescendentClassesAnnotation = getRequiredClass("scala.scalajs.js.annotation.JSExportDescendentClasses") + lazy val JSExportAllAnnotation = getRequiredClass("scala.scalajs.js.annotation.JSExportAll") + lazy val JSExportNamedAnnotation = getRequiredClass("scala.scalajs.js.annotation.JSExportNamed") + + lazy val JSAnyTpe = JSAnyClass.toTypeConstructor + lazy val JSDynamicTpe = JSDynamicClass.toTypeConstructor + lazy val JSNumberTpe = JSNumberClass.toTypeConstructor + lazy val JSBooleanTpe = JSBooleanClass.toTypeConstructor + lazy val JSStringTpe = JSStringClass.toTypeConstructor + lazy val JSUndefinedTpe = JSUndefinedClass.toTypeConstructor + lazy val JSObjectTpe = JSObjectClass.toTypeConstructor + + lazy val JSGlobalScopeTpe = JSGlobalScopeClass.toTypeConstructor + + lazy val JSFunctionTpes = JSFunctionClasses.map(_.toTypeConstructor) + + lazy val JSAnyModule = JSAnyClass.companionModule + def JSAny_fromFunction(arity: Int) = getMemberMethod(JSAnyModule, newTermName("fromFunction"+arity)) + + lazy val JSDynamicModule = JSDynamicClass.companionModule + lazy val JSDynamic_newInstance = getMemberMethod(JSDynamicModule, newTermName("newInstance")) + lazy val JSDynamicLiteral = getMemberModule(JSDynamicModule, newTermName("literal")) + lazy val JSDynamicLiteral_applyDynamicNamed = getMemberMethod(JSDynamicLiteral, newTermName("applyDynamicNamed")) + lazy val JSDynamicLiteral_applyDynamic = getMemberMethod(JSDynamicLiteral, newTermName("applyDynamic")) + + lazy val JSObjectModule = JSObjectClass.companionModule + lazy val JSObject_hasProperty = getMemberMethod(JSObjectModule, newTermName("hasProperty")) + lazy val JSObject_properties = getMemberMethod(JSObjectModule, newTermName("properties")) + + lazy val JSArrayModule = JSArrayClass.companionModule + lazy val JSArray_create = getMemberMethod(JSArrayModule, newTermName("apply")) + + lazy val JSThisFunctionModule = JSThisFunctionClass.companionModule + def JSThisFunction_fromFunction(arity: Int) = getMemberMethod(JSThisFunctionModule, newTermName("fromFunction"+arity)) + + lazy val RawJSTypeAnnot = getClassIfDefined("scala.scalajs.js.annotation.RawJSType") + + lazy val RuntimeStringModule = getRequiredModule("scala.scalajs.runtime.RuntimeString") + lazy val RuntimeStringModuleClass = RuntimeStringModule.moduleClass + + lazy val BooleanReflectiveCallClass = getRequiredClass("scala.scalajs.runtime.BooleanReflectiveCall") + lazy val NumberReflectiveCallClass = getRequiredClass("scala.scalajs.runtime.NumberReflectiveCall") + lazy val IntegerReflectiveCallClass = getRequiredClass("scala.scalajs.runtime.IntegerReflectiveCall") + + lazy val RuntimePackageModule = getPackageObject("scala.scalajs.runtime") + lazy val Runtime_wrapJavaScriptException = getMemberMethod(RuntimePackageModule, newTermName("wrapJavaScriptException")) + lazy val Runtime_unwrapJavaScriptException = getMemberMethod(RuntimePackageModule, newTermName("unwrapJavaScriptException")) + lazy val Runtime_genTraversableOnce2jsArray = getMemberMethod(RuntimePackageModule, newTermName("genTraversableOnce2jsArray")) + lazy val Runtime_newJSObjectWithVarargs = getMemberMethod(RuntimePackageModule, newTermName("newJSObjectWithVarargs")) + lazy val Runtime_propertiesOf = getMemberMethod(RuntimePackageModule, newTermName("propertiesOf")) + + lazy val WrappedArrayClass = getRequiredClass("scala.scalajs.js.WrappedArray") + lazy val WrappedArray_ctor = WrappedArrayClass.primaryConstructor + + // This is a def, since similar symbols (arrayUpdateMethod, etc.) are in runDefinitions + // (rather than definitions) and we weren't sure if it is safe to make this a lazy val + def ScalaRunTime_isArray = getMemberMethod(ScalaRunTimeModule, newTermName("isArray")).suchThat(_.tpe.params.size == 2) + + lazy val BoxesRunTime_boxToCharacter = getMemberMethod(BoxesRunTimeModule, newTermName("boxToCharacter")) + lazy val BoxesRunTime_unboxToChar = getMemberMethod(BoxesRunTimeModule, newTermName("unboxToChar")) + + } +} |