From 2901639c758397546e8bf7fa994e5612c82be3cd Mon Sep 17 00:00:00 2001 From: michelou Date: Fri, 6 Oct 2006 15:50:45 +0000 Subject: TreePrinter and Types now use escapedStringValu... TreePrinter and Types now use escapedStringValue from class Constant --- .../scala/tools/nsc/ast/TreePrinters.scala | 9 +---- .../scala/tools/nsc/symtab/Constants.scala | 42 ++++++++++++++++------ src/compiler/scala/tools/nsc/symtab/Types.scala | 20 ++--------- 3 files changed, 35 insertions(+), 36 deletions(-) (limited to 'src') diff --git a/src/compiler/scala/tools/nsc/ast/TreePrinters.scala b/src/compiler/scala/tools/nsc/ast/TreePrinters.scala index ec41149264..52e95ea818 100644 --- a/src/compiler/scala/tools/nsc/ast/TreePrinters.scala +++ b/src/compiler/scala/tools/nsc/ast/TreePrinters.scala @@ -290,14 +290,7 @@ abstract class TreePrinters { print(symName(tree, name)) case Literal(x) => - print(x.tag match { - case NullTag => "null" - case StringTag => "\"" + x.stringValue + "\"" - case ClassTag => x.stringValue + ".class" - case CharTag => "\'" + x.charValue + "\'" - case LongTag => x.longValue.toString() + "L" - case _ => x.value.toString() - }) + print(x.escapedStringValue) case TypeTree() => print( diff --git a/src/compiler/scala/tools/nsc/symtab/Constants.scala b/src/compiler/scala/tools/nsc/symtab/Constants.scala index f86f68cf7a..ab2c58cdbd 100644 --- a/src/compiler/scala/tools/nsc/symtab/Constants.scala +++ b/src/compiler/scala/tools/nsc/symtab/Constants.scala @@ -164,24 +164,24 @@ trait Constants requires SymbolTable { def convertTo(pt: Type): Constant = { val target = pt.symbol if (target == tpe.symbol) - this + this else if (target == ByteClass && ByteTag <= tag && tag <= IntTag && - -128 <= intValue && intValue <= 127) - Constant(byteValue) + -128 <= intValue && intValue <= 127) + Constant(byteValue) else if (target == ShortClass && ByteTag <= tag && tag <= IntTag && - -32768 <= intValue && intValue <= 32767) - Constant(shortValue) + -32768 <= intValue && intValue <= 32767) + Constant(shortValue) else if (target == CharClass && ByteTag <= tag && tag <= IntTag && - 0 <= intValue && intValue <= 65635) - Constant(charValue) + 0 <= intValue && intValue <= 65635) + Constant(charValue) else if (target == IntClass && ByteTag <= tag && tag <= IntTag) - Constant(intValue) + Constant(intValue) else if (target == LongClass && ByteTag <= tag && tag <= LongTag) - Constant(longValue) + Constant(longValue) else if (target == FloatClass && ByteTag <= tag && tag <= FloatTag) - Constant(floatValue) + Constant(floatValue) else if (target == DoubleClass && ByteTag <= tag && tag <= DoubleTag) - Constant(doubleValue) + Constant(doubleValue) else { null } @@ -192,6 +192,26 @@ trait Constants requires SymbolTable { else if (tag == ClassTag) signature(typeValue) else value.toString() + def escapedStringValue: String = { + def escape(text: String): String = { + val buf = new StringBuffer + for (val c <- Iterator.fromString(text)) + if (Character.isISOControl(c)) + buf.append("\\0" + Integer.toOctalString(c.asInstanceOf[Int])) + else + buf.append(c) + buf.toString + } + tag match { + case NullTag => "null" + case StringTag => "\"" + escape(stringValue) + "\"" + case ClassTag => signature(typeValue) + ".class" + case CharTag => escape("\'" + charValue + "\'") + case LongTag => longValue.toString() + "L" + case _ => value.toString() + } + } + def typeValue: Type = value.asInstanceOf[Type] def symbolValue: Symbol = value.asInstanceOf[Symbol] diff --git a/src/compiler/scala/tools/nsc/symtab/Types.scala b/src/compiler/scala/tools/nsc/symtab/Types.scala index 3c5524e88e..1441a1e7b5 100644 --- a/src/compiler/scala/tools/nsc/symtab/Types.scala +++ b/src/compiler/scala/tools/nsc/symtab/Types.scala @@ -838,22 +838,8 @@ trait Types requires SymbolTable { override def symbol: Symbol = value.tpe.symbol override def singleDeref: Type = value.tpe override def deconst: Type = value.tpe - override def toString(): String = { - def escape(text: String): String = { - val buf = new StringBuffer - for (val c <- Iterator.fromString(text)) - if (Character.isISOControl(c)) - buf.append("\\0" + Integer.toOctalString(c.asInstanceOf[Int])) - else - buf.append(c) - buf.toString - } - val svalue = - if (value.tag == CharTag) "'" + escape(value.stringValue) + "'" - else if (value.tag == StringTag) "\"" + escape(value.stringValue) + "\"" - else value.stringValue - value.tpe.toString() + "(" + svalue + ")" - } + override def toString(): String = + value.tpe.toString() + "(" + value.escapedStringValue + ")" // override def isNullable: boolean = value.value == null // override def isNonNull: boolean = value.value != null } @@ -979,7 +965,7 @@ trait Types requires SymbolTable { else if (sym.isRoot || sym.isEmptyPackageClass || sym.isInterpreterWrapper || sym.isAnonymousClass || sym.isRefinementClass) "" else if (sym.isPackageClass) sym.fullNameString + "." - else super.prefixString; + else super.prefixString } /** A class representing a method type with parameters. -- cgit v1.2.3