summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormihaylov <mihaylov@epfl.ch>2005-03-29 13:36:57 +0000
committermihaylov <mihaylov@epfl.ch>2005-03-29 13:36:57 +0000
commit713aadc739f23bd6d19230776c9eb3f8c9962e5e (patch)
tree429d4b009916663cba1da6b5506a0f972f086fa7
parent9e2006a60e136481354ee6c3238303606fe284ea (diff)
downloadscala-713aadc739f23bd6d19230776c9eb3f8c9962e5e.tar.gz
scala-713aadc739f23bd6d19230776c9eb3f8c9962e5e.tar.bz2
scala-713aadc739f23bd6d19230776c9eb3f8c9962e5e.zip
- use the mini-transformer when targetting the ...
- use the mini-transformer when targetting the MSIL backend; this phase is not applicable for the MSIL backend; - do not initialize certain values if the mini-transformer is used; this is necessary with the MSIL backend which leaves some uninitilized fields in Definitions that are needed by TypesAsValues.
-rw-r--r--sources/scalac/transformer/TypesAsValuesPhase.java52
1 files changed, 27 insertions, 25 deletions
diff --git a/sources/scalac/transformer/TypesAsValuesPhase.java b/sources/scalac/transformer/TypesAsValuesPhase.java
index e3ec60af48..92e397ae0d 100644
--- a/sources/scalac/transformer/TypesAsValuesPhase.java
+++ b/sources/scalac/transformer/TypesAsValuesPhase.java
@@ -95,8 +95,7 @@ public class TypesAsValuesPhase extends Phase {
private final Definitions defs = global.definitions;
private final Primitives prims = global.primitives;
- private final Type.MethodType typeAccessorType =
- new Type.MethodType(new Symbol[]{}, defs.TYPE_TYPE());
+ private final Type.MethodType typeAccessorType;
private final Symbol ARRAY_CONSTRUCTOR =
defs.ARRAY_CLASS.primaryConstructor();
@@ -111,31 +110,34 @@ public class TypesAsValuesPhase extends Phase {
super(global, descriptor);
// If RTT are disabled, use a minimal transformer which simply
// replaces [ia]sInstanceOf with their erased counterpart.
- if (global.runTimeTypes)
+ if (global.runTimeTypes && global.target != Global.TARGET_MSIL) {
transformer = new TV_Transformer(global);
- else
+ typeAccessorType = new Type.MethodType(new Symbol[]{}, defs.TYPE_TYPE());
+ predefTypes = new HashMap();
+ predefTypes.put(defs.DOUBLE_CLASS, defs.RTT_DOUBLE());
+ predefTypes.put(defs.FLOAT_CLASS, defs.RTT_FLOAT());
+ predefTypes.put(defs.LONG_CLASS, defs.RTT_LONG());
+ predefTypes.put(defs.INT_CLASS, defs.RTT_INT());
+ predefTypes.put(defs.SHORT_CLASS, defs.RTT_SHORT());
+ predefTypes.put(defs.CHAR_CLASS, defs.RTT_CHAR());
+ predefTypes.put(defs.BYTE_CLASS, defs.RTT_BYTE());
+ predefTypes.put(defs.BOOLEAN_CLASS, defs.RTT_BOOLEAN());
+ predefTypes.put(defs.UNIT_CLASS, defs.RTT_UNIT());
+
+ predefTypes.put(defs.ANY_CLASS, defs.RTT_ANY());
+ predefTypes.put(defs.ANYVAL_CLASS, defs.RTT_ANYVAL());
+ predefTypes.put(defs.ALLREF_CLASS, defs.RTT_ALLREF());
+ predefTypes.put(defs.ALL_CLASS, defs.RTT_ALL());
+
+ membersToAdd.put(defs.ARRAY_CLASS, new Symbol[0]);
+ paramsToAdd.put(ARRAY_CONSTRUCTOR, new Symbol[0]);
+
+ ancestorCache.put(defs.OBJECT_CLASS, new Ancestor[0][]);
+ } else {
transformer = new TV_MiniTransformer(global);
-
- predefTypes = new HashMap();
- predefTypes.put(defs.DOUBLE_CLASS, defs.RTT_DOUBLE());
- predefTypes.put(defs.FLOAT_CLASS, defs.RTT_FLOAT());
- predefTypes.put(defs.LONG_CLASS, defs.RTT_LONG());
- predefTypes.put(defs.INT_CLASS, defs.RTT_INT());
- predefTypes.put(defs.SHORT_CLASS, defs.RTT_SHORT());
- predefTypes.put(defs.CHAR_CLASS, defs.RTT_CHAR());
- predefTypes.put(defs.BYTE_CLASS, defs.RTT_BYTE());
- predefTypes.put(defs.BOOLEAN_CLASS, defs.RTT_BOOLEAN());
- predefTypes.put(defs.UNIT_CLASS, defs.RTT_UNIT());
-
- predefTypes.put(defs.ANY_CLASS, defs.RTT_ANY());
- predefTypes.put(defs.ANYVAL_CLASS, defs.RTT_ANYVAL());
- predefTypes.put(defs.ALLREF_CLASS, defs.RTT_ALLREF());
- predefTypes.put(defs.ALL_CLASS, defs.RTT_ALL());
-
- membersToAdd.put(defs.ARRAY_CLASS, new Symbol[0]);
- paramsToAdd.put(ARRAY_CONSTRUCTOR, new Symbol[0]);
-
- ancestorCache.put(defs.OBJECT_CLASS, new Ancestor[0][]);
+ typeAccessorType = null;
+ predefTypes = null;
+ }
}
/**