43
43
import static com .oracle .graal .python .nodes .SpecialMethodNames .T___EQ__ ;
44
44
import static com .oracle .graal .python .util .PythonUtils .TS_ENCODING ;
45
45
46
- import com .oracle .graal .python .PythonLanguage ;
47
46
import com .oracle .graal .python .builtins .Python3Core ;
48
47
import com .oracle .graal .python .builtins .PythonBuiltinClassType ;
49
48
import com .oracle .graal .python .builtins .objects .PNone ;
63
62
import com .oracle .graal .python .runtime .PythonOptions ;
64
63
import com .oracle .graal .python .util .OverflowException ;
65
64
import com .oracle .truffle .api .RootCallTarget ;
66
- import com .oracle .truffle .api .TruffleLanguage ;
67
65
import com .oracle .truffle .api .dsl .Bind ;
68
66
import com .oracle .truffle .api .dsl .Cached ;
67
+ import com .oracle .truffle .api .dsl .Cached .Shared ;
69
68
import com .oracle .truffle .api .dsl .Fallback ;
70
69
import com .oracle .truffle .api .dsl .GenerateUncached ;
71
70
import com .oracle .truffle .api .dsl .ImportStatic ;
@@ -133,7 +132,7 @@ static boolean doIL(int left, long right) {
133
132
@ Specialization
134
133
static boolean doIP (int left , PInt right ,
135
134
@ Bind ("this" ) Node inliningTarget ,
136
- @ Cached . Shared ("isBuiltin" ) @ Cached IsAnyBuiltinObjectProfile isBuiltin ) {
135
+ @ Shared ("isBuiltin" ) @ Cached IsAnyBuiltinObjectProfile isBuiltin ) {
137
136
if (isBuiltin .profileIsAnyBuiltinObject (inliningTarget , right )) {
138
137
try {
139
138
return right .intValueExact () == left ;
@@ -158,7 +157,7 @@ static boolean doLL(long left, long right) {
158
157
@ Specialization
159
158
static boolean doLP (long left , PInt right ,
160
159
@ Bind ("this" ) Node inliningTarget ,
161
- @ Cached . Shared ("isBuiltin" ) @ Cached IsAnyBuiltinObjectProfile isBuiltin ) {
160
+ @ Shared ("isBuiltin" ) @ Cached IsAnyBuiltinObjectProfile isBuiltin ) {
162
161
if (isBuiltin .profileIsAnyBuiltinObject (inliningTarget , right )) {
163
162
try {
164
163
return left == right .longValueExact ();
@@ -185,14 +184,14 @@ boolean doPB(PInt left, boolean right) {
185
184
@ Specialization
186
185
static boolean doPI (PInt left , int right ,
187
186
@ Bind ("this" ) Node inliningTarget ,
188
- @ Cached . Shared ("isBuiltin" ) @ Cached IsAnyBuiltinObjectProfile isBuiltin ) {
187
+ @ Shared ("isBuiltin" ) @ Cached IsAnyBuiltinObjectProfile isBuiltin ) {
189
188
return doIP (right , left , inliningTarget , isBuiltin );
190
189
}
191
190
192
191
@ Specialization
193
192
static boolean doPL (PInt left , long right ,
194
193
@ Bind ("this" ) Node inliningTarget ,
195
- @ Cached . Shared ("isBuiltin" ) @ Cached IsAnyBuiltinObjectProfile isBuiltin ) {
194
+ @ Shared ("isBuiltin" ) @ Cached IsAnyBuiltinObjectProfile isBuiltin ) {
196
195
return doLP (right , left , inliningTarget , isBuiltin );
197
196
}
198
197
@@ -246,18 +245,25 @@ static boolean doCode(PCode left, PCode right,
246
245
247
246
// none
248
247
@ Specialization
249
- boolean doObjectPNone (Object left , PNone right ) {
250
- TruffleLanguage .Env env = PythonContext .get (this ).getEnv ();
251
- if (PythonLanguage .get (this ).getEngineOption (PythonOptions .EmulateJython ) && env .isHostObject (left ) && env .asHostObject (left ) == null &&
252
- right == PNone .NONE ) {
248
+ static boolean doObjectPNone (Object left , PNone right ,
249
+ @ Bind ("this" ) Node inliningTarget ,
250
+ @ Shared @ Cached IsForeignObjectNode isForeignObjectNode ,
251
+ @ Shared @ CachedLibrary (limit = "3" ) InteropLibrary lib ) {
252
+ if (left == right ) {
253
253
return true ;
254
254
}
255
- return left == right ;
255
+ if (isForeignObjectNode .execute (inliningTarget , left )) {
256
+ return lib .isNull (left );
257
+ }
258
+ return false ;
256
259
}
257
260
258
261
@ Specialization
259
- boolean doPNoneObject (PNone left , Object right ) {
260
- return doObjectPNone (right , left );
262
+ static boolean doPNoneObject (PNone left , Object right ,
263
+ @ Bind ("this" ) Node inliningTarget ,
264
+ @ Shared @ Cached IsForeignObjectNode isForeignObjectNode ,
265
+ @ Shared @ CachedLibrary (limit = "3" ) InteropLibrary lib ) {
266
+ return doObjectPNone (right , left , inliningTarget , isForeignObjectNode , lib );
261
267
}
262
268
263
269
// pstring (may be interned)
@@ -277,8 +283,8 @@ static boolean doPString(PString left, PString right,
277
283
@ Fallback
278
284
static boolean doOther (Object left , Object right ,
279
285
@ Bind ("this" ) Node inliningTarget ,
280
- @ Cached IsForeignObjectNode isForeignObjectNode ,
281
- @ CachedLibrary (limit = "3" ) InteropLibrary lib ) {
286
+ @ Shared @ Cached IsForeignObjectNode isForeignObjectNode ,
287
+ @ Shared @ CachedLibrary (limit = "3" ) InteropLibrary lib ) {
282
288
if (left == right ) {
283
289
return true ;
284
290
}
0 commit comments