Skip to content

Commit df71242

Browse files
committed
Handling more cases.
1 parent bda1640 commit df71242

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

graalpython/com.oracle.graal.python.test/src/tests/test_interop.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -490,9 +490,17 @@ def test_java_null_is_none():
490490
assert (x is z) == False
491491
assert x is not z
492492

493-
def test_isinstance():
493+
def test_isinstance01():
494494
if sys.graal_python_jython_emulation_enabled:
495495
import java.lang.Integer as Integer
496496
i = Integer(1)
497497
assert isinstance(i, Integer)
498+
499+
def test_isinstance02():
500+
if sys.graal_python_jython_emulation_enabled:
501+
import java.util.Map as Map
502+
import java.util.HashMap as HashMap
503+
h = HashMap()
504+
assert isinstance(h, HashMap)
505+
assert isinstance(h, Map)
498506

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/BuiltinFunctions.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@
180180
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
181181
import com.oracle.truffle.api.RootCallTarget;
182182
import com.oracle.truffle.api.Truffle;
183+
import com.oracle.truffle.api.TruffleLanguage;
183184
import com.oracle.truffle.api.debug.Debugger;
184185
import com.oracle.truffle.api.dsl.Cached;
185186
import com.oracle.truffle.api.dsl.Cached.Shared;
@@ -203,6 +204,8 @@
203204
import com.oracle.truffle.api.profiles.BranchProfile;
204205
import com.oracle.truffle.api.profiles.ConditionProfile;
205206
import com.oracle.truffle.api.source.Source;
207+
import java.util.HashMap;
208+
import java.util.Map;
206209

207210
@CoreFunctions(defineModule = BuiltinNames.BUILTINS)
208211
public final class BuiltinFunctions extends PythonBuiltins {
@@ -1113,9 +1116,11 @@ protected boolean emulateJython() {
11131116

11141117
@Fallback
11151118
boolean isInstance(VirtualFrame frame, Object instance, Object cls) {
1116-
if (emulateJython() && getContext().getEnv().isHostObject(cls)) {
1117-
Object hostType = getContext().getEnv().asHostObject(cls);
1118-
return instance.getClass().isAssignableFrom((Class<?>) hostType);
1119+
TruffleLanguage.Env env = getContext().getEnv();
1120+
if (emulateJython() && env.isHostObject(cls)) {
1121+
Object hostCls = env.asHostObject(cls);
1122+
Object hostInstance = env.isHostObject(instance) ? env.asHostObject(instance) : instance;
1123+
return hostCls instanceof Class && ((Class<?>) hostCls).isAssignableFrom(hostInstance.getClass());
11191124
}
11201125
return isInstanceCheckInternal(frame, instance, cls) || typeInstanceCheckNode.executeWith(frame, cls, instance);
11211126
}

0 commit comments

Comments
 (0)