summaryrefslogtreecommitdiff
path: root/sources/scalac/symtab/classfile/AttributeParser.java
diff options
context:
space:
mode:
Diffstat (limited to 'sources/scalac/symtab/classfile/AttributeParser.java')
-rw-r--r--sources/scalac/symtab/classfile/AttributeParser.java26
1 files changed, 21 insertions, 5 deletions
diff --git a/sources/scalac/symtab/classfile/AttributeParser.java b/sources/scalac/symtab/classfile/AttributeParser.java
index dc982c23af..83bc52e94d 100644
--- a/sources/scalac/symtab/classfile/AttributeParser.java
+++ b/sources/scalac/symtab/classfile/AttributeParser.java
@@ -10,6 +10,7 @@ package scalac.symtab.classfile;
import ch.epfl.lamp.util.Position;
import scalac.*;
+import scalac.atree.AConstant;
import scalac.symtab.*;
import scalac.util.*;
import java.util.*;
@@ -169,13 +170,28 @@ public class AttributeParser implements ClassfileConstants {
/** return the constant type for the given constant.
*/
Type constantType(Type base, Object value) {
+ return Type.constantType(constantValue(base, value));
+ }
+ AConstant constantValue(Type base, Object value) {
+ if (base.symbol() == parser.global.definitions.BOOLEAN_CLASS)
+ return AConstant.BOOLEAN(((Number)value).intValue() != 0);
if (base.symbol() == parser.global.definitions.BYTE_CLASS)
- value = new Byte(((Number)value).byteValue());
- if (base.symbol() == parser.global.definitions.CHAR_CLASS)
- value = new Character((char)((Number)value).intValue());
+ return AConstant.BYTE(((Number)value).byteValue());
if (base.symbol() == parser.global.definitions.SHORT_CLASS)
- value = new Short(((Number)value).shortValue());
- return Type.ConstantType(base, value);
+ return AConstant.SHORT(((Number)value).shortValue());
+ if (base.symbol() == parser.global.definitions.CHAR_CLASS)
+ return AConstant.CHAR((char)((Number)value).intValue());
+ if (base.symbol() == parser.global.definitions.INT_CLASS)
+ return AConstant.INT(((Number)value).intValue());
+ if (base.symbol() == parser.global.definitions.LONG_CLASS)
+ return AConstant.LONG(((Number)value).longValue());
+ if (base.symbol() == parser.global.definitions.FLOAT_CLASS)
+ return AConstant.FLOAT(((Number)value).floatValue());
+ if (base.symbol() == parser.global.definitions.DOUBLE_CLASS)
+ return AConstant.DOUBLE(((Number)value).doubleValue());
+ if (base.symbol() == parser.global.definitions.JAVA_STRING_CLASS)
+ return AConstant.STRING((String)value);
+ throw Debug.abort("illegal value", value + " - " + base);
}
/** return the type of a given constant.