@@ -332,12 +332,19 @@ private Node createSourceInfoTemplate(SourceFile file) {
332
332
333
333
private void setOriginalNameIfPresent (AstNode astNode , Node n ) {
334
334
if (astNode .getOriginalNamePointer () != 0 ) {
335
- n .setOriginalName (this .stringPool .get (astNode .getOriginalNamePointer ()));
335
+ n .setOriginalNameFromStringPool (
336
+ this .stringPool .getInternedStrings (), astNode .getOriginalNamePointer ());
336
337
}
337
338
}
338
339
339
- private String getString (AstNode n ) {
340
- return this .stringPool .get (n .getStringValuePointer ());
340
+ /**
341
+ * Creates a new string node with the given token & string value of the AstNode
342
+ *
343
+ * <p>Prefer calling this method over calling a regular Node.* or IR.* method when possible. This
344
+ * method integrates with {@link RhinoStringPool} to cache String interning results.
345
+ */
346
+ private Node stringNode (Token token , AstNode n ) {
347
+ return Node .newString (token , this .stringPool .getInternedStrings (), n .getStringValuePointer ());
341
348
}
342
349
343
350
private Node deserializeSingleNode (AstNode n ) {
@@ -348,9 +355,9 @@ private Node deserializeSingleNode(AstNode n) {
348
355
case NUMBER_LITERAL :
349
356
return IR .number (n .getDoubleValue ());
350
357
case STRING_LITERAL :
351
- return IR . string ( getString ( n ) );
358
+ return stringNode ( Token . STRINGLIT , n );
352
359
case IDENTIFIER :
353
- return IR . name ( getString ( n ) );
360
+ return stringNode ( Token . NAME , n );
354
361
case FALSE :
355
362
return new Node (Token .FALSE );
356
363
case TRUE :
@@ -362,7 +369,8 @@ private Node deserializeSingleNode(AstNode n) {
362
369
case VOID :
363
370
return new Node (Token .VOID );
364
371
case BIGINT_LITERAL :
365
- return IR .bigint (new BigInteger (getString (n )));
372
+ String bigintString = this .stringPool .get (n .getStringValuePointer ());
373
+ return IR .bigint (new BigInteger (bigintString ));
366
374
case REGEX_LITERAL :
367
375
return new Node (Token .REGEXP );
368
376
case ARRAY_LITERAL :
@@ -377,7 +385,7 @@ private Node deserializeSingleNode(AstNode n) {
377
385
case NEW :
378
386
return new Node (Token .NEW );
379
387
case PROPERTY_ACCESS :
380
- return Node . newString (Token .GETPROP , getString ( n ) );
388
+ return stringNode (Token .GETPROP , n );
381
389
case ELEMENT_ACCESS :
382
390
return new Node (Token .GETELEM );
383
391
@@ -497,10 +505,10 @@ private Node deserializeSingleNode(AstNode n) {
497
505
case TEMPLATELIT_STRING :
498
506
{
499
507
TemplateStringValue templateStringValue = n .getTemplateStringValue ();
500
- int cookedPointer = templateStringValue . getCookedStringPointer ();
501
- String cookedString = cookedPointer == - 1 ? null : this .stringPool .get ( cookedPointer );
502
- String rawString = this . stringPool . get ( templateStringValue .getRawStringPointer ());
503
- return Node . newTemplateLitString ( cookedString , rawString );
508
+ return Node . newTemplateLitString (
509
+ this .stringPool .getInternedStrings (),
510
+ templateStringValue .getCookedStringPointer (),
511
+ templateStringValue . getRawStringPointer () );
504
512
}
505
513
case NEW_TARGET :
506
514
return new Node (Token .NEW_TARGET );
@@ -509,7 +517,7 @@ private Node deserializeSingleNode(AstNode n) {
509
517
case IMPORT_META :
510
518
return new Node (Token .IMPORT_META );
511
519
case OPTCHAIN_PROPERTY_ACCESS :
512
- return Node . newString (Token .OPTCHAIN_GETPROP , getString ( n ) );
520
+ return stringNode (Token .OPTCHAIN_GETPROP , n );
513
521
case OPTCHAIN_CALL :
514
522
return new Node (Token .OPTCHAIN_CALL );
515
523
case OPTCHAIN_ELEMENT_ACCESS :
@@ -581,21 +589,21 @@ private Node deserializeSingleNode(AstNode n) {
581
589
case LABELED_STATEMENT :
582
590
return new Node (Token .LABEL );
583
591
case LABELED_NAME :
584
- return IR . labelName ( getString ( n ) );
592
+ return stringNode ( Token . LABEL_NAME , n );
585
593
case CLASS_MEMBERS :
586
594
return new Node (Token .CLASS_MEMBERS );
587
595
case METHOD_DECLARATION :
588
- return Node . newString (Token .MEMBER_FUNCTION_DEF , getString ( n ) );
596
+ return stringNode (Token .MEMBER_FUNCTION_DEF , n );
589
597
case FIELD_DECLARATION :
590
- return Node . newString (Token .MEMBER_FIELD_DEF , getString ( n ) );
598
+ return stringNode (Token .MEMBER_FIELD_DEF , n );
591
599
case COMPUTED_PROP_FIELD :
592
600
return new Node (Token .COMPUTED_FIELD_DEF );
593
601
case PARAMETER_LIST :
594
602
return new Node (Token .PARAM_LIST );
595
603
case RENAMABLE_STRING_KEY :
596
- return IR . stringKey ( getString ( n ) );
604
+ return stringNode ( Token . STRING_KEY , n );
597
605
case QUOTED_STRING_KEY :
598
- Node quotedStringKey = IR . stringKey ( getString ( n ) );
606
+ Node quotedStringKey = stringNode ( Token . STRING_KEY , n );
599
607
quotedStringKey .setQuotedStringKey ();
600
608
return quotedStringKey ;
601
609
case CASE :
@@ -617,14 +625,14 @@ private Node deserializeSingleNode(AstNode n) {
617
625
618
626
case RENAMABLE_GETTER_DEF :
619
627
case QUOTED_GETTER_DEF :
620
- Node getterDef = Node . newString (Token .GETTER_DEF , getString ( n ) );
628
+ Node getterDef = stringNode (Token .GETTER_DEF , n );
621
629
if (n .getKind ().equals (NodeKind .QUOTED_GETTER_DEF )) {
622
630
getterDef .setQuotedStringKey ();
623
631
}
624
632
return getterDef ;
625
633
case RENAMABLE_SETTER_DEF :
626
634
case QUOTED_SETTER_DEF :
627
- Node setterDef = Node . newString (Token .SETTER_DEF , getString ( n ) );
635
+ Node setterDef = stringNode (Token .SETTER_DEF , n );
628
636
if (n .getKind ().equals (NodeKind .QUOTED_SETTER_DEF )) {
629
637
setterDef .setQuotedStringKey ();
630
638
}
@@ -635,7 +643,7 @@ private Node deserializeSingleNode(AstNode n) {
635
643
case IMPORT_SPEC :
636
644
return new Node (Token .IMPORT_SPEC );
637
645
case IMPORT_STAR :
638
- return Node . newString (Token .IMPORT_STAR , getString ( n ) );
646
+ return stringNode (Token .IMPORT_STAR , n );
639
647
case EXPORT_SPECS :
640
648
return new Node (Token .EXPORT_SPECS );
641
649
case EXPORT_SPEC :
0 commit comments