Remove intrinsics from CollectionElement

This commit is contained in:
Michael Bogdanov
2015-04-03 15:58:04 +03:00
parent 44582f76e3
commit b2fe44997a
@@ -860,8 +860,8 @@ public abstract class StackValue {
}
public static class CollectionElement extends StackValueWithSimpleReceiver {
private final Callable getter;
private final Callable setter;
private final ExtendedCallable getter;
private final ExtendedCallable setter;
private final ExpressionCodegen codegen;
private final GenerationState state;
private final ResolvedCall<FunctionDescriptor> resolvedGetCall;
@@ -883,8 +883,10 @@ public abstract class StackValue {
this.state = state;
this.setterDescriptor = resolvedSetCall == null ? null : resolvedSetCall.getResultingDescriptor();
this.getterDescriptor = resolvedGetCall == null ? null : resolvedGetCall.getResultingDescriptor();
this.setter = resolvedSetCall == null ? null : codegen.resolveToCallable(setterDescriptor, false, resolvedSetCall);
this.getter = resolvedGetCall == null ? null : codegen.resolveToCallable(getterDescriptor, false, resolvedGetCall);
this.setter =
resolvedSetCall == null ? null : (ExtendedCallable) codegen.resolveToCallable(setterDescriptor, false, resolvedSetCall);
this.getter =
resolvedGetCall == null ? null : (ExtendedCallable) codegen.resolveToCallable(getterDescriptor, false, resolvedGetCall);
this.codegen = codegen;
}
@@ -893,13 +895,8 @@ public abstract class StackValue {
if (getter == null) {
throw new UnsupportedOperationException("no getter specified");
}
if (getter instanceof ExtendedCallable) {
((ExtendedCallable) getter).invokeWithNotNullAssertion(v, state, resolvedGetCall);
}
else {
StackValue result = ((IntrinsicMethod) getter).generate(codegen, this.type, null, Collections.<JetExpression>emptyList(), StackValue.none());
result.put(result.type, v);
}
getter.invokeWithNotNullAssertion(v, state, resolvedGetCall);
coerceTo(type, v);
}
@@ -949,20 +946,13 @@ public abstract class StackValue {
if (setter == null) {
throw new UnsupportedOperationException("no setter specified");
}
if (setter instanceof ExtendedCallable) {
ExtendedCallable method = (ExtendedCallable) setter;
Type[] argumentTypes = method.getArgumentTypes();
coerce(topOfStackType, argumentTypes[argumentTypes.length - 1], v);
method.invokeWithNotNullAssertion(v, state, resolvedSetCall);
Type returnType = method.getReturnType();
if (returnType != Type.VOID_TYPE) {
pop(v, returnType);
}
}
else {
//noinspection ConstantConditions
StackValue result = ((IntrinsicMethod) setter).generate(codegen, null, null, Collections.<JetExpression>emptyList(), StackValue.none());
result.put(result.type, v);
Type[] argumentTypes = setter.getArgumentTypes();
coerce(topOfStackType, argumentTypes[argumentTypes.length - 1], v);
setter.invokeWithNotNullAssertion(v, state, resolvedSetCall);
Type returnType = setter.getReturnType();
if (returnType != Type.VOID_TYPE) {
pop(v, returnType);
}
}
}