|
180 | 180 | import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
|
181 | 181 | import com.oracle.truffle.api.RootCallTarget;
|
182 | 182 | import com.oracle.truffle.api.Truffle;
|
| 183 | +import com.oracle.truffle.api.TruffleLanguage; |
183 | 184 | import com.oracle.truffle.api.debug.Debugger;
|
184 | 185 | import com.oracle.truffle.api.dsl.Cached;
|
185 | 186 | import com.oracle.truffle.api.dsl.Cached.Shared;
|
|
203 | 204 | import com.oracle.truffle.api.profiles.BranchProfile;
|
204 | 205 | import com.oracle.truffle.api.profiles.ConditionProfile;
|
205 | 206 | import com.oracle.truffle.api.source.Source;
|
| 207 | +import java.util.HashMap; |
| 208 | +import java.util.Map; |
206 | 209 |
|
207 | 210 | @CoreFunctions(defineModule = BuiltinNames.BUILTINS)
|
208 | 211 | public final class BuiltinFunctions extends PythonBuiltins {
|
@@ -1113,9 +1116,11 @@ protected boolean emulateJython() {
|
1113 | 1116 |
|
1114 | 1117 | @Fallback
|
1115 | 1118 | 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()); |
1119 | 1124 | }
|
1120 | 1125 | return isInstanceCheckInternal(frame, instance, cls) || typeInstanceCheckNode.executeWith(frame, cls, instance);
|
1121 | 1126 | }
|
|
0 commit comments