Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ static MethodHandle lookupMethod(Definition definition, Lookup lookup, MethodTyp
captures[capture] = callSiteType.parameterType(i + 1 + capture);
}
MethodHandle filter;
Definition.Type interfaceType = method.arguments.get(i - 1 - replaced);
Definition.Type interfaceType = definition.ClassToType(method.arguments.get(i - 1 - replaced));
if (signature.charAt(0) == 'S') {
// the implementation is strongly typed, now that we know the interface type,
// we have everything.
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -69,14 +69,14 @@ void analyze(Locals locals) {
for (int argument = 0; argument < arguments.size(); ++argument) {
AExpression expression = arguments.get(argument);

expression.expected = Definition.TypeToClass(method.arguments.get(argument));
expression.expected = method.arguments.get(argument);
expression.internal = true;
expression.analyze(locals);
arguments.set(argument, expression.cast(locals));
}

statement = true;
actual = Definition.TypeToClass(method.rtn);
actual = method.rtn;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,14 +80,13 @@ void analyze(Locals locals) {

// check casts between the interface method and the delegate method are legal
for (int i = 0; i < ref.interfaceMethod.arguments.size(); ++i) {
Class<?> from = Definition.TypeToClass(ref.interfaceMethod.arguments.get(i));
Class<?> to = Definition.TypeToClass(ref.delegateMethod.arguments.get(i));
Class<?> from = ref.interfaceMethod.arguments.get(i);
Class<?> to = ref.delegateMethod.arguments.get(i);
AnalyzerCaster.getLegalCast(location, from, to, false, true);
}

if (ref.interfaceMethod.rtn.clazz != void.class) {
AnalyzerCaster.getLegalCast(location,
Definition.TypeToClass(ref.delegateMethod.rtn), Definition.TypeToClass(ref.interfaceMethod.rtn), false, true);
if (ref.interfaceMethod.rtn != void.class) {
AnalyzerCaster.getLegalCast(location, ref.delegateMethod.rtn, ref.interfaceMethod.rtn, false, true);
}
} catch (IllegalArgumentException e) {
throw createError(e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,14 +80,13 @@ void analyze(Locals locals) {

// check casts between the interface method and the delegate method are legal
for (int i = 0; i < interfaceMethod.arguments.size(); ++i) {
Class<?> from = Definition.TypeToClass(interfaceMethod.arguments.get(i));
Class<?> to = Definition.TypeToClass(delegateMethod.arguments.get(i));
Class<?> from = interfaceMethod.arguments.get(i);
Class<?> to = delegateMethod.arguments.get(i);
AnalyzerCaster.getLegalCast(location, from, to, false, true);
}

if (interfaceMethod.rtn.clazz != void.class) {
AnalyzerCaster.getLegalCast(
location, Definition.TypeToClass(delegateMethod.rtn), Definition.TypeToClass(interfaceMethod.rtn), false, true);
if (interfaceMethod.rtn != void.class) {
AnalyzerCaster.getLegalCast(location, delegateMethod.rtn, interfaceMethod.rtn, false, true);
}
} else {
// whitelist lookup
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,17 +130,17 @@ void analyze(Locals locals) {
throw new IllegalArgumentException("Incorrect number of parameters for [" + interfaceMethod.name +
"] in [" + Definition.ClassToName(expected) + "]");
// for method invocation, its allowed to ignore the return value
if (interfaceMethod.rtn.equals(locals.getDefinition().voidType)) {
if (interfaceMethod.rtn == void.class) {
returnType = def.class;
} else {
returnType = Definition.TypeToClass(interfaceMethod.rtn);
returnType = interfaceMethod.rtn;
}
// replace any null types with the actual type
actualParamTypeStrs = new ArrayList<>(paramTypeStrs.size());
for (int i = 0; i < paramTypeStrs.size(); i++) {
String paramType = paramTypeStrs.get(i);
if (paramType == null) {
actualParamTypeStrs.add(interfaceMethod.arguments.get(i).name);
actualParamTypeStrs.add(Definition.ClassToName(interfaceMethod.arguments.get(i)));
} else {
actualParamTypeStrs.add(paramType);
}
Expand Down Expand Up @@ -190,14 +190,13 @@ void analyze(Locals locals) {

// check casts between the interface method and the delegate method are legal
for (int i = 0; i < interfaceMethod.arguments.size(); ++i) {
Class<?> from = Definition.TypeToClass(interfaceMethod.arguments.get(i));
Class<?> from = interfaceMethod.arguments.get(i);
Class<?> to = Definition.TypeToClass(desugared.parameters.get(i + captures.size()).type);
AnalyzerCaster.getLegalCast(location, from, to, false, true);
}

if (interfaceMethod.rtn.clazz != void.class) {
AnalyzerCaster.getLegalCast(
location, Definition.TypeToClass(desugared.rtnType), Definition.TypeToClass(interfaceMethod.rtn), false, true);
if (interfaceMethod.rtn != void.class) {
AnalyzerCaster.getLegalCast(location, desugared.rtnType, interfaceMethod.rtn, false, true);
}

actual = expected;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ void analyze(Locals locals) {
constructor = struct.constructors.get(new Definition.MethodKey("<init>", arguments.size()));

if (constructor != null) {
Type[] types = new Type[constructor.arguments.size()];
Class<?>[] types = new Class<?>[constructor.arguments.size()];
constructor.arguments.toArray(types);

if (constructor.arguments.size() != arguments.size()) {
Expand All @@ -79,7 +79,7 @@ void analyze(Locals locals) {
for (int argument = 0; argument < arguments.size(); ++argument) {
AExpression expression = arguments.get(argument);

expression.expected = Definition.TypeToClass(types[argument]);
expression.expected = types[argument];
expression.internal = true;
expression.analyze(locals);
arguments.set(argument, expression.cast(locals));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,14 +57,14 @@ void analyze(Locals locals) {
for (int argument = 0; argument < arguments.size(); ++argument) {
AExpression expression = arguments.get(argument);

expression.expected = Definition.TypeToClass(method.arguments.get(argument));
expression.expected = method.arguments.get(argument);
expression.internal = true;
expression.analyze(locals);
arguments.set(argument, expression.cast(locals));
}

statement = true;
actual = Definition.TypeToClass(method.rtn);
actual = method.rtn;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,20 +52,20 @@ void extractVariables(Set<String> variables) {
void analyze(Locals locals) {
if (write && Modifier.isFinal(field.modifiers)) {
throw createError(new IllegalArgumentException(
"Cannot write to read-only field [" + field.name + "] for type [" + field.type.name + "]."));
"Cannot write to read-only field [" + field.name + "] for type [" + Definition.ClassToName(field.clazz) + "]."));
}

actual = Definition.TypeToClass(field.type);
actual = field.clazz;
}

@Override
void write(MethodWriter writer, Globals globals) {
writer.writeDebugInfo(location);

if (java.lang.reflect.Modifier.isStatic(field.modifiers)) {
writer.getStatic(field.owner.type, field.javaName, field.type.type);
writer.getStatic(field.owner.type, field.javaName, MethodWriter.getType(field.clazz));
} else {
writer.getField(field.owner.type, field.javaName, field.type.type);
writer.getField(field.owner.type, field.javaName, MethodWriter.getType(field.clazz));
}
}

Expand Down Expand Up @@ -94,9 +94,9 @@ void load(MethodWriter writer, Globals globals) {
writer.writeDebugInfo(location);

if (java.lang.reflect.Modifier.isStatic(field.modifiers)) {
writer.getStatic(field.owner.type, field.javaName, field.type.type);
writer.getStatic(field.owner.type, field.javaName, MethodWriter.getType(field.clazz));
} else {
writer.getField(field.owner.type, field.javaName, field.type.type);
writer.getField(field.owner.type, field.javaName, MethodWriter.getType(field.clazz));
}
}

Expand All @@ -105,9 +105,9 @@ void store(MethodWriter writer, Globals globals) {
writer.writeDebugInfo(location);

if (java.lang.reflect.Modifier.isStatic(field.modifiers)) {
writer.putStatic(field.owner.type, field.javaName, field.type.type);
writer.putStatic(field.owner.type, field.javaName, MethodWriter.getType(field.clazz));
} else {
writer.putField(field.owner.type, field.javaName, field.type.type);
writer.putField(field.owner.type, field.javaName, MethodWriter.getType(field.clazz));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,12 @@ void analyze(Locals locals) {
getter = struct.methods.get(new Definition.MethodKey("get", 1));
setter = struct.methods.get(new Definition.MethodKey("set", 2));

if (getter != null && (getter.rtn.clazz == void.class || getter.arguments.size() != 1 ||
getter.arguments.get(0).clazz != int.class)) {
if (getter != null && (getter.rtn == void.class || getter.arguments.size() != 1 ||
getter.arguments.get(0) != int.class)) {
throw createError(new IllegalArgumentException("Illegal list get shortcut for type [" + struct.name + "]."));
}

if (setter != null && (setter.arguments.size() != 2 || setter.arguments.get(0).clazz != int.class)) {
if (setter != null && (setter.arguments.size() != 2 || setter.arguments.get(0) != int.class)) {
throw createError(new IllegalArgumentException("Illegal list set shortcut for type [" + struct.name + "]."));
}

Expand All @@ -78,7 +78,7 @@ void analyze(Locals locals) {
index.analyze(locals);
index = index.cast(locals);

actual = setter != null ? Definition.TypeToClass(setter.arguments.get(1)) : Definition.TypeToClass(getter.rtn);
actual = setter != null ? setter.arguments.get(1) : getter.rtn;
} else {
throw createError(new IllegalArgumentException("Illegal list shortcut for type [" + struct.name + "]."));
}
Expand Down Expand Up @@ -119,8 +119,8 @@ void load(MethodWriter writer, Globals globals) {

getter.write(writer);

if (!getter.rtn.clazz.equals(getter.handle.type().returnType())) {
writer.checkCast(getter.rtn.type);
if (getter.rtn == getter.handle.type().returnType()) {
writer.checkCast(MethodWriter.getType(getter.rtn));
}
}

Expand All @@ -130,7 +130,7 @@ void store(MethodWriter writer, Globals globals) {

setter.write(writer);

writer.writePop(setter.rtn.type.getSize());
writer.writePop(MethodWriter.getType(setter.rtn).getSize());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ void analyze(Locals locals) {
getter = struct.methods.get(new Definition.MethodKey("get", 1));
setter = struct.methods.get(new Definition.MethodKey("put", 2));

if (getter != null && (getter.rtn.clazz == void.class || getter.arguments.size() != 1)) {
if (getter != null && (getter.rtn == void.class || getter.arguments.size() != 1)) {
throw createError(new IllegalArgumentException("Illegal map get shortcut for type [" + struct.name + "]."));
}

Expand All @@ -72,12 +72,11 @@ void analyze(Locals locals) {
}

if ((read || write) && (!read || getter != null) && (!write || setter != null)) {
index.expected = setter != null ?
Definition.TypeToClass(setter.arguments.get(0)) : Definition.TypeToClass(getter.arguments.get(0));
index.expected = setter != null ? setter.arguments.get(0) : getter.arguments.get(0);
index.analyze(locals);
index = index.cast(locals);

actual = setter != null ? Definition.TypeToClass(setter.arguments.get(1)) : Definition.TypeToClass(getter.rtn);
actual = setter != null ? setter.arguments.get(1) : getter.rtn;
} else {
throw createError(new IllegalArgumentException("Illegal map shortcut for type [" + struct.name + "]."));
}
Expand All @@ -91,8 +90,8 @@ void write(MethodWriter writer, Globals globals) {

getter.write(writer);

if (!getter.rtn.clazz.equals(getter.handle.type().returnType())) {
writer.checkCast(getter.rtn.type);
if (getter.rtn != getter.handle.type().returnType()) {
writer.checkCast(MethodWriter.getType(getter.rtn));
}
}

Expand Down Expand Up @@ -122,8 +121,8 @@ void load(MethodWriter writer, Globals globals) {

getter.write(writer);

if (!getter.rtn.clazz.equals(getter.handle.type().returnType())) {
writer.checkCast(getter.rtn.type);
if (getter.rtn != getter.handle.type().returnType()) {
writer.checkCast(MethodWriter.getType(getter.rtn));
}
}

Expand All @@ -133,7 +132,7 @@ void store(MethodWriter writer, Globals globals) {

setter.write(writer);

writer.writePop(setter.rtn.type.getSize());
writer.writePop(MethodWriter.getType(setter.rtn).getSize());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,12 +54,12 @@ void extractVariables(Set<String> variables) {

@Override
void analyze(Locals locals) {
if (getter != null && (getter.rtn.clazz == void.class || !getter.arguments.isEmpty())) {
if (getter != null && (getter.rtn == void.class || !getter.arguments.isEmpty())) {
throw createError(new IllegalArgumentException(
"Illegal get shortcut on field [" + value + "] for type [" + type + "]."));
}

if (setter != null && (setter.rtn.clazz != void.class || setter.arguments.size() != 1)) {
if (setter != null && (setter.rtn != void.class || setter.arguments.size() != 1)) {
throw createError(new IllegalArgumentException(
"Illegal set shortcut on field [" + value + "] for type [" + type + "]."));
}
Expand All @@ -69,7 +69,7 @@ void analyze(Locals locals) {
}

if ((getter != null || setter != null) && (!read || getter != null) && (!write || setter != null)) {
actual = setter != null ? Definition.TypeToClass(setter.arguments.get(0)) : Definition.TypeToClass(getter.rtn);
actual = setter != null ? setter.arguments.get(0) : getter.rtn;
} else {
throw createError(new IllegalArgumentException("Illegal shortcut on field [" + value + "] for type [" + type + "]."));
}
Expand All @@ -81,8 +81,8 @@ void write(MethodWriter writer, Globals globals) {

getter.write(writer);

if (!getter.rtn.clazz.equals(getter.handle.type().returnType())) {
writer.checkCast(getter.rtn.type);
if (!getter.rtn.equals(getter.handle.type().returnType())) {
writer.checkCast(MethodWriter.getType(getter.rtn));
}
}

Expand Down Expand Up @@ -112,8 +112,8 @@ void load(MethodWriter writer, Globals globals) {

getter.write(writer);

if (!getter.rtn.clazz.equals(getter.handle.type().returnType())) {
writer.checkCast(getter.rtn.type);
if (getter.rtn != getter.handle.type().returnType()) {
writer.checkCast(MethodWriter.getType(getter.rtn));
}
}

Expand All @@ -123,7 +123,7 @@ void store(MethodWriter writer, Globals globals) {

setter.write(writer);

writer.writePop(setter.rtn.type.getSize());
writer.writePop(MethodWriter.getType(setter.rtn).getSize());
}

@Override
Expand Down
Loading