@@ -1575,26 +1575,6 @@ private Object bytecodeLoop(VirtualFrame virtualFrame, Frame localFrame, Bytecod
1575
1575
stackTop = bytecodeClosureFromStack (virtualFrame , stackTop , oparg );
1576
1576
break ;
1577
1577
}
1578
- case OpCodesConstants .LOAD_LOCALS : {
1579
- if (locals == null ) {
1580
- CompilerDirectives .transferToInterpreterAndInvalidate ();
1581
- throw PRaiseNode .raiseStatic (this , SystemError , ErrorMessages .NO_LOCALS_FOUND );
1582
- }
1583
- virtualFrame .setObject (++stackTop , locals );
1584
- break ;
1585
- }
1586
- case OpCodesConstants .LOAD_FROM_DICT_OR_DEREF : {
1587
- setCurrentBci (virtualFrame , bciSlot , bci );
1588
- oparg |= Byte .toUnsignedInt (localBC [++bci ]);
1589
- stackTop = bytecodeLoadFromDictOrDeref (virtualFrame , localFrame , stackTop , beginBci , localNodes , oparg , localCelloffset , useCachedNodes );
1590
- break ;
1591
- }
1592
- case OpCodesConstants .LOAD_FROM_DICT_OR_GLOBALS : {
1593
- setCurrentBci (virtualFrame , bciSlot , bci );
1594
- oparg |= Byte .toUnsignedInt (localBC [++bci ]);
1595
- stackTop = bytecodeLoadFromDictOrGlobals (virtualFrame , globals , stackTop , beginBci , localNames [oparg ], localNodes , useCachedNodes );
1596
- break ;
1597
- }
1598
1578
case OpCodesConstants .LOAD_DEREF : {
1599
1579
oparg |= Byte .toUnsignedInt (localBC [++bci ]);
1600
1580
stackTop = bytecodeLoadDeref (virtualFrame , localFrame , stackTop , beginBci , localNodes , oparg , localCelloffset , useCachedNodes );
@@ -2325,21 +2305,12 @@ private Object bytecodeLoop(VirtualFrame virtualFrame, Frame localFrame, Bytecod
2325
2305
bci ++;
2326
2306
continue ;
2327
2307
}
2328
- case OpCodesConstants .MAKE_TYPE_PARAM : {
2329
- oparg |= Byte .toUnsignedInt (localBC [++bci ]);
2330
- stackTop = bytecodeMakeTypeParam (virtualFrame , useCachedNodes , stackTop , localNodes , beginBci , oparg );
2331
- break ;
2308
+ default : {
2309
+ long r = infrequentBytecodes (virtualFrame , localFrame , bc , bci , stackTop , beginBci , oparg , localBC , globals , locals , localNames , localNodes , bciSlot , localCelloffset ,
2310
+ useCachedNodes );
2311
+ stackTop = (int ) (r >> 32 );
2312
+ bci = (int ) r ;
2332
2313
}
2333
- case OpCodesConstants .MAKE_TYPE_ALIAS : {
2334
- stackTop = bytecodeMakeTypeAlias (virtualFrame , useCachedNodes , stackTop , localNodes , beginBci );
2335
- break ;
2336
- }
2337
- case OpCodesConstants .MAKE_GENERIC : {
2338
- stackTop = bytecodeMakeGeneric (virtualFrame , useCachedNodes , stackTop , localNodes , beginBci );
2339
- break ;
2340
- }
2341
- default :
2342
- throw raiseUnknownBytecodeError (bc );
2343
2314
}
2344
2315
// prepare next loop
2345
2316
oparg = 0 ;
@@ -2429,6 +2400,52 @@ private Object bytecodeLoop(VirtualFrame virtualFrame, Frame localFrame, Bytecod
2429
2400
}
2430
2401
}
2431
2402
2403
+ private long infrequentBytecodes (VirtualFrame virtualFrame , Frame localFrame , byte bc , int bci , int stackTop , int beginBci , int oparg , byte [] localBC , Object globals , Object locals ,
2404
+ TruffleString [] localNames , Node [] localNodes , int bciSlot , int localCelloffset , boolean useCachedNodes ) {
2405
+ switch (bc ) {
2406
+ case OpCodesConstants .LOAD_LOCALS : {
2407
+ if (locals == null ) {
2408
+ CompilerDirectives .transferToInterpreterAndInvalidate ();
2409
+ throw PRaiseNode .raiseStatic (this , SystemError , ErrorMessages .NO_LOCALS_FOUND );
2410
+ }
2411
+ virtualFrame .setObject (++stackTop , locals );
2412
+ break ;
2413
+ }
2414
+ case OpCodesConstants .LOAD_FROM_DICT_OR_DEREF : {
2415
+ setCurrentBci (virtualFrame , bciSlot , bci );
2416
+ oparg |= Byte .toUnsignedInt (localBC [++bci ]);
2417
+ stackTop = bytecodeLoadFromDictOrDeref (virtualFrame , localFrame , stackTop , beginBci , localNodes ,
2418
+ oparg , localCelloffset , useCachedNodes );
2419
+ break ;
2420
+ }
2421
+ case OpCodesConstants .LOAD_FROM_DICT_OR_GLOBALS : {
2422
+ setCurrentBci (virtualFrame , bciSlot , bci );
2423
+ oparg |= Byte .toUnsignedInt (localBC [++bci ]);
2424
+ stackTop = bytecodeLoadFromDictOrGlobals (virtualFrame , globals , stackTop , beginBci ,
2425
+ localNames [oparg ], localNodes , useCachedNodes );
2426
+ break ;
2427
+ }
2428
+ case OpCodesConstants .MAKE_TYPE_PARAM : {
2429
+ oparg |= Byte .toUnsignedInt (localBC [++bci ]);
2430
+ stackTop = bytecodeMakeTypeParam (virtualFrame , useCachedNodes , stackTop , localNodes , beginBci ,
2431
+ oparg );
2432
+ break ;
2433
+ }
2434
+ case OpCodesConstants .MAKE_TYPE_ALIAS : {
2435
+ stackTop = bytecodeMakeTypeAlias (virtualFrame , useCachedNodes , stackTop , localNodes , beginBci );
2436
+ break ;
2437
+ }
2438
+ case OpCodesConstants .MAKE_GENERIC : {
2439
+ stackTop = bytecodeMakeGeneric (virtualFrame , useCachedNodes , stackTop , localNodes , beginBci );
2440
+ break ;
2441
+ }
2442
+ default :
2443
+ throw raiseUnknownBytecodeError (bc );
2444
+
2445
+ }
2446
+ return (long ) stackTop << 32 | bci ;
2447
+ }
2448
+
2432
2449
@ BytecodeInterpreterSwitch
2433
2450
private int bytecodeGetAIter (VirtualFrame virtualFrame , boolean useCachedNodes , int stackTop , Node [] localNodes , int bci ) {
2434
2451
GetAIterNode node = insertChildNode (localNodes , bci , UNCACHED_GET_AITER , GetAIterNodeGen .class , NODE_GET_AITER , useCachedNodes );
0 commit comments