@@ -1351,11 +1351,25 @@ dummy_func(
1351
1351
null = NULL ;
1352
1352
}
1353
1353
1354
- inst (LOAD_GLOBAL_MODULE , (unused /1 , index /1 , version /1 , unused /1 -- null if (oparg & 1 ), res )) {
1355
- DEOPT_IF (!PyDict_CheckExact (GLOBALS ()), LOAD_GLOBAL );
1354
+ op (_SKIP_CACHE , (unused /1 -- )) {
1355
+ }
1356
+
1357
+ op (_GUARD_GLOBALS_VERSION , (version /1 -- )) {
1356
1358
PyDictObject * dict = (PyDictObject * )GLOBALS ();
1359
+ DEOPT_IF (!PyDict_CheckExact (dict ), LOAD_GLOBAL );
1360
+ DEOPT_IF (dict -> ma_keys -> dk_version != version , LOAD_GLOBAL );
1361
+ assert (DK_IS_UNICODE (dict -> ma_keys ));
1362
+ }
1363
+
1364
+ op (_GUARD_BUILTINS_VERSION , (version /1 -- )) {
1365
+ PyDictObject * dict = (PyDictObject * )BUILTINS ();
1366
+ DEOPT_IF (!PyDict_CheckExact (dict ), LOAD_GLOBAL );
1357
1367
DEOPT_IF (dict -> ma_keys -> dk_version != version , LOAD_GLOBAL );
1358
1368
assert (DK_IS_UNICODE (dict -> ma_keys ));
1369
+ }
1370
+
1371
+ op (_LOAD_GLOBAL_MODULE , (index /1 -- null if (oparg & 1 ), res )) {
1372
+ PyDictObject * dict = (PyDictObject * )GLOBALS ();
1359
1373
PyDictUnicodeEntry * entries = DK_UNICODE_ENTRIES (dict -> ma_keys );
1360
1374
res = entries [index ].me_value ;
1361
1375
DEOPT_IF (res == NULL , LOAD_GLOBAL );
@@ -1364,15 +1378,8 @@ dummy_func(
1364
1378
null = NULL ;
1365
1379
}
1366
1380
1367
- inst (LOAD_GLOBAL_BUILTIN , (unused /1 , index /1 , mod_version /1 , bltn_version /1 -- null if (oparg & 1 ), res )) {
1368
- DEOPT_IF (!PyDict_CheckExact (GLOBALS ()), LOAD_GLOBAL );
1369
- DEOPT_IF (!PyDict_CheckExact (BUILTINS ()), LOAD_GLOBAL );
1370
- PyDictObject * mdict = (PyDictObject * )GLOBALS ();
1381
+ op (_LOAD_GLOBAL_BUILTINS , (index /1 -- null if (oparg & 1 ), res )) {
1371
1382
PyDictObject * bdict = (PyDictObject * )BUILTINS ();
1372
- assert (opcode == LOAD_GLOBAL_BUILTIN );
1373
- DEOPT_IF (mdict -> ma_keys -> dk_version != mod_version , LOAD_GLOBAL );
1374
- DEOPT_IF (bdict -> ma_keys -> dk_version != bltn_version , LOAD_GLOBAL );
1375
- assert (DK_IS_UNICODE (bdict -> ma_keys ));
1376
1383
PyDictUnicodeEntry * entries = DK_UNICODE_ENTRIES (bdict -> ma_keys );
1377
1384
res = entries [index ].me_value ;
1378
1385
DEOPT_IF (res == NULL , LOAD_GLOBAL );
@@ -1381,6 +1388,18 @@ dummy_func(
1381
1388
null = NULL ;
1382
1389
}
1383
1390
1391
+ macro (LOAD_GLOBAL_MODULE ) =
1392
+ _SKIP_CACHE + // Skip over the counter
1393
+ _GUARD_GLOBALS_VERSION +
1394
+ _SKIP_CACHE + // Skip over the builtins version
1395
+ _LOAD_GLOBAL_MODULE ;
1396
+
1397
+ macro (LOAD_GLOBAL_BUILTIN ) =
1398
+ _SKIP_CACHE + // Skip over the counter
1399
+ _GUARD_GLOBALS_VERSION +
1400
+ _GUARD_BUILTINS_VERSION +
1401
+ _LOAD_GLOBAL_BUILTINS ;
1402
+
1384
1403
inst (DELETE_FAST , (-- )) {
1385
1404
PyObject * v = GETLOCAL (oparg );
1386
1405
ERROR_IF (v == NULL , unbound_local_error );
0 commit comments