aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/backend/sjs/JSDefinitions.scala
diff options
context:
space:
mode:
authorSébastien Doeraene <sjrdoeraene@gmail.com>2016-03-07 14:46:45 +0100
committerSébastien Doeraene <sjrdoeraene@gmail.com>2016-03-10 18:01:45 +0100
commitd0dd7001f0b59ed53f0778530328b3bf413587a2 (patch)
tree4a3ad96313026973543edcb7e3d2e15751580b0d /src/dotty/tools/backend/sjs/JSDefinitions.scala
parentc14c9c096d09d9e21f1fd4ec27e6b416db01512f (diff)
downloaddotty-d0dd7001f0b59ed53f0778530328b3bf413587a2.tar.gz
dotty-d0dd7001f0b59ed53f0778530328b3bf413587a2.tar.bz2
dotty-d0dd7001f0b59ed53f0778530328b3bf413587a2.zip
Implement most of the Scala.js IR code generator.
Notable things that are missing at this point: * Pattern matching * Try * Most of the JavaScript interop
Diffstat (limited to 'src/dotty/tools/backend/sjs/JSDefinitions.scala')
-rw-r--r--src/dotty/tools/backend/sjs/JSDefinitions.scala19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/dotty/tools/backend/sjs/JSDefinitions.scala b/src/dotty/tools/backend/sjs/JSDefinitions.scala
index 0f4415b31..f38f89987 100644
--- a/src/dotty/tools/backend/sjs/JSDefinitions.scala
+++ b/src/dotty/tools/backend/sjs/JSDefinitions.scala
@@ -5,6 +5,7 @@ import dotty.tools.dotc.core._
import Types._
import Contexts._
import Symbols._
+import Names._
import StdNames._
import Decorators._
@@ -172,4 +173,22 @@ final class JSDefinitions()(implicit ctx: Context) {
lazy val BoxesRunTime_unboxToCharR = defn.BoxesRunTimeModule.requiredMethodRef("unboxToChar")
def BoxesRunTime_unboxToChar(implicit ctx: Context): Symbol = BoxesRunTime_unboxToCharR.symbol
+ /** If `cls` is a class in the scala package, its name, otherwise EmptyTypeName */
+ private def scalajsClassName(cls: Symbol)(implicit ctx: Context): TypeName =
+ if (cls.isClass && cls.owner == ScalaJSJSPackageClass) cls.asClass.name
+ else EmptyTypeName
+
+ private def isScalaJSVarArityClass(cls: Symbol, prefix: Name): Boolean = {
+ val name = scalajsClassName(cls)
+ name.startsWith(prefix) && name.drop(prefix.length).forall(_.isDigit)
+ }
+
+ def isJSFunctionClass(cls: Symbol): Boolean =
+ isScalaJSVarArityClass(cls, nme.Function)
+
+ private val ThisFunctionName = termName("ThisFunction")
+
+ def isJSThisFunctionClass(cls: Symbol): Boolean =
+ isScalaJSVarArityClass(cls, ThisFunctionName)
+
}