diff options
author | Martin Odersky <odersky@gmail.com> | 2014-08-03 17:06:29 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2014-08-03 17:06:29 +0200 |
commit | b88b958bb7f25ba45a6c15c9f554df2d4c6746ed (patch) | |
tree | 59606a00437c471699f596eb12b2c74c3826b1a5 /src/dotty/tools/dotc/transform/TreeGen.scala | |
parent | 29e8f67ba19ab531932c98eba1411a63815cfa80 (diff) | |
download | dotty-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.scala | 26 |
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 |