diff options
author | paltherr <paltherr@epfl.ch> | 2004-02-04 20:45:02 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2004-02-04 20:45:02 +0000 |
commit | 49b2a7e6b9ccc148fe38fc4c553f7423b40e0597 (patch) | |
tree | d9411b208294345a2064cfd58e76c66c2bb64d3e /sources/scalac/transformer/Erasure.java | |
parent | 7c34b692599e036b847c871a9573066c1a87733a (diff) | |
download | scala-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.java | 28 |
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 = |