fix the primitive case of instanceof

This commit is contained in:
Robert Muir 2016-06-24 12:44:57 -04:00
parent 001a060c84
commit e6819648cc
2 changed files with 5 additions and 1 deletions

View File

@ -79,7 +79,7 @@ public class EInstanceof extends AExpression {
// discard its result
writer.writePop(expression.actual.type.getSize());
// push our result: its a primitive so it cannot be null.
writer.push(resolvedType == Object.class || resolvedType == expressionType);
writer.push(resolvedType.isAssignableFrom(expressionType));
} else {
// ordinary instanceof
expression.write(writer, globals);

View File

@ -442,6 +442,10 @@ public class ComparisonTests extends ScriptTestCase {
public void testInstanceOf() {
assertEquals(true, exec("int x = 5; return x instanceof int"));
assertEquals(true, exec("int x = 5; return x instanceof Number"));
assertEquals(true, exec("int x = 5; return x instanceof Integer"));
assertEquals(true, exec("int x = 5; return x instanceof def"));
assertEquals(true, exec("int x = 5; return x instanceof Object"));
assertEquals(true, exec("def x = 5; return x instanceof int"));
assertEquals(true, exec("def x = 5; return x instanceof def"));
assertEquals(true, exec("def x = 5; return x instanceof Object"));