From 6fc1fe1d66829d2dbde21adf5955ab6bf21d2bd8 Mon Sep 17 00:00:00 2001 From: Gilles Dubochet Date: Fri, 20 Jan 2006 15:16:02 +0000 Subject: Improved TypedCode to support yet more code. --- src/compiler/scala/tools/nsc/typechecker/Codification.scala | 5 +++++ src/library/scala/reflect/Code.scala | 3 ++- src/library/scala/reflect/Print.scala | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/compiler/scala/tools/nsc/typechecker/Codification.scala b/src/compiler/scala/tools/nsc/typechecker/Codification.scala index 70a4876aee..9a79e2b3e8 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Codification.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Codification.scala @@ -48,6 +48,10 @@ mixin class Codification requires Analyzer { reflect.This(reify(tree.symbol)) case Block(stats, expr) => reflect.Block(stats.map(reify), reify(expr)) + case New(clazz) => + val reifiedClass = reify(clazz) + reflect.New(reifiedClass) + case Typed(t, _) => reify(t) case _ => throw new TypeError("cannot reify tree: " + tree) } @@ -127,6 +131,7 @@ mixin class Codification requires Analyzer { case reflect.LocalMethod(_, _, _) => "scala.reflect.LocalMethod" case reflect.This(_) => "scala.reflect.This" case reflect.Block(_,_) => "scala.reflect.Block" + case reflect.New(_) => "scala.reflect.New" case reflect.NamedType(_) => "scala.reflect.NamedType" case reflect.PrefixedType(_, _) => "scala.reflect.PrefixedType" case reflect.SingleType(_, _) => "scala.reflect.SingleType" diff --git a/src/library/scala/reflect/Code.scala b/src/library/scala/reflect/Code.scala index 6632643160..83aa81d03d 100644 --- a/src/library/scala/reflect/Code.scala +++ b/src/library/scala/reflect/Code.scala @@ -19,4 +19,5 @@ case class Apply(fun: Code, args: List[Code]) extends Code; case class TypeApply(fun: Code, args: List[Type]) extends Code; case class Function(params: List[Symbol], body: Code) extends Code; case class This(sym: Symbol) extends Code; -case class Block(stats: List[Code], expr: Code) extends Code; \ No newline at end of file +case class Block(stats: List[Code], expr: Code) extends Code; +case class New(sym: Code) extends Code; \ No newline at end of file diff --git a/src/library/scala/reflect/Print.scala b/src/library/scala/reflect/Print.scala index e6995bc167..5d4cf45f62 100644 --- a/src/library/scala/reflect/Print.scala +++ b/src/library/scala/reflect/Print.scala @@ -36,6 +36,7 @@ object Print extends Function1[Any, String] { case reflect.Function(params, body) => "(" + params.map(Print).mkString("(", ", ", ")") + " => " + Print(body) + ")" case reflect.This(sym) => "(" + Print(sym) + ".this)" case reflect.Block(stats, expr) => (stats ::: List(expr)).map(Print).mkString("{", ";\n", "}") + case reflect.New(clazz) => "(new " + Print(clazz) + ")" case _ => "???" } -- cgit v1.2.3