aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/transform/TreeGen.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-08-03 17:06:29 +0200
committerMartin Odersky <odersky@gmail.com>2014-08-03 17:06:29 +0200
commitb88b958bb7f25ba45a6c15c9f554df2d4c6746ed (patch)
tree59606a00437c471699f596eb12b2c74c3826b1a5 /src/dotty/tools/dotc/transform/TreeGen.scala
parent29e8f67ba19ab531932c98eba1411a63815cfa80 (diff)
downloaddotty-b88b958bb7f25ba45a6c15c9f554df2d4c6746ed.tar.gz
dotty-b88b958bb7f25ba45a6c15c9f554df2d4c6746ed.tar.bz2
dotty-b88b958bb7f25ba45a6c15c9f554df2d4c6746ed.zip
Add varargs bridge methods
Distinguish translations between Java and Scala varargs methods and add bridges where needed.
Diffstat (limited to 'src/dotty/tools/dotc/transform/TreeGen.scala')
-rw-r--r--src/dotty/tools/dotc/transform/TreeGen.scala26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/dotty/tools/dotc/transform/TreeGen.scala b/src/dotty/tools/dotc/transform/TreeGen.scala
new file mode 100644
index 000000000..7997aa308
--- /dev/null
+++ b/src/dotty/tools/dotc/transform/TreeGen.scala
@@ -0,0 +1,26 @@
+package dotty.tools.dotc
+package transform
+
+import core._
+import Symbols._, Contexts._, Types._, Names._, StdNames._
+import ast._
+import Trees._
+import TypeUtils._
+
+object TreeGen {
+
+ import tpd._
+
+ def wrapArrayMethodName(elemtp: Type)(implicit ctx: Context): TermName = {
+ val elemCls = elemtp.classSymbol
+ if (elemCls.isPrimitiveValueClass) nme.wrapXArray(elemCls.name)
+ else if (elemCls.derivesFrom(defn.ObjectClass) && !elemCls.isPhantomClass) nme.wrapRefArray
+ else nme.genericWrapArray
+ }
+
+ def wrapArray(tree: Tree, elemtp: Type)(implicit ctx: Context): Tree =
+ ref(defn.ScalaPredefModule)
+ .select(wrapArrayMethodName(elemtp))
+ .appliedToTypes(if (elemtp.isPrimitiveValueType) Nil else elemtp :: Nil)
+ .appliedTo(tree)
+} \ No newline at end of file