diff options
author | Martin Odersky <odersky@gmail.com> | 2013-12-18 11:29:13 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2013-12-18 11:29:13 +0100 |
commit | 15d8a2e9804fe55c9261e195088da55c0eaa6803 (patch) | |
tree | c9cfbfe068b7f301c43e9987959f29843cf715dc /src | |
parent | 6b106397a683b9de4bf05da7e768ebf747085c55 (diff) | |
download | dotty-15d8a2e9804fe55c9261e195088da55c0eaa6803.tar.gz dotty-15d8a2e9804fe55c9261e195088da55c0eaa6803.tar.bz2 dotty-15d8a2e9804fe55c9261e195088da55c0eaa6803.zip |
Making sure New's always end in an application.
Diffstat (limited to 'src')
-rw-r--r-- | src/dotty/tools/dotc/ast/Desugar.scala | 4 | ||||
-rw-r--r-- | src/dotty/tools/dotc/ast/untpd.scala | 7 | ||||
-rw-r--r-- | src/dotty/tools/dotc/parsing/Parsers.scala | 4 |
3 files changed, 10 insertions, 5 deletions
diff --git a/src/dotty/tools/dotc/ast/Desugar.scala b/src/dotty/tools/dotc/ast/Desugar.scala index 2e1aa48bf..70c3e76f6 100644 --- a/src/dotty/tools/dotc/ast/Desugar.scala +++ b/src/dotty/tools/dotc/ast/Desugar.scala @@ -417,7 +417,7 @@ object desugar { * tree @cls */ def makeAnnotated(cls: Symbol, tree: Tree)(implicit ctx: Context) = - Annotated(TypedSplice(tpd.New(cls.typeRef)), tree) + Annotated(TypedSplice(tpd.New(cls.typeRef, Nil)), tree) private def derivedValDef(mods: Modifiers, named: NameTree, tpt: Tree, rhs: Tree) = ValDef(mods, named.name.asTermName, tpt, rhs).withPos(named.pos) @@ -700,7 +700,7 @@ object desugar { * The result is used for validity checking, is thrown away afterwards. */ def refinedTypeToClass(tree: RefinedTypeTree)(implicit ctx: Context): TypeDef = { - val parent = Select(New(tree.tpt), nme.CONSTRUCTOR) + val parent = New(tree.tpt, Nil) val impl = Template(emptyConstructor, parent :: Nil, EmptyValDef, tree.refinements) TypeDef(Modifiers(), tpnme.REFINE_CLASS, impl) } diff --git a/src/dotty/tools/dotc/ast/untpd.scala b/src/dotty/tools/dotc/ast/untpd.scala index 351548d91..740e8f110 100644 --- a/src/dotty/tools/dotc/ast/untpd.scala +++ b/src/dotty/tools/dotc/ast/untpd.scala @@ -107,7 +107,7 @@ object untpd extends Trees.Instance[Untyped] with TreeInfo[Untyped] { } var prefix: Tree = Select(New(tycon), nme.CONSTRUCTOR) if (targs.nonEmpty) prefix = TypeApply(prefix, targs) - (prefix /: argss)(Apply(_, _)) + ensureApplied((prefix /: argss)(Apply(_, _))) } def Block(stat: Tree, expr: Tree): Block = @@ -116,6 +116,11 @@ object untpd extends Trees.Instance[Untyped] with TreeInfo[Untyped] { def Apply(fn: Tree, arg: Tree): Apply = Apply(fn, arg :: Nil) + def ensureApplied(tpt: Tree) = tpt match { + case _: Apply => tpt + case _ => Apply(tpt, Nil) + } + def AppliedTypeTree(tpt: Tree, arg: Tree): AppliedTypeTree = AppliedTypeTree(tpt, arg :: Nil) diff --git a/src/dotty/tools/dotc/parsing/Parsers.scala b/src/dotty/tools/dotc/parsing/Parsers.scala index ccb7d26bf..ae066e9a9 100644 --- a/src/dotty/tools/dotc/parsing/Parsers.scala +++ b/src/dotty/tools/dotc/parsing/Parsers.scala @@ -1423,7 +1423,7 @@ object Parsers { /** Annotation ::= `@' SimpleType {ArgumentExprs} */ def annot() = - adjustStart(accept(AT)) { argumentExprss(wrapNew(simpleType())) } + adjustStart(accept(AT)) { ensureApplied(argumentExprss(wrapNew(simpleType()))) } def annotations(skipNewLines: Boolean = false): List[Tree] = { if (skipNewLines) newLineOptWhenFollowedBy(AT) @@ -1824,7 +1824,7 @@ object Parsers { /** ConstrApp ::= SimpleType {ParArgumentExprs} */ val constrApp = () => - parArgumentExprss(wrapNew(simpleType())) + ensureApplied(parArgumentExprss(wrapNew(simpleType()))) /** Template ::= ConstrApps [TemplateBody] | TemplateBody * ConstrApps ::= ConstrApp {`with' ConstrApp} |