Minor, simplify StackValue.ArrayElement

This commit is contained in:
Alexander Udalov
2014-04-23 16:45:17 +04:00
parent 678520364a
commit 925b27238c
2 changed files with 15 additions and 19 deletions
@@ -2409,7 +2409,7 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
v.dup(); v.dup();
v.iconst(i); v.iconst(i);
gen(arguments.get(i).getArgumentExpression(), elementType); gen(arguments.get(i).getArgumentExpression(), elementType);
StackValue.arrayElement(elementType, false).store(elementType, v); StackValue.arrayElement(elementType).store(elementType, v);
} }
} }
} }
@@ -3332,11 +3332,10 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
assert type != null; assert type != null;
if (KotlinBuiltIns.getInstance().isArray(type)) { if (KotlinBuiltIns.getInstance().isArray(type)) {
JetType elementType = type.getArguments().get(0).getType(); JetType elementType = type.getArguments().get(0).getType();
Type notBoxed = asmType(elementType); return StackValue.arrayElement(boxType(asmType(elementType)));
return StackValue.arrayElement(notBoxed, true);
} }
else { else {
return StackValue.arrayElement(correctElementType(arrayType), false); return StackValue.arrayElement(correctElementType(arrayType));
} }
} }
else { else {
@@ -19,10 +19,6 @@ package org.jetbrains.jet.codegen;
import com.intellij.psi.tree.IElementType; import com.intellij.psi.tree.IElementType;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.org.objectweb.asm.Label;
import org.jetbrains.org.objectweb.asm.Type;
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter;
import org.jetbrains.org.objectweb.asm.commons.Method;
import org.jetbrains.jet.codegen.intrinsics.IntrinsicMethod; import org.jetbrains.jet.codegen.intrinsics.IntrinsicMethod;
import org.jetbrains.jet.codegen.state.GenerationState; import org.jetbrains.jet.codegen.state.GenerationState;
import org.jetbrains.jet.codegen.state.JetTypeMapper; import org.jetbrains.jet.codegen.state.JetTypeMapper;
@@ -31,12 +27,16 @@ import org.jetbrains.jet.lang.psi.JetExpression;
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall;
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue;
import org.jetbrains.jet.lexer.JetTokens; import org.jetbrains.jet.lexer.JetTokens;
import org.jetbrains.org.objectweb.asm.Label;
import org.jetbrains.org.objectweb.asm.Type;
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter;
import org.jetbrains.org.objectweb.asm.commons.Method;
import java.util.List; import java.util.List;
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
import static org.jetbrains.jet.codegen.AsmUtil.*; import static org.jetbrains.jet.codegen.AsmUtil.*;
import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.*; import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.*;
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
public abstract class StackValue { public abstract class StackValue {
@@ -118,8 +118,8 @@ public abstract class StackValue {
} }
@NotNull @NotNull
public static StackValue arrayElement(Type type, boolean unbox) { public static StackValue arrayElement(Type type) {
return new ArrayElement(type, unbox); return new ArrayElement(type);
} }
@NotNull @NotNull
@@ -567,23 +567,20 @@ public abstract class StackValue {
} }
private static class ArrayElement extends StackValue { private static class ArrayElement extends StackValue {
private final Type boxed; public ArrayElement(Type type) {
public ArrayElement(Type type, boolean unbox) {
super(type); super(type);
this.boxed = unbox ? boxType(type) : type;
} }
@Override @Override
public void put(Type type, InstructionAdapter v) { public void put(Type type, InstructionAdapter v) {
v.aload(boxed); // assumes array and index are on the stack v.aload(this.type); // assumes array and index are on the stack
coerce(boxed, type, v); coerceTo(type, v);
} }
@Override @Override
public void store(Type topOfStackType, InstructionAdapter v) { public void store(Type topOfStackType, InstructionAdapter v) {
coerce(topOfStackType, boxed, v); coerceFrom(topOfStackType, v);
v.astore(boxed); v.astore(this.type);
} }
@Override @Override