@@ -449,17 +449,36 @@ void handlePCode(VirtualFrame frame, PCode c, int version, DataOutputStream buff
449
449
writeInt (c .getStacksize (), version , buffer );
450
450
writeInt (c .getFlags (), version , buffer );
451
451
writeBytes (c .getCodestring () == null ? new byte [0 ] : c .getCodestring (), version , buffer );
452
- getRecursiveNode ().execute (frame , factory (). createTuple ( c . getConstants () == null ? new Object [ 0 ] : c .getConstants ()), version , buffer );
453
- getRecursiveNode ().execute (frame , factory (). createTuple ( c . getNames () == null ? new Object [ 0 ] : c .getNames ()), version , buffer );
454
- getRecursiveNode ().execute (frame , factory (). createTuple ( c . getVarnames () == null ? new Object [ 0 ] : c .getVarnames ()), version , buffer );
455
- getRecursiveNode ().execute (frame , factory (). createTuple ( c . getFreeVars () == null ? new Object [ 0 ] : c .getFreeVars ()), version , buffer );
456
- getRecursiveNode ().execute (frame , factory (). createTuple ( c . getCellVars () == null ? new Object [ 0 ] : c .getCellVars ()), version , buffer );
452
+ getRecursiveNode ().execute (frame , internStrings ( c .getConstants ()), version , buffer );
453
+ getRecursiveNode ().execute (frame , internStrings ( c .getNames ()), version , buffer );
454
+ getRecursiveNode ().execute (frame , internStrings ( c .getVarnames ()), version , buffer );
455
+ getRecursiveNode ().execute (frame , internStrings ( c .getFreeVars ()), version , buffer );
456
+ getRecursiveNode ().execute (frame , internStrings ( c .getCellVars ()), version , buffer );
457
457
getRecursiveNode ().execute (frame , new InternedString (c .getFilename ()), version , buffer );
458
- getRecursiveNode ().execute (frame , c .getName (), version , buffer );
458
+ getRecursiveNode ().execute (frame , new InternedString ( c .getName () ), version , buffer );
459
459
writeInt (c .getFirstLineNo (), version , buffer );
460
460
writeBytes (c .getLnotab () == null ? new byte [0 ] : c .getLnotab (), version , buffer );
461
461
}
462
462
463
+ private PTuple internStrings (Object [] values ) {
464
+ Object [] interned ;
465
+ if (values == null ) {
466
+ interned = new Object [0 ];
467
+ } else {
468
+ interned = new Object [values .length ];
469
+ for (int i = 0 ; i < interned .length ; i ++) {
470
+ if (values [i ] instanceof String ) {
471
+ interned [i ] = new InternedString ((String ) values [i ]);
472
+ } else if (values [i ] instanceof PString ) {
473
+ interned [i ] = new InternedString (((PString ) values [i ]).getValue ());
474
+ } else {
475
+ interned [i ] = values [i ];
476
+ }
477
+ }
478
+ }
479
+ return factory ().createTuple (interned );
480
+ }
481
+
463
482
@ Specialization
464
483
void handlePSet (VirtualFrame frame , PSet s , int version , DataOutputStream buffer ,
465
484
@ Cached HashingStorageNodes .LenNode lenNode ) {
0 commit comments