!is is supported
This commit is contained in:
@@ -1310,7 +1310,8 @@ public class ExpressionCodegen extends JetVisitor {
|
|||||||
Type type = typeMapper.jvmType((ClassDescriptor) descriptor, OwnerKind.INTERFACE);
|
Type type = typeMapper.jvmType((ClassDescriptor) descriptor, OwnerKind.INTERFACE);
|
||||||
v.instanceOf(type);
|
v.instanceOf(type);
|
||||||
}
|
}
|
||||||
myStack.push(StackValue.onStack(Type.BOOLEAN_TYPE));
|
StackValue value = StackValue.onStack(Type.BOOLEAN_TYPE);
|
||||||
|
myStack.push(expression.isNot() ? StackValue.not(value) : value);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void newTypeInfo(JetType jetType) {
|
private void newTypeInfo(JetType jetType) {
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ package org.jetbrains.jet.lang.psi;
|
|||||||
import com.intellij.lang.ASTNode;
|
import com.intellij.lang.ASTNode;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import org.jetbrains.jet.JetNodeTypes;
|
||||||
|
import org.jetbrains.jet.lexer.JetTokens;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author abreslav
|
* @author abreslav
|
||||||
@@ -27,4 +29,13 @@ public class JetIsExpression extends JetExpression {
|
|||||||
return findChildByClass(JetPattern.class);
|
return findChildByClass(JetPattern.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public JetSimpleNameExpression getOperationReference() {
|
||||||
|
return (JetSimpleNameExpression) findChildByType(JetNodeTypes.OPERATION_REFERENCE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isNot() {
|
||||||
|
return getOperationReference().getReferencedNameElementType() == JetTokens.NOT_IS;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,6 +52,13 @@ public class TypeInfoTest extends CodegenTestCase {
|
|||||||
assertFalse((Boolean) foo.invoke(null));
|
assertFalse((Boolean) foo.invoke(null));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testNotIsOperator() throws Exception {
|
||||||
|
loadText("fun foo(x: Any) = x !is Runnable");
|
||||||
|
Method foo = generateFunction();
|
||||||
|
assertTrue((Boolean) foo.invoke(null, new Object()));
|
||||||
|
assertFalse((Boolean) foo.invoke(null, newRunnable()));
|
||||||
|
}
|
||||||
|
|
||||||
private Runnable newRunnable() {
|
private Runnable newRunnable() {
|
||||||
return new Runnable() {
|
return new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user