94
94
import com .oracle .graal .python .builtins .objects .object .PythonObjectLibrary ;
95
95
import com .oracle .graal .python .builtins .objects .str .PString ;
96
96
import com .oracle .graal .python .builtins .objects .tuple .PTuple ;
97
- import com .oracle .graal .python .builtins .objects .type .LazyPythonClass ;
98
97
import com .oracle .graal .python .builtins .objects .type .PythonAbstractClass ;
99
98
import com .oracle .graal .python .builtins .objects .type .PythonBuiltinClass ;
100
99
import com .oracle .graal .python .builtins .objects .type .PythonClass ;
@@ -642,12 +641,13 @@ public boolean isMapping(@CachedLibrary("this") PythonObjectLibrary plib,
642
641
643
642
@ ExportMessage
644
643
public boolean isSequenceType (
644
+ @ CachedLibrary ("this" ) PythonObjectLibrary lib ,
645
645
@ Shared ("hasGetItemNode" ) @ Cached LookupAttributeInMRONode .Dynamic hasGetItemNode ,
646
646
@ Shared ("hasLenNode" ) @ Cached LookupAttributeInMRONode .Dynamic hasLenNode ,
647
647
@ Shared ("isLazyClass" ) @ Cached ("createBinaryProfile()" ) ConditionProfile isLazyClass ,
648
648
@ Shared ("lenProfile" ) @ Cached ("createBinaryProfile()" ) ConditionProfile lenProfile ,
649
649
@ Shared ("getItemProfile" ) @ Cached ("createBinaryProfile()" ) ConditionProfile getItemProfile ) {
650
- if (isLazyClass .profile (this instanceof LazyPythonClass )) {
650
+ if (isLazyClass .profile (lib . isLazyPythonClass ( this ) )) {
651
651
if (lenProfile .profile (hasLenNode .execute (this , __LEN__ ) != PNone .NO_VALUE )) {
652
652
return getItemProfile .profile (hasGetItemNode .execute (this , __GETITEM__ ) != PNone .NO_VALUE );
653
653
}
@@ -657,6 +657,7 @@ public boolean isSequenceType(
657
657
658
658
@ ExportMessage
659
659
public boolean isMappingType (
660
+ @ CachedLibrary ("this" ) PythonObjectLibrary lib ,
660
661
@ Shared ("hasGetItemNode" ) @ Cached LookupAttributeInMRONode .Dynamic hasGetItemNode ,
661
662
@ Shared ("hasLenNode" ) @ Cached LookupAttributeInMRONode .Dynamic hasLenNode ,
662
663
@ Shared ("isLazyClass" ) @ Cached ("createBinaryProfile()" ) ConditionProfile isLazyClass ,
@@ -666,7 +667,7 @@ public boolean isMappingType(
666
667
@ Exclusive @ Cached LookupAttributeInMRONode .Dynamic hasItemsNode ,
667
668
@ Exclusive @ Cached LookupAttributeInMRONode .Dynamic hasValuesNode ,
668
669
@ Exclusive @ Cached ("createBinaryProfile()" ) ConditionProfile profile ) {
669
- if (isSequenceType (hasGetItemNode , hasLenNode , isLazyClass , lenProfile , getItemProfile )) {
670
+ if (isSequenceType (lib , hasGetItemNode , hasLenNode , isLazyClass , lenProfile , getItemProfile )) {
670
671
return profile .profile (hasKeysNode .execute (this , SpecialMethodNames .KEYS ) != PNone .NO_VALUE &&
671
672
hasItemsNode .execute (this , SpecialMethodNames .ITEMS ) != PNone .NO_VALUE &&
672
673
hasValuesNode .execute (this , SpecialMethodNames .VALUES ) != PNone .NO_VALUE );
@@ -1144,9 +1145,9 @@ public final boolean isContextManager(@Exclusive @Cached HasInheritedAttributeNo
1144
1145
private static final String TIME_TYPE = "time" ;
1145
1146
private static final String STRUCT_TIME_TYPE = "struct_time" ;
1146
1147
1147
- private static Object readType (ReadAttributeFromObjectNode readTypeNode , Object module , String typename ) {
1148
+ private static Object readType (ReadAttributeFromObjectNode readTypeNode , Object module , String typename , PythonObjectLibrary plib ) {
1148
1149
Object type = readTypeNode .execute (module , typename );
1149
- if (type instanceof LazyPythonClass ) {
1150
+ if (plib . isLazyPythonClass ( type ) ) {
1150
1151
return type ;
1151
1152
} else {
1152
1153
CompilerDirectives .transferToInterpreter ();
@@ -1155,7 +1156,7 @@ private static Object readType(ReadAttributeFromObjectNode readTypeNode, Object
1155
1156
}
1156
1157
1157
1158
@ ExportMessage
1158
- public boolean isDate (@ CachedLibrary ("this " ) PythonObjectLibrary plib ,
1159
+ public boolean isDate (@ CachedLibrary (limit = "3 " ) PythonObjectLibrary plib ,
1159
1160
@ Shared ("readTypeNode" ) @ Cached ReadAttributeFromObjectNode readTypeNode ,
1160
1161
@ Shared ("isSubtypeNode" ) @ Cached IsSubtypeNode isSubtypeNode ,
1161
1162
@ Shared ("dateTimeModuleProfile" ) @ Cached ("createBinaryProfile()" ) ConditionProfile dateTimeModuleLoaded ,
@@ -1164,13 +1165,13 @@ public boolean isDate(@CachedLibrary("this") PythonObjectLibrary plib,
1164
1165
PDict importedModules = PythonLanguage .getContext ().getImportedModules ();
1165
1166
Object module = importedModules .getItem (DATETIME_MODULE_NAME );
1166
1167
if (dateTimeModuleLoaded .profile (module != null )) {
1167
- if (isSubtypeNode .execute (objType , readType (readTypeNode , module , DATETIME_TYPE )) || isSubtypeNode .execute (objType , readType (readTypeNode , module , DATE_TYPE ))) {
1168
+ if (isSubtypeNode .execute (objType , readType (readTypeNode , module , DATETIME_TYPE , plib )) || isSubtypeNode .execute (objType , readType (readTypeNode , module , DATE_TYPE , plib ))) {
1168
1169
return true ;
1169
1170
}
1170
1171
}
1171
1172
module = importedModules .getItem (TIME_MODULE_NAME );
1172
1173
if (timeModuleLoaded .profile (module != null )) {
1173
- if (isSubtypeNode .execute (objType , readType (readTypeNode , module , STRUCT_TIME_TYPE ))) {
1174
+ if (isSubtypeNode .execute (objType , readType (readTypeNode , module , STRUCT_TIME_TYPE , plib ))) {
1174
1175
return true ;
1175
1176
}
1176
1177
}
@@ -1179,7 +1180,7 @@ public boolean isDate(@CachedLibrary("this") PythonObjectLibrary plib,
1179
1180
1180
1181
@ ExportMessage
1181
1182
public LocalDate asDate (
1182
- @ CachedLibrary ("this " ) PythonObjectLibrary plib ,
1183
+ @ CachedLibrary (limit = "3 " ) PythonObjectLibrary plib ,
1183
1184
@ Shared ("readTypeNode" ) @ Cached ReadAttributeFromObjectNode readTypeNode ,
1184
1185
@ Shared ("isSubtypeNode" ) @ Cached IsSubtypeNode isSubtypeNode ,
1185
1186
@ Shared ("castToIntNode" ) @ Cached CastToJavaIntExactNode castToIntNode ,
@@ -1190,7 +1191,7 @@ public LocalDate asDate(
1190
1191
PDict importedModules = PythonLanguage .getContext ().getImportedModules ();
1191
1192
Object module = importedModules .getItem (DATETIME_MODULE_NAME );
1192
1193
if (dateTimeModuleLoaded .profile (module != null )) {
1193
- if (isSubtypeNode .execute (objType , readType (readTypeNode , module , DATETIME_TYPE )) || isSubtypeNode .execute (objType , readType (readTypeNode , module , DATE_TYPE ))) {
1194
+ if (isSubtypeNode .execute (objType , readType (readTypeNode , module , DATETIME_TYPE , plib )) || isSubtypeNode .execute (objType , readType (readTypeNode , module , DATE_TYPE , plib ))) {
1194
1195
try {
1195
1196
int year = castToIntNode .execute (lib .readMember (this , "year" ));
1196
1197
int month = castToIntNode .execute (lib .readMember (this , "month" ));
@@ -1203,7 +1204,7 @@ public LocalDate asDate(
1203
1204
}
1204
1205
module = importedModules .getItem (TIME_MODULE_NAME );
1205
1206
if (timeModuleLoaded .profile (module != null )) {
1206
- if (isSubtypeNode .execute (objType , readType (readTypeNode , module , STRUCT_TIME_TYPE ))) {
1207
+ if (isSubtypeNode .execute (objType , readType (readTypeNode , module , STRUCT_TIME_TYPE , plib ))) {
1207
1208
try {
1208
1209
int year = castToIntNode .execute (lib .readMember (this , "tm_year" ));
1209
1210
int month = castToIntNode .execute (lib .readMember (this , "tm_mon" ));
@@ -1218,7 +1219,7 @@ public LocalDate asDate(
1218
1219
}
1219
1220
1220
1221
@ ExportMessage
1221
- public boolean isTime (@ CachedLibrary ("this " ) PythonObjectLibrary plib ,
1222
+ public boolean isTime (@ CachedLibrary (limit = "3 " ) PythonObjectLibrary plib ,
1222
1223
@ Shared ("readTypeNode" ) @ Cached ReadAttributeFromObjectNode readTypeNode ,
1223
1224
@ Shared ("isSubtypeNode" ) @ Cached IsSubtypeNode isSubtype ,
1224
1225
@ Shared ("dateTimeModuleProfile" ) @ Cached ("createBinaryProfile()" ) ConditionProfile dateTimeModuleLoaded ,
@@ -1227,21 +1228,21 @@ public boolean isTime(@CachedLibrary("this") PythonObjectLibrary plib,
1227
1228
PDict importedModules = PythonLanguage .getContext ().getImportedModules ();
1228
1229
Object module = importedModules .getItem (DATETIME_MODULE_NAME );
1229
1230
if (dateTimeModuleLoaded .profile (module != null )) {
1230
- if (isSubtype .execute (objType , readType (readTypeNode , module , DATETIME_TYPE )) || isSubtype .execute (objType , readType (readTypeNode , module , TIME_TYPE ))) {
1231
+ if (isSubtype .execute (objType , readType (readTypeNode , module , DATETIME_TYPE , plib )) || isSubtype .execute (objType , readType (readTypeNode , module , TIME_TYPE , plib ))) {
1231
1232
return true ;
1232
1233
}
1233
1234
}
1234
1235
module = importedModules .getItem (TIME_MODULE_NAME );
1235
1236
if (timeModuleLoaded .profile (module != null )) {
1236
- if (isSubtype .execute (objType , readType (readTypeNode , module , STRUCT_TIME_TYPE ))) {
1237
+ if (isSubtype .execute (objType , readType (readTypeNode , module , STRUCT_TIME_TYPE , plib ))) {
1237
1238
return true ;
1238
1239
}
1239
1240
}
1240
1241
return false ;
1241
1242
}
1242
1243
1243
1244
@ ExportMessage
1244
- public LocalTime asTime (@ CachedLibrary ("this " ) PythonObjectLibrary plib ,
1245
+ public LocalTime asTime (@ CachedLibrary (limit = "3 " ) PythonObjectLibrary plib ,
1245
1246
@ Shared ("readTypeNode" ) @ Cached ReadAttributeFromObjectNode readTypeNode ,
1246
1247
@ Shared ("isSubtypeNode" ) @ Cached IsSubtypeNode isSubtypeNode ,
1247
1248
@ Shared ("castToIntNode" ) @ Cached CastToJavaIntExactNode castToIntNode ,
@@ -1252,7 +1253,7 @@ public LocalTime asTime(@CachedLibrary("this") PythonObjectLibrary plib,
1252
1253
PDict importedModules = PythonLanguage .getContext ().getImportedModules ();
1253
1254
Object module = importedModules .getItem (DATETIME_MODULE_NAME );
1254
1255
if (dateTimeModuleLoaded .profile (module != null )) {
1255
- if (isSubtypeNode .execute (objType , readType (readTypeNode , module , DATETIME_TYPE )) || isSubtypeNode .execute (objType , readType (readTypeNode , module , TIME_TYPE ))) {
1256
+ if (isSubtypeNode .execute (objType , readType (readTypeNode , module , DATETIME_TYPE , plib )) || isSubtypeNode .execute (objType , readType (readTypeNode , module , TIME_TYPE , plib ))) {
1256
1257
try {
1257
1258
int hour = castToIntNode .execute (lib .readMember (this , "hour" ));
1258
1259
int min = castToIntNode .execute (lib .readMember (this , "minute" ));
@@ -1266,7 +1267,7 @@ public LocalTime asTime(@CachedLibrary("this") PythonObjectLibrary plib,
1266
1267
}
1267
1268
module = importedModules .getItem (TIME_MODULE_NAME );
1268
1269
if (timeModuleLoaded .profile (module != null )) {
1269
- if (isSubtypeNode .execute (objType , readType (readTypeNode , module , STRUCT_TIME_TYPE ))) {
1270
+ if (isSubtypeNode .execute (objType , readType (readTypeNode , module , STRUCT_TIME_TYPE , plib ))) {
1270
1271
try {
1271
1272
int hour = castToIntNode .execute (lib .readMember (this , "tm_hour" ));
1272
1273
int min = castToIntNode .execute (lib .readMember (this , "tm_min" ));
@@ -1281,7 +1282,7 @@ public LocalTime asTime(@CachedLibrary("this") PythonObjectLibrary plib,
1281
1282
}
1282
1283
1283
1284
@ ExportMessage
1284
- public boolean isTimeZone (@ CachedLibrary ("this " ) PythonObjectLibrary plib ,
1285
+ public boolean isTimeZone (@ CachedLibrary (limit = "3 " ) PythonObjectLibrary plib ,
1285
1286
@ Shared ("readTypeNode" ) @ Cached ReadAttributeFromObjectNode readTypeNode ,
1286
1287
@ Shared ("isSubtypeNode" ) @ Cached IsSubtypeNode isSubtype ,
1287
1288
@ CachedLibrary (limit = "2" ) InteropLibrary lib ,
@@ -1291,7 +1292,7 @@ public boolean isTimeZone(@CachedLibrary("this") PythonObjectLibrary plib,
1291
1292
PDict importedModules = PythonLanguage .getContext ().getImportedModules ();
1292
1293
Object module = importedModules .getItem (DATETIME_MODULE_NAME );
1293
1294
if (dateTimeModuleLoaded .profile (module != null )) {
1294
- if (isSubtype .execute (objType , readType (readTypeNode , module , DATETIME_TYPE ))) {
1295
+ if (isSubtype .execute (objType , readType (readTypeNode , module , DATETIME_TYPE , plib ))) {
1295
1296
try {
1296
1297
Object tzinfo = lib .readMember (this , "tzinfo" );
1297
1298
if (tzinfo != PNone .NONE ) {
@@ -1303,7 +1304,7 @@ public boolean isTimeZone(@CachedLibrary("this") PythonObjectLibrary plib,
1303
1304
} catch (UnsupportedMessageException | UnknownIdentifierException | ArityException | UnsupportedTypeException ex ) {
1304
1305
return false ;
1305
1306
}
1306
- } else if (isSubtype .execute (objType , readType (readTypeNode , module , TIME_TYPE ))) {
1307
+ } else if (isSubtype .execute (objType , readType (readTypeNode , module , TIME_TYPE , plib ))) {
1307
1308
try {
1308
1309
Object tzinfo = lib .readMember (this , "tzinfo" );
1309
1310
if (tzinfo != PNone .NONE ) {
@@ -1319,7 +1320,7 @@ public boolean isTimeZone(@CachedLibrary("this") PythonObjectLibrary plib,
1319
1320
}
1320
1321
module = importedModules .getItem (TIME_MODULE_NAME );
1321
1322
if (timeModuleLoaded .profile (module != null )) {
1322
- if (isSubtype .execute (objType , readType (readTypeNode , module , STRUCT_TIME_TYPE ))) {
1323
+ if (isSubtype .execute (objType , readType (readTypeNode , module , STRUCT_TIME_TYPE , plib ))) {
1323
1324
try {
1324
1325
Object tm_zone = lib .readMember (this , "tm_zone" );
1325
1326
if (tm_zone != PNone .NONE ) {
@@ -1334,7 +1335,7 @@ public boolean isTimeZone(@CachedLibrary("this") PythonObjectLibrary plib,
1334
1335
}
1335
1336
1336
1337
@ ExportMessage
1337
- public ZoneId asTimeZone (@ CachedLibrary ("this " ) PythonObjectLibrary plib ,
1338
+ public ZoneId asTimeZone (@ CachedLibrary (limit = "3 " ) PythonObjectLibrary plib ,
1338
1339
@ Shared ("readTypeNode" ) @ Cached ReadAttributeFromObjectNode readTypeNode ,
1339
1340
@ Shared ("isSubtypeNode" ) @ Cached IsSubtypeNode isSubtypeNode ,
1340
1341
@ Shared ("castToIntNode" ) @ Cached CastToJavaIntExactNode castToIntNode ,
@@ -1348,7 +1349,7 @@ public ZoneId asTimeZone(@CachedLibrary("this") PythonObjectLibrary plib,
1348
1349
PDict importedModules = PythonLanguage .getContext ().getImportedModules ();
1349
1350
Object module = importedModules .getItem (DATETIME_MODULE_NAME );
1350
1351
if (dateTimeModuleLoaded .profile (module != null )) {
1351
- if (isSubtypeNode .execute (objType , readType (readTypeNode , module , "datetime" ))) {
1352
+ if (isSubtypeNode .execute (objType , readType (readTypeNode , module , DATETIME_TYPE , plib ))) {
1352
1353
try {
1353
1354
Object tzinfo = lib .readMember (this , "tzinfo" );
1354
1355
if (tzinfo != PNone .NONE ) {
@@ -1361,7 +1362,7 @@ public ZoneId asTimeZone(@CachedLibrary("this") PythonObjectLibrary plib,
1361
1362
} catch (UnsupportedMessageException | UnknownIdentifierException | ArityException | UnsupportedTypeException ex ) {
1362
1363
throw UnsupportedMessageException .create ();
1363
1364
}
1364
- } else if (isSubtypeNode .execute (objType , readType (readTypeNode , module , "time" ))) {
1365
+ } else if (isSubtypeNode .execute (objType , readType (readTypeNode , module , TIME_TYPE , plib ))) {
1365
1366
try {
1366
1367
Object tzinfo = lib .readMember (this , "tzinfo" );
1367
1368
if (tzinfo != PNone .NONE ) {
@@ -1378,7 +1379,7 @@ public ZoneId asTimeZone(@CachedLibrary("this") PythonObjectLibrary plib,
1378
1379
}
1379
1380
module = importedModules .getItem (TIME_MODULE_NAME );
1380
1381
if (timeModuleLoaded .profile (module != null )) {
1381
- if (isSubtypeNode .execute (objType , readType (readTypeNode , module , "struct_time" ))) {
1382
+ if (isSubtypeNode .execute (objType , readType (readTypeNode , module , STRUCT_TIME_TYPE , plib ))) {
1382
1383
try {
1383
1384
Object tm_zone = lib .readMember (this , "tm_zone" );
1384
1385
if (tm_zone != PNone .NONE ) {
0 commit comments