aboutsummaryrefslogtreecommitdiff
path: root/compiler/src/dotty/tools/dotc/transform/TreeGen.scala
blob: 7e507d905894e105568f291cd90372a3e0af9b04 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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)
}