aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/UntypedTrees.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/dotty/tools/dotc/core/UntypedTrees.scala')
-rw-r--r--src/dotty/tools/dotc/core/UntypedTrees.scala36
1 files changed, 30 insertions, 6 deletions
diff --git a/src/dotty/tools/dotc/core/UntypedTrees.scala b/src/dotty/tools/dotc/core/UntypedTrees.scala
index 7e187864b..82a160ab0 100644
--- a/src/dotty/tools/dotc/core/UntypedTrees.scala
+++ b/src/dotty/tools/dotc/core/UntypedTrees.scala
@@ -3,6 +3,7 @@ package core
import util.Positions._, Types._, Contexts._, Constants._, Names._, Flags._
import SymDenotations._, Symbols._, StdNames._, Annotations._, Trees._, TypedTrees._
+import Decorators._
import language.higherKinds
object UntypedTrees {
@@ -21,31 +22,54 @@ object UntypedTrees {
}
/** (vparams) => body */
+ case class SymbolLit(str: String) extends Tree
case class Function(args: List[Tree], body: Tree) extends Tree
case class InfixOp(left: Tree, op: Name, right: Tree) extends Tree
- case class Postfixop(tree: Tree, op: Name) extends Tree
- case class Prefixop(op: Name, tree: Tree) extends Tree
- case class Parens(trees: List[Tree]) extends Tree
+ case class PostfixOp(tree: Tree, op: Name) extends Tree
+ case class PrefixOp(op: Name, tree: Tree) extends Tree
+ case class Parens(tree: Tree) extends Tree
+ case class Tuple(trees: List[Tree]) extends Tree
case class WhileDo(cond: Tree, body: Tree) extends TermTree
case class DoWhile(body: Tree, cond: Tree) extends TermTree
case class ForYield(enums: List[Tree], expr: Tree) extends TermTree
case class ForDo(enums: List[Tree], body: Tree) extends TermTree
case class GenFrom(pat: Tree, expr: Tree) extends Tree
case class GenAlias(pat: Tree, expr: Tree) extends Tree
- case class TypeParamBounds(below: Tree, above: Tree, view: Tree, context: Tree) extends TypTree
- case class PatDef(mods: Modifiers, pats: List[Tree], tpt: Tree, rhs: Tree) extends ModDefTree
+ case class ContextBounds(bounds: TypeBoundsTree, cxBounds: List[Tree]) extends TypTree
+ case class PatDef(mods: Modifiers, pats: List[Tree], tpt: Tree, rhs: Tree) extends Tree
def Function(vparam: ValDef, body: Tree): Function =
Function(vparam :: Nil, body)
def syntheticParameter(pname: TermName): ValDef =
ValDef(Modifiers(SyntheticTermParam), pname, TypeTree(), EmptyTree())
+
}
import untpd._
class UGen(implicit ctx: Context) {
- def constructor(mods: Modifiers, vparamAccessorss: List[List[Tree]], ofTrait: Boolean): DefDef = ???
+ def constructor(mods: Modifiers, vparamss: List[List[ValDef]], rhs: Tree = EmptyTree()): DefDef =
+ DefDef(mods, nme.CONSTRUCTOR, Nil, vparamss, TypeTree(), rhs)
+
+ def selfDef(name: TermName, tpt: Tree) =
+ ValDef(Modifiers(Private), name, tpt, EmptyTree())
+
+ def scalaDot(name: Name): Select =
+ Select(new TypedSplice(tpd.Ident(defn.ScalaPackageVal.termRef)), name)
+
+ def mkTuple(ts: List[Tree]) = ts match {
+ case t :: Nil => Parens(t)
+ case _ => Tuple(ts)
+ }
+
+ def scalaAnyRefConstr = scalaDot(tpnme.AnyRef)
+ def scalaAnyValConstr = scalaDot(tpnme.AnyVal)
+ def scalaAnyConstr = scalaDot(tpnme.Any)
+ def scalaUnitConstr = scalaDot(tpnme.Unit)
+ def productConstr = scalaDot(tpnme.Product)
+ def productConstrN(n: Int) = scalaDot(("Product" + n).toTypeName)
+ def serializableConstr = scalaDot(tpnme.Serializable)
}
def ugen(implicit ctx: Context) =