summaryrefslogtreecommitdiff
path: root/sources/scalac/transformer/Erasure.java
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2004-02-04 20:45:02 +0000
committerpaltherr <paltherr@epfl.ch>2004-02-04 20:45:02 +0000
commit49b2a7e6b9ccc148fe38fc4c553f7423b40e0597 (patch)
treed9411b208294345a2064cfd58e76c66c2bb64d3e /sources/scalac/transformer/Erasure.java
parent7c34b692599e036b847c871a9573066c1a87733a (diff)
downloadscala-49b2a7e6b9ccc148fe38fc4c553f7423b40e0597.tar.gz
scala-49b2a7e6b9ccc148fe38fc4c553f7423b40e0597.tar.bz2
scala-49b2a7e6b9ccc148fe38fc4c553f7423b40e0597.zip
- Changed transformation of array creations for...
- Changed transformation of array creations for interpreter
Diffstat (limited to 'sources/scalac/transformer/Erasure.java')
-rw-r--r--sources/scalac/transformer/Erasure.java28
1 files changed, 7 insertions, 21 deletions
diff --git a/sources/scalac/transformer/Erasure.java b/sources/scalac/transformer/Erasure.java
index 0de4624d01..be6e96ff68 100644
--- a/sources/scalac/transformer/Erasure.java
+++ b/sources/scalac/transformer/Erasure.java
@@ -416,30 +416,16 @@ public class Erasure extends GenTransformer implements Modifiers {
* of given type.
*/
private Tree genNewUnboxedArray(int pos, Type element, Tree size) {
+ if (global.target == global.TARGET_INT) {
+ Tree[] targs = {gen.mkType(pos, element)};
+ Tree[] vargs = {coerce(size, UNBOXED_INT)};
+ Tree fun = gen.mkGlobalRef(pos, primitives.NEW_OARRAY);
+ Tree array = gen.mkApplyTV(fun, targs, vargs);
+ return gen.mkAsInstanceOf(array, Type.UnboxedArrayType(element));
+ }
switch (element) {
case UnboxedType(int kind): return genNewUnboxedArray(pos, kind, size);
}
- if (global.target == global.TARGET_INT) {
- int levels = 0;
- while (isUnboxedArrayType(element)) {
- element = getArrayElementType(element);
- levels++;
- }
- global.nextPhase();
- while (true) {
- Symbol clasz = element.symbol();
- if (clasz.isJava()) break;
- if (clasz == definitions.ANY_CLASS) break;
- if (isUnboxedSimpleType(element)) break;
- assert element.parents().length > 0: element;
- element = element.parents()[0];
- }
- global.prevPhase();
- while (levels > 0) {
- element = Type.UnboxedArrayType(element);
- levels--;
- }
- }
String name = primitives.getNameForClassForName(element);
Tree[] args = { coerce(size, UNBOXED_INT), gen.mkStringLit(pos,name) };
Tree array =