@@ -1459,7 +1459,7 @@ class IRGenerator {
14591459 /** @type {Object.<string, IntermediateScript> } */
14601460 this . procedures = { } ;
14611461
1462- this . analyzedProcedures = [ ] ;
1462+ this . analyzedProcedures = new Set ( ) ;
14631463 }
14641464
14651465 addProcedureDependencies ( dependencies ) {
@@ -1500,12 +1500,11 @@ class IRGenerator {
15001500 const procedureData = this . procedures [ procedureCode ] ;
15011501
15021502 // Analyze newly found procedures.
1503- if ( ! this . analyzedProcedures . includes ( procedureCode ) ) {
1504- this . analyzedProcedures . push ( procedureCode ) ;
1503+ if ( ! this . analyzedProcedures . has ( procedureCode ) ) {
1504+ this . analyzedProcedures . add ( procedureCode ) ;
15051505 if ( this . analyzeScript ( procedureData ) ) {
15061506 madeChanges = true ;
15071507 }
1508- this . analyzedProcedures . pop ( ) ;
15091508 }
15101509
15111510 // If a procedure used by a script may yield, the script itself may yield.
@@ -1548,7 +1547,10 @@ class IRGenerator {
15481547 }
15491548
15501549 // Analyze scripts until no changes are made.
1551- while ( this . analyzeScript ( entry ) ) ;
1550+ while ( this . analyzeScript ( entry ) ) {
1551+ // Reset so all procedures get re-examined each pass.
1552+ this . analyzedProcedures = new Set ( ) ;
1553+ }
15521554
15531555 return new IntermediateRepresentation ( entry , this . procedures ) ;
15541556 }
0 commit comments