From 29879297eef602f4503bc2ccd9def16deca8fa75 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 3 Feb 2025 14:56:11 +0100 Subject: [PATCH 01/11] JS: Add test showing missed call to later-defined function in block --- .../CallGraphs/AnnotatedTest/Test.expected | 1 + .../CallGraphs/AnnotatedTest/hoisted.js | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/hoisted.js diff --git a/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/Test.expected b/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/Test.expected index 8182d0174140..0fa6454ca3eb 100644 --- a/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/Test.expected +++ b/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/Test.expected @@ -2,6 +2,7 @@ spuriousCallee missingCallee | constructor-field.ts:40:5:40:14 | f3.build() | constructor-field.ts:13:3:13:12 | build() {} | -1 | calls | | constructor-field.ts:71:1:71:11 | bf3.build() | constructor-field.ts:13:3:13:12 | build() {} | -1 | calls | +| hoisted.js:20:9:20:11 | f() | hoisted.js:23:9:23:23 | function f() {} | -1 | calls | badAnnotation accessorCall | accessors.js:12:1:12:5 | obj.f | accessors.js:5:8:5:12 | () {} | diff --git a/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/hoisted.js b/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/hoisted.js new file mode 100644 index 000000000000..2cffe6581f11 --- /dev/null +++ b/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/hoisted.js @@ -0,0 +1,25 @@ +function test1() { + /** name:hoist1 */ + function f() {} + + /** calls:hoist1 */ + f(); +} + +function test2() { + /** calls:hoist2 */ + f(); + + /** name:hoist2 */ + function f() {} +} + +function test3() { + { + /** calls:hoist3 */ + f(); + + /** name:hoist3 */ + function f() {} + } +} From be082578d4b086424d3ab7c4a00b0145c35d1b68 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 3 Feb 2025 15:01:13 +0100 Subject: [PATCH 02/11] JS: Hoist function decls in a block to the top of the block --- .../src/com/semmle/js/extractor/CFGExtractor.java | 9 ++++++--- .../library-tests/CallGraphs/AnnotatedTest/Test.expected | 1 - 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/javascript/extractor/src/com/semmle/js/extractor/CFGExtractor.java b/javascript/extractor/src/com/semmle/js/extractor/CFGExtractor.java index 5dee9b9f0996..61e44368789b 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/CFGExtractor.java +++ b/javascript/extractor/src/com/semmle/js/extractor/CFGExtractor.java @@ -1255,9 +1255,12 @@ public Void visit(Literal nd, SuccessorInfo i) { @Override public Void visit(BlockStatement nd, SuccessorInfo i) { - if (nd.getBody().isEmpty()) writeSuccessors(nd, i.getAllSuccessors()); - else writeSuccessor(nd, First.of(nd.getBody().get(0))); - visitSequence(nd.getBody(), i.getAllSuccessors()); + // Hoist function declarations in a block statement to the top of the block. + // This reflects non-standard behaviour implemented by most engines. + // See also: EcmaScript "B.3.2 Block-Level Function Declarations Web Legacy Compatibility Semantics". + List hoisted = HoistedFunDecls.of(nd.getBody()); + hoistedFns.addAll(hoisted); + writeSuccessors(nd, visitSequence(hoisted, nd.getBody(), i.getAllSuccessors())); return null; } diff --git a/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/Test.expected b/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/Test.expected index 0fa6454ca3eb..8182d0174140 100644 --- a/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/Test.expected +++ b/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/Test.expected @@ -2,7 +2,6 @@ spuriousCallee missingCallee | constructor-field.ts:40:5:40:14 | f3.build() | constructor-field.ts:13:3:13:12 | build() {} | -1 | calls | | constructor-field.ts:71:1:71:11 | bf3.build() | constructor-field.ts:13:3:13:12 | build() {} | -1 | calls | -| hoisted.js:20:9:20:11 | f() | hoisted.js:23:9:23:23 | function f() {} | -1 | calls | badAnnotation accessorCall | accessors.js:12:1:12:5 | obj.f | accessors.js:5:8:5:12 | () {} | From 7eebe468eecba8f7f6a1082aed4085733f890424 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 3 Feb 2025 15:19:42 +0100 Subject: [PATCH 03/11] JS: Update TRAP output This seems to have reordered the TRAP lines but without semantic change. --- .../tests/cfg/output/trap/classexpr3.js.trap | 2 +- .../tests/cfg/output/trap/classexpr4.js.trap | 2 +- .../extractor/tests/cfg/output/trap/fields.js.trap | 4 ++-- .../extractor/tests/cfg/output/trap/tst.js.trap | 10 +++++----- .../output/trap/array_pattern_with_rest.js.trap | 2 +- .../tests/es2015/output/trap/arrowfn.js.trap | 2 +- .../tests/es2015/output/trap/class_accessors.js.trap | 4 ++-- .../tests/es2015/output/trap/class_ctor.js.trap | 2 +- .../tests/es2015/output/trap/class_extends.js.trap | 2 +- .../tests/es2015/output/trap/class_extends2.js.trap | 2 +- .../tests/es2015/output/trap/class_method.js.trap | 2 +- .../tests/es2015/output/trap/class_static.js.trap | 2 +- .../es2015/output/trap/delegating_yield.js.trap | 2 +- .../tests/es2015/output/trap/destructuring.js.trap | 8 ++++---- .../extractor/tests/es2015/output/trap/forof.js.trap | 4 ++-- .../extractor/tests/es2015/output/trap/let.js.trap | 6 +++--- .../tests/es2015/output/trap/nested_import.js.trap | 2 +- .../tests/es2015/output/trap/new_target.js.trap | 2 +- .../tests/es2015/output/trap/odasa-2593.js.trap | 2 +- .../tests/es2015/output/trap/properties.js.trap | 2 +- .../tests/es2015/output/trap/super_call.js.trap | 4 ++-- .../tests/es2015/output/trap/super_ctor.js.trap | 2 +- .../tests/es2015/output/trap/templates.js.trap | 2 +- .../es2015/output/trap/unknown_meta_property.js.trap | 2 +- .../extractor/tests/es2015/output/trap/yield.js.trap | 2 +- .../tests/es2015/output/trap/yield2.js.trap | 2 +- .../tests/es2016/output/trap/usestrict.js.trap | 2 +- .../tests/es2017/output/trap/async-await.js.trap | 6 +++--- .../esnext/output/trap/async-generators.js.trap | 2 +- .../tests/esnext/output/trap/catchNoBinding.js.trap | 4 ++-- .../tests/esnext/output/trap/fields.js.trap | 2 +- .../tests/esnext/output/trap/for-await.js.trap | 6 +++--- .../trap/optional-chaining_short-circuiting.js.trap | 12 ++++++------ .../tests/esnext/output/trap/yield-import.js.trap | 2 +- .../flow/output/trap/explicitTypeParameters.js.trap | 2 +- .../tests/flow/output/trap/methodTypeParams.js.trap | 2 +- .../flow/output/trap/parmAnonFunctionType.js.trap | 2 +- .../trap/predicate-function-annotation.js.trap | 4 ++-- .../extractor/tests/flow/output/trap/tst.js.trap | 2 +- .../tests/generatedcode/output/trap/tst.js.trap | 12 ++++++------ .../tests/mozilla/output/trap/exprfns.js.trap | 8 ++++---- .../tests/mozilla/output/trap/foreach.js.trap | 2 +- .../tests/mozilla/output/trap/guardedCatch.js.trap | 8 ++++---- .../tests/mozilla/output/trap/letStmt.js.trap | 2 +- .../tests/mozilla/output/trap/odasa-2593.js.trap | 2 +- .../tests/stmts/output/trap/functions.js.trap | 4 ++-- .../extractor/tests/stmts/output/trap/loops.js.trap | 4 ++-- .../extractor/tests/stmts/output/trap/switch.js.trap | 2 +- .../tests/stmts/output/trap/switch2.js.trap | 2 +- .../extractor/tests/stmts/output/trap/try.js.trap | 6 +++--- .../tests/strictmode/output/trap/assignargs.js.trap | 2 +- .../extractor/tests/ts/output/trap/classes.ts.trap | 2 +- .../tests/ts/output/trap/conditionalTypes.ts.trap | 4 ++-- .../tests/ts/output/trap/decorators.ts.trap | 2 +- .../extractor/tests/ts/output/trap/enum.ts.trap | 2 +- .../extractor/tests/ts/output/trap/exprs.ts.trap | 2 +- .../extractor/tests/ts/output/trap/hello.ts.trap | 2 +- .../extractor/tests/ts/output/trap/logicalOr.ts.trap | 2 +- .../ts/output/trap/objectLiteralAccessor.ts.trap | 2 +- .../tests/ts/output/trap/privateField.ts.trap | 2 +- .../tests/ts/output/trap/tryfinally.ts.trap | 4 ++-- .../tests/ts/output/trap/typeannotations.ts.trap | 2 +- .../tests/variables/output/trap/finally.js.trap | 7 ++++--- .../tests/variables/output/trap/switch.js.trap | 2 +- .../tests/variables/output/trap/try.js.trap | 4 ++-- .../tests/variables/output/trap/variables.js.trap | 12 ++++++------ 66 files changed, 116 insertions(+), 115 deletions(-) diff --git a/javascript/extractor/tests/cfg/output/trap/classexpr3.js.trap b/javascript/extractor/tests/cfg/output/trap/classexpr3.js.trap index 4e7d7c4ea30c..097b06b4183f 100644 --- a/javascript/extractor/tests/cfg/output/trap/classexpr3.js.trap +++ b/javascript/extractor/tests/cfg/output/trap/classexpr3.js.trap @@ -163,12 +163,12 @@ hasLocation(#20044,#20028) #20045=* exit_cfg_node(#20045,#20030) hasLocation(#20045,#20028) -successor(#20035,#20036) successor(#20036,#20038) successor(#20040,#20039) successor(#20039,#20037) successor(#20038,#20040) successor(#20037,#20045) +successor(#20035,#20036) successor(#20033,#20035) successor(#20044,#20033) successor(#20029,#20030) diff --git a/javascript/extractor/tests/cfg/output/trap/classexpr4.js.trap b/javascript/extractor/tests/cfg/output/trap/classexpr4.js.trap index db4c964d45eb..932c91d875c8 100644 --- a/javascript/extractor/tests/cfg/output/trap/classexpr4.js.trap +++ b/javascript/extractor/tests/cfg/output/trap/classexpr4.js.trap @@ -184,12 +184,12 @@ hasLocation(#20050,#20034) #20051=* exit_cfg_node(#20051,#20036) hasLocation(#20051,#20034) -successor(#20041,#20042) successor(#20042,#20044) successor(#20046,#20045) successor(#20045,#20043) successor(#20044,#20046) successor(#20043,#20051) +successor(#20041,#20042) successor(#20039,#20041) successor(#20050,#20039) successor(#20035,#20036) diff --git a/javascript/extractor/tests/cfg/output/trap/fields.js.trap b/javascript/extractor/tests/cfg/output/trap/fields.js.trap index a1892dea8411..896fdccf2cd1 100644 --- a/javascript/extractor/tests/cfg/output/trap/fields.js.trap +++ b/javascript/extractor/tests/cfg/output/trap/fields.js.trap @@ -671,7 +671,6 @@ exit_cfg_node(#20215,#20188) #20216=@"loc,{#10000},16,4,16,3" locations_default(#20216,#10000,16,4,16,3) hasLocation(#20215,#20216) -successor(#20192,#20194) successor(#20203,#20205) successor(#20205,#20215) successor(#20198,#20202) @@ -680,6 +679,7 @@ successor(#20207,#20203) successor(#20200,#20209) successor(#20194,#20196) successor(#20196,#20198) +successor(#20192,#20194) successor(#20213,#20192) successor(#20187,#20188) successor(#20185,#20180) @@ -729,9 +729,9 @@ exit_cfg_node(#20227,#20146) #20228=@"loc,{#10000},4,4,4,3" locations_default(#20228,#10000,4,4,4,3) hasLocation(#20227,#20228) -successor(#20150,#20152) successor(#20152,#20154) successor(#20154,#20227) +successor(#20150,#20152) successor(#20225,#20158) successor(#20145,#20146) successor(#20143,#20164) diff --git a/javascript/extractor/tests/cfg/output/trap/tst.js.trap b/javascript/extractor/tests/cfg/output/trap/tst.js.trap index 7f7fc1ea383e..1cb55a0238aa 100644 --- a/javascript/extractor/tests/cfg/output/trap/tst.js.trap +++ b/javascript/extractor/tests/cfg/output/trap/tst.js.trap @@ -1425,30 +1425,30 @@ successor(#20455,#20457) successor(#20457,#20461) successor(#20432,#20434) successor(#20434,#20436) -successor(#20436,#20438) successor(#20438,#20442) successor(#20442,#20440) successor(#20440,#20443) +successor(#20436,#20438) successor(#20414,#20416) -successor(#20416,#20420) successor(#20420,#20418) successor(#20418,#20422) successor(#20418,#20432) successor(#20424,#20418) successor(#20422,#20424) +successor(#20416,#20420) successor(#20425,#20429) successor(#20430,#20432) successor(#20429,#20430) successor(#20392,#20394) successor(#20394,#20412) successor(#20396,#20400) -successor(#20401,#20403) successor(#20403,#20409) successor(#20411,#20407) successor(#20409,#20411) successor(#20407,#20412) successor(#20407,#20405) successor(#20405,#20412) +successor(#20401,#20403) successor(#20400,#20401) successor(#20412,#20414) successor(#20371,#20392) @@ -1462,7 +1462,6 @@ exit_cfg_node(#20468,#20371) #20469=@"loc,{#10000},18,2,18,1" locations_default(#20469,#10000,18,2,18,1) hasLocation(#20468,#20469) -successor(#20379,#20383) successor(#20383,#20381) successor(#20381,#20384) successor(#20381,#20468) @@ -1481,6 +1480,7 @@ successor(#20391,#20381) successor(#20384,#20387) successor(#20387,#20386) successor(#20386,#20388) +successor(#20379,#20383) successor(#20377,#20379) successor(#20466,#20377) successor(#20365,#20367) @@ -1504,7 +1504,6 @@ exit_cfg_node(#20475,#20322) #20476=@"loc,{#10000},10,2,10,1" locations_default(#20476,#10000,10,2,10,1) hasLocation(#20475,#20476) -successor(#20328,#20330) successor(#20356,#20358) successor(#20358,#20359) successor(#20359,#20361) @@ -1539,6 +1538,7 @@ successor(#20330,#20334) successor(#20335,#20332) successor(#20334,#20335) successor(#20332,#20336) +successor(#20328,#20330) successor(#20474,#20328) successor(#20373,#20322) successor(#20324,#20373) diff --git a/javascript/extractor/tests/es2015/output/trap/array_pattern_with_rest.js.trap b/javascript/extractor/tests/es2015/output/trap/array_pattern_with_rest.js.trap index 7f8c2257eeeb..9e5cd43ed625 100644 --- a/javascript/extractor/tests/es2015/output/trap/array_pattern_with_rest.js.trap +++ b/javascript/extractor/tests/es2015/output/trap/array_pattern_with_rest.js.trap @@ -235,7 +235,6 @@ hasLocation(#20074,#20072) #20075=* exit_cfg_node(#20075,#20051) hasLocation(#20075,#20048) -successor(#20058,#20060) successor(#20070,#20068) successor(#20068,#20075) successor(#20060,#20067) @@ -243,6 +242,7 @@ successor(#20064,#20066) successor(#20066,#20062) successor(#20067,#20064) successor(#20062,#20070) +successor(#20058,#20060) successor(#20056,#20058) successor(#20074,#20056) successor(#20052,#20051) diff --git a/javascript/extractor/tests/es2015/output/trap/arrowfn.js.trap b/javascript/extractor/tests/es2015/output/trap/arrowfn.js.trap index 44fe9bba129b..1092dc9c31f5 100644 --- a/javascript/extractor/tests/es2015/output/trap/arrowfn.js.trap +++ b/javascript/extractor/tests/es2015/output/trap/arrowfn.js.trap @@ -509,11 +509,11 @@ exit_cfg_node(#20163,#20143) #20164=@"loc,{#10000},3,40,3,39" locations_default(#20164,#10000,3,40,3,39) hasLocation(#20163,#20164) -successor(#20146,#20148) successor(#20148,#20152) successor(#20154,#20150) successor(#20152,#20154) successor(#20150,#20163) +successor(#20146,#20148) successor(#20161,#20146) successor(#20141,#20143) successor(#20139,#20160) diff --git a/javascript/extractor/tests/es2015/output/trap/class_accessors.js.trap b/javascript/extractor/tests/es2015/output/trap/class_accessors.js.trap index 5c5c137c72dc..278bb0c1d8a0 100644 --- a/javascript/extractor/tests/es2015/output/trap/class_accessors.js.trap +++ b/javascript/extractor/tests/es2015/output/trap/class_accessors.js.trap @@ -434,7 +434,6 @@ exit_cfg_node(#20134,#20101) #20135=@"loc,{#10000},7,4,7,3" locations_default(#20135,#10000,7,4,7,3) hasLocation(#20134,#20135) -successor(#20107,#20109) successor(#20109,#20115) successor(#20119,#20117) successor(#20117,#20111) @@ -442,6 +441,7 @@ successor(#20116,#20113) successor(#20115,#20116) successor(#20113,#20119) successor(#20111,#20134) +successor(#20107,#20109) successor(#20105,#20107) successor(#20132,#20105) successor(#20100,#20101) @@ -457,11 +457,11 @@ exit_cfg_node(#20138,#20086) #20139=@"loc,{#10000},4,4,4,3" locations_default(#20139,#10000,4,4,4,3) hasLocation(#20138,#20139) -successor(#20090,#20096) successor(#20097,#20094) successor(#20096,#20097) successor(#20094,#20092) successor(#20092,#20138) +successor(#20090,#20096) successor(#20136,#20090) successor(#20085,#20086) successor(#20083,#20100) diff --git a/javascript/extractor/tests/es2015/output/trap/class_ctor.js.trap b/javascript/extractor/tests/es2015/output/trap/class_ctor.js.trap index 6ee7194f2b32..c7d5fb315023 100644 --- a/javascript/extractor/tests/es2015/output/trap/class_ctor.js.trap +++ b/javascript/extractor/tests/es2015/output/trap/class_ctor.js.trap @@ -246,13 +246,13 @@ exit_cfg_node(#20076,#20054) #20077=@"loc,{#10000},4,4,4,3" locations_default(#20077,#10000,4,4,4,3) hasLocation(#20076,#20077) -successor(#20060,#20062) successor(#20062,#20068) successor(#20070,#20064) successor(#20069,#20066) successor(#20068,#20069) successor(#20066,#20070) successor(#20064,#20076) +successor(#20060,#20062) successor(#20058,#20060) successor(#20074,#20058) successor(#20053,#20054) diff --git a/javascript/extractor/tests/es2015/output/trap/class_extends.js.trap b/javascript/extractor/tests/es2015/output/trap/class_extends.js.trap index 8c15a5809550..ed10bdf317f9 100644 --- a/javascript/extractor/tests/es2015/output/trap/class_extends.js.trap +++ b/javascript/extractor/tests/es2015/output/trap/class_extends.js.trap @@ -159,12 +159,12 @@ hasLocation(#20042,#20026) #20043=* exit_cfg_node(#20043,#20028) hasLocation(#20043,#20026) -successor(#20033,#20034) successor(#20034,#20036) successor(#20038,#20037) successor(#20037,#20035) successor(#20036,#20038) successor(#20035,#20043) +successor(#20033,#20034) successor(#20031,#20033) successor(#20042,#20031) successor(#20027,#20028) diff --git a/javascript/extractor/tests/es2015/output/trap/class_extends2.js.trap b/javascript/extractor/tests/es2015/output/trap/class_extends2.js.trap index faa9e6abbec7..f61c4206ea33 100644 --- a/javascript/extractor/tests/es2015/output/trap/class_extends2.js.trap +++ b/javascript/extractor/tests/es2015/output/trap/class_extends2.js.trap @@ -261,12 +261,12 @@ hasLocation(#20075,#20059) #20076=* exit_cfg_node(#20076,#20061) hasLocation(#20076,#20059) -successor(#20066,#20067) successor(#20067,#20069) successor(#20071,#20070) successor(#20070,#20068) successor(#20069,#20071) successor(#20068,#20076) +successor(#20066,#20067) successor(#20064,#20066) successor(#20075,#20064) successor(#20060,#20061) diff --git a/javascript/extractor/tests/es2015/output/trap/class_method.js.trap b/javascript/extractor/tests/es2015/output/trap/class_method.js.trap index d0ccaee95080..18aec740ece8 100644 --- a/javascript/extractor/tests/es2015/output/trap/class_method.js.trap +++ b/javascript/extractor/tests/es2015/output/trap/class_method.js.trap @@ -253,11 +253,11 @@ exit_cfg_node(#20076,#20050) #20077=@"loc,{#10000},4,4,4,3" locations_default(#20077,#10000,4,4,4,3) hasLocation(#20076,#20077) -successor(#20054,#20060) successor(#20061,#20058) successor(#20060,#20061) successor(#20058,#20056) successor(#20056,#20076) +successor(#20054,#20060) successor(#20074,#20054) successor(#20049,#20050) successor(#20047,#20064) diff --git a/javascript/extractor/tests/es2015/output/trap/class_static.js.trap b/javascript/extractor/tests/es2015/output/trap/class_static.js.trap index 5c0d8f20d873..0be88f28c4d4 100644 --- a/javascript/extractor/tests/es2015/output/trap/class_static.js.trap +++ b/javascript/extractor/tests/es2015/output/trap/class_static.js.trap @@ -243,9 +243,9 @@ exit_cfg_node(#20073,#20048) #20074=@"loc,{#10000},4,4,4,3" locations_default(#20074,#10000,4,4,4,3) hasLocation(#20073,#20074) -successor(#20052,#20056) successor(#20056,#20054) successor(#20054,#20073) +successor(#20052,#20056) successor(#20071,#20052) successor(#20047,#20048) successor(#20045,#20061) diff --git a/javascript/extractor/tests/es2015/output/trap/delegating_yield.js.trap b/javascript/extractor/tests/es2015/output/trap/delegating_yield.js.trap index 6106dff7bdc4..9b306a40f43c 100644 --- a/javascript/extractor/tests/es2015/output/trap/delegating_yield.js.trap +++ b/javascript/extractor/tests/es2015/output/trap/delegating_yield.js.trap @@ -171,11 +171,11 @@ hasLocation(#20054,#20052) #20055=* exit_cfg_node(#20055,#20037) hasLocation(#20055,#20034) -successor(#20041,#20043) successor(#20043,#20049) successor(#20049,#20047) successor(#20047,#20045) successor(#20045,#20055) +successor(#20041,#20043) successor(#20054,#20041) successor(#20038,#20037) successor(#20051,#20038) diff --git a/javascript/extractor/tests/es2015/output/trap/destructuring.js.trap b/javascript/extractor/tests/es2015/output/trap/destructuring.js.trap index 6f4bc769f198..4677b4ce45b9 100644 --- a/javascript/extractor/tests/es2015/output/trap/destructuring.js.trap +++ b/javascript/extractor/tests/es2015/output/trap/destructuring.js.trap @@ -822,7 +822,6 @@ hasLocation(#20266,#20267) #20268=* exit_cfg_node(#20268,#20230) hasLocation(#20268,#20173) -successor(#20247,#20249) successor(#20262,#20260) successor(#20260,#20268) successor(#20249,#20259) @@ -832,6 +831,7 @@ successor(#20257,#20258) successor(#20255,#20251) successor(#20259,#20253) successor(#20251,#20262) +successor(#20247,#20249) successor(#20237,#20240) successor(#20245,#20242) successor(#20244,#20245) @@ -849,21 +849,20 @@ exit_cfg_node(#20270,#20177) #20271=@"loc,{#10000},8,2,8,1" locations_default(#20271,#10000,8,2,8,1) hasLocation(#20270,#20271) -successor(#20190,#20192) successor(#20203,#20205) -successor(#20205,#20209) successor(#20209,#20211) successor(#20212,#20207) successor(#20211,#20212) successor(#20207,#20213) +successor(#20205,#20209) successor(#20213,#20217) -successor(#20218,#20220) successor(#20220,#20226) successor(#20229,#20222) successor(#20228,#20224) successor(#20226,#20228) successor(#20224,#20229) successor(#20222,#20270) +successor(#20218,#20220) successor(#20217,#20218) successor(#20192,#20202) successor(#20196,#20198) @@ -872,6 +871,7 @@ successor(#20201,#20194) successor(#20198,#20199) successor(#20202,#20196) successor(#20194,#20203) +successor(#20190,#20192) successor(#20185,#20187) successor(#20188,#20190) successor(#20187,#20188) diff --git a/javascript/extractor/tests/es2015/output/trap/forof.js.trap b/javascript/extractor/tests/es2015/output/trap/forof.js.trap index 12ea8980cabf..f9e606176143 100644 --- a/javascript/extractor/tests/es2015/output/trap/forof.js.trap +++ b/javascript/extractor/tests/es2015/output/trap/forof.js.trap @@ -436,7 +436,6 @@ exit_cfg_node(#20140,#20118) #20141=@"loc,{#10000},7,2,7,1" locations_default(#20141,#10000,7,2,7,1) hasLocation(#20140,#20141) -successor(#20124,#20128) successor(#20128,#20126) successor(#20126,#20130) successor(#20126,#20140) @@ -444,6 +443,7 @@ successor(#20134,#20126) successor(#20130,#20133) successor(#20133,#20132) successor(#20132,#20134) +successor(#20124,#20128) successor(#20138,#20124) successor(#20094,#20096) successor(#20098,#20092) @@ -451,13 +451,13 @@ successor(#20097,#20098) successor(#20096,#20097) successor(#20092,#20101) successor(#20092,#20118) -successor(#20105,#20109) successor(#20109,#20113) successor(#20117,#20114) successor(#20116,#20117) successor(#20114,#20111) successor(#20113,#20116) successor(#20111,#20092) +successor(#20105,#20109) successor(#20101,#20104) successor(#20104,#20103) successor(#20103,#20105) diff --git a/javascript/extractor/tests/es2015/output/trap/let.js.trap b/javascript/extractor/tests/es2015/output/trap/let.js.trap index d02c8e0bd8de..3fbdfba7303b 100644 --- a/javascript/extractor/tests/es2015/output/trap/let.js.trap +++ b/javascript/extractor/tests/es2015/output/trap/let.js.trap @@ -673,8 +673,6 @@ hasLocation(#20210,#20211) #20212=* exit_cfg_node(#20212,#20001) hasLocation(#20212,#20135) -successor(#20137,#20140) -successor(#20146,#20150) successor(#20195,#20199) successor(#20200,#20197) successor(#20199,#20200) @@ -705,7 +703,6 @@ hasLocation(#20214,#20161) successor(#20214,#20195) successor(#20160,#20213) successor(#20160,#20214) -successor(#20173,#20177) successor(#20183,#20189) successor(#20192,#20185) successor(#20191,#20187) @@ -716,14 +713,17 @@ successor(#20177,#20181) successor(#20182,#20179) successor(#20181,#20182) successor(#20179,#20183) +successor(#20173,#20177) successor(#20150,#20154) successor(#20155,#20152) successor(#20154,#20155) successor(#20152,#20156) +successor(#20146,#20150) successor(#20140,#20144) successor(#20145,#20142) successor(#20144,#20145) successor(#20142,#20146) +successor(#20137,#20140) successor(#20210,#20137) numlines(#10000,12,12,0) filetype(#10000,"javascript") diff --git a/javascript/extractor/tests/es2015/output/trap/nested_import.js.trap b/javascript/extractor/tests/es2015/output/trap/nested_import.js.trap index 8542482671d1..7de82196cf64 100644 --- a/javascript/extractor/tests/es2015/output/trap/nested_import.js.trap +++ b/javascript/extractor/tests/es2015/output/trap/nested_import.js.trap @@ -352,13 +352,13 @@ hasLocation(#20107,#20033) successor(#20107,#20105) successor(#20080,#20106) successor(#20080,#20107) -successor(#20083,#20089) successor(#20097,#20101) successor(#20102,#20099) successor(#20101,#20102) successor(#20099,#20105) successor(#20089,#20094) successor(#20094,#20097) +successor(#20083,#20089) successor(#20071,#20078) successor(#20075,#20071) successor(#20103,#20075) diff --git a/javascript/extractor/tests/es2015/output/trap/new_target.js.trap b/javascript/extractor/tests/es2015/output/trap/new_target.js.trap index 4635fe2e09c2..f517fb8e8988 100644 --- a/javascript/extractor/tests/es2015/output/trap/new_target.js.trap +++ b/javascript/extractor/tests/es2015/output/trap/new_target.js.trap @@ -167,11 +167,11 @@ hasLocation(#20054,#20052) #20055=* exit_cfg_node(#20055,#20037) hasLocation(#20055,#20034) -successor(#20041,#20049) successor(#20049,#20047) successor(#20047,#20045) successor(#20045,#20043) successor(#20043,#20055) +successor(#20041,#20049) successor(#20054,#20041) successor(#20038,#20037) successor(#20051,#20038) diff --git a/javascript/extractor/tests/es2015/output/trap/odasa-2593.js.trap b/javascript/extractor/tests/es2015/output/trap/odasa-2593.js.trap index 23711b8d6e39..7cc4e9be2216 100644 --- a/javascript/extractor/tests/es2015/output/trap/odasa-2593.js.trap +++ b/javascript/extractor/tests/es2015/output/trap/odasa-2593.js.trap @@ -189,13 +189,13 @@ hasLocation(#20058,#20056) #20059=* exit_cfg_node(#20059,#20039) hasLocation(#20059,#20036) -successor(#20043,#20045) successor(#20048,#20052) successor(#20054,#20050) successor(#20052,#20054) successor(#20050,#20059) successor(#20045,#20047) successor(#20047,#20048) +successor(#20043,#20045) successor(#20058,#20043) successor(#20040,#20039) successor(#20055,#20040) diff --git a/javascript/extractor/tests/es2015/output/trap/properties.js.trap b/javascript/extractor/tests/es2015/output/trap/properties.js.trap index b59d331f28e8..98746bb399de 100644 --- a/javascript/extractor/tests/es2015/output/trap/properties.js.trap +++ b/javascript/extractor/tests/es2015/output/trap/properties.js.trap @@ -403,9 +403,9 @@ exit_cfg_node(#20126,#20112) #20127=@"loc,{#10000},5,27,5,26" locations_default(#20127,#10000,5,27,5,26) hasLocation(#20126,#20127) -successor(#20116,#20120) successor(#20120,#20118) successor(#20118,#20126) +successor(#20116,#20120) successor(#20124,#20116) successor(#20111,#20112) successor(#20109,#20088) diff --git a/javascript/extractor/tests/es2015/output/trap/super_call.js.trap b/javascript/extractor/tests/es2015/output/trap/super_call.js.trap index e92324e4b756..dfcf41920444 100644 --- a/javascript/extractor/tests/es2015/output/trap/super_call.js.trap +++ b/javascript/extractor/tests/es2015/output/trap/super_call.js.trap @@ -332,12 +332,12 @@ hasLocation(#20098,#20082) #20099=* exit_cfg_node(#20099,#20084) hasLocation(#20099,#20082) -successor(#20089,#20090) successor(#20090,#20092) successor(#20094,#20093) successor(#20093,#20091) successor(#20092,#20094) successor(#20091,#20099) +successor(#20089,#20090) successor(#20087,#20089) successor(#20098,#20087) successor(#20083,#20084) @@ -353,7 +353,6 @@ exit_cfg_node(#20102,#20064) #20103=@"loc,{#10000},4,4,4,3" locations_default(#20103,#10000,4,4,4,3) hasLocation(#20102,#20103) -successor(#20068,#20078) successor(#20080,#20072) successor(#20079,#20076) successor(#20078,#20079) @@ -361,6 +360,7 @@ successor(#20076,#20074) successor(#20074,#20080) successor(#20072,#20070) successor(#20070,#20102) +successor(#20068,#20078) successor(#20100,#20068) successor(#20063,#20064) successor(#20061,#20083) diff --git a/javascript/extractor/tests/es2015/output/trap/super_ctor.js.trap b/javascript/extractor/tests/es2015/output/trap/super_ctor.js.trap index e96ad048d604..f5d8013e555b 100644 --- a/javascript/extractor/tests/es2015/output/trap/super_ctor.js.trap +++ b/javascript/extractor/tests/es2015/output/trap/super_ctor.js.trap @@ -233,11 +233,11 @@ exit_cfg_node(#20073,#20056) #20074=@"loc,{#10000},4,4,4,3" locations_default(#20074,#10000,4,4,4,3) hasLocation(#20073,#20074) -successor(#20060,#20062) successor(#20062,#20066) successor(#20067,#20064) successor(#20066,#20067) successor(#20064,#20073) +successor(#20060,#20062) successor(#20071,#20060) successor(#20055,#20056) successor(#20053,#20048) diff --git a/javascript/extractor/tests/es2015/output/trap/templates.js.trap b/javascript/extractor/tests/es2015/output/trap/templates.js.trap index 0ec4736720a7..01688946f3fb 100644 --- a/javascript/extractor/tests/es2015/output/trap/templates.js.trap +++ b/javascript/extractor/tests/es2015/output/trap/templates.js.trap @@ -729,7 +729,6 @@ exit_cfg_node(#20221,#20157) #20222=@"loc,{#10000},3,2,3,1" locations_default(#20222,#10000,3,2,3,1) hasLocation(#20221,#20222) -successor(#20166,#20172) successor(#20179,#20173) successor(#20178,#20175) successor(#20177,#20178) @@ -738,6 +737,7 @@ successor(#20173,#20170) successor(#20172,#20177) successor(#20170,#20168) successor(#20168,#20221) +successor(#20166,#20172) successor(#20164,#20166) successor(#20162,#20164) successor(#20220,#20162) diff --git a/javascript/extractor/tests/es2015/output/trap/unknown_meta_property.js.trap b/javascript/extractor/tests/es2015/output/trap/unknown_meta_property.js.trap index 7599d6eb87e4..13db0f6a6fc1 100644 --- a/javascript/extractor/tests/es2015/output/trap/unknown_meta_property.js.trap +++ b/javascript/extractor/tests/es2015/output/trap/unknown_meta_property.js.trap @@ -138,9 +138,9 @@ hasLocation(#20044,#20042) #20045=* exit_cfg_node(#20045,#20031) hasLocation(#20045,#20028) -successor(#20035,#20037) successor(#20037,#20039) successor(#20039,#20045) +successor(#20035,#20037) successor(#20044,#20035) successor(#20032,#20031) successor(#20041,#20032) diff --git a/javascript/extractor/tests/es2015/output/trap/yield.js.trap b/javascript/extractor/tests/es2015/output/trap/yield.js.trap index 6ebac9325d22..73886a34b3f2 100644 --- a/javascript/extractor/tests/es2015/output/trap/yield.js.trap +++ b/javascript/extractor/tests/es2015/output/trap/yield.js.trap @@ -287,7 +287,6 @@ hasLocation(#20090,#20088) #20091=* exit_cfg_node(#20091,#20061) hasLocation(#20091,#20058) -successor(#20066,#20068) successor(#20074,#20078) successor(#20080,#20086) successor(#20086,#20084) @@ -309,6 +308,7 @@ successor(#20068,#20072) successor(#20073,#20070) successor(#20072,#20073) successor(#20070,#20074) +successor(#20066,#20068) successor(#20090,#20066) successor(#20062,#20061) successor(#20087,#20062) diff --git a/javascript/extractor/tests/es2015/output/trap/yield2.js.trap b/javascript/extractor/tests/es2015/output/trap/yield2.js.trap index 70a3c2464f1f..2bc654a7ee95 100644 --- a/javascript/extractor/tests/es2015/output/trap/yield2.js.trap +++ b/javascript/extractor/tests/es2015/output/trap/yield2.js.trap @@ -137,9 +137,9 @@ exit_cfg_node(#20043,#20029) #20044=@"loc,{#10000},3,2,3,1" locations_default(#20044,#10000,3,2,3,1) hasLocation(#20043,#20044) -successor(#20034,#20036) successor(#20036,#20038) successor(#20038,#20043) +successor(#20034,#20036) successor(#20042,#20034) successor(#20031,#20029) successor(#20039,#20031) diff --git a/javascript/extractor/tests/es2016/output/trap/usestrict.js.trap b/javascript/extractor/tests/es2016/output/trap/usestrict.js.trap index a1e1b27cd25b..0ec333d2cf7c 100644 --- a/javascript/extractor/tests/es2016/output/trap/usestrict.js.trap +++ b/javascript/extractor/tests/es2016/output/trap/usestrict.js.trap @@ -148,9 +148,9 @@ hasLocation(#20046,#20044) #20047=* exit_cfg_node(#20047,#20029) hasLocation(#20047,#20027) -successor(#20036,#20038) successor(#20038,#20040) successor(#20040,#20047) +successor(#20036,#20038) successor(#20033,#20036) successor(#20035,#20033) successor(#20046,#20035) diff --git a/javascript/extractor/tests/es2017/output/trap/async-await.js.trap b/javascript/extractor/tests/es2017/output/trap/async-await.js.trap index 6330dce79400..28713055c6e4 100644 --- a/javascript/extractor/tests/es2017/output/trap/async-await.js.trap +++ b/javascript/extractor/tests/es2017/output/trap/async-await.js.trap @@ -333,18 +333,18 @@ exit_cfg_node(#20107,#20073) #20108=@"loc,{#10000},7,2,7,1" locations_default(#20108,#10000,7,2,7,1) hasLocation(#20107,#20108) -successor(#20080,#20082) successor(#20082,#20084) -successor(#20084,#20086) successor(#20086,#20090) successor(#20090,#20088) successor(#20088,#20091) successor(#20088,#20107) +successor(#20084,#20086) successor(#20091,#20095) -successor(#20096,#20100) successor(#20100,#20098) successor(#20098,#20107) +successor(#20096,#20100) successor(#20095,#20096) +successor(#20080,#20082) successor(#20078,#20080) successor(#20105,#20078) successor(#20075,#20071) diff --git a/javascript/extractor/tests/esnext/output/trap/async-generators.js.trap b/javascript/extractor/tests/esnext/output/trap/async-generators.js.trap index 058ac988face..172c44374459 100644 --- a/javascript/extractor/tests/esnext/output/trap/async-generators.js.trap +++ b/javascript/extractor/tests/esnext/output/trap/async-generators.js.trap @@ -303,7 +303,6 @@ exit_cfg_node(#20099,#20076) #20100=@"loc,{#10000},6,2,6,1" locations_default(#20100,#10000,6,2,6,1) hasLocation(#20099,#20100) -successor(#20082,#20088) successor(#20088,#20086) successor(#20086,#20084) successor(#20084,#20089) @@ -312,6 +311,7 @@ successor(#20093,#20084) successor(#20089,#20092) successor(#20092,#20091) successor(#20091,#20093) +successor(#20082,#20088) successor(#20097,#20082) successor(#20069,#20076) #20101=* diff --git a/javascript/extractor/tests/esnext/output/trap/catchNoBinding.js.trap b/javascript/extractor/tests/esnext/output/trap/catchNoBinding.js.trap index aa264fa302a9..28beb8736a27 100644 --- a/javascript/extractor/tests/esnext/output/trap/catchNoBinding.js.trap +++ b/javascript/extractor/tests/esnext/output/trap/catchNoBinding.js.trap @@ -253,18 +253,18 @@ hasLocation(#20085,#20086) exit_cfg_node(#20087,#20001) hasLocation(#20087,#20054) successor(#20056,#20058) -successor(#20058,#20060) successor(#20060,#20062) successor(#20062,#20087) successor(#20064,#20067) successor(#20067,#20087) +successor(#20058,#20060) successor(#20069,#20072) -successor(#20072,#20074) successor(#20074,#20076) successor(#20076,#20083) successor(#20078,#20081) successor(#20081,#20083) successor(#20083,#20087) +successor(#20072,#20074) successor(#20085,#20056) numlines(#10000,5,5,0) filetype(#10000,"javascript") diff --git a/javascript/extractor/tests/esnext/output/trap/fields.js.trap b/javascript/extractor/tests/esnext/output/trap/fields.js.trap index f73fd5fa6bad..b317e50f2686 100644 --- a/javascript/extractor/tests/esnext/output/trap/fields.js.trap +++ b/javascript/extractor/tests/esnext/output/trap/fields.js.trap @@ -499,13 +499,13 @@ hasLocation(#20147,#20116) #20148=* exit_cfg_node(#20148,#20109) hasLocation(#20148,#20116) -successor(#20122,#20123) successor(#20123,#20125) successor(#20127,#20126) successor(#20126,#20124) successor(#20125,#20127) successor(#20107,#20148) successor(#20124,#20110) +successor(#20122,#20123) successor(#20120,#20122) successor(#20147,#20120) successor(#20117,#20109) diff --git a/javascript/extractor/tests/esnext/output/trap/for-await.js.trap b/javascript/extractor/tests/esnext/output/trap/for-await.js.trap index 6757b189ce92..5af93db3494c 100644 --- a/javascript/extractor/tests/esnext/output/trap/for-await.js.trap +++ b/javascript/extractor/tests/esnext/output/trap/for-await.js.trap @@ -416,10 +416,10 @@ hasLocation(#20134,#20089) successor(#20118,#20116) successor(#20116,#20121) successor(#20116,#20134) -successor(#20125,#20127) successor(#20127,#20131) successor(#20131,#20129) successor(#20129,#20116) +successor(#20125,#20127) successor(#20121,#20124) successor(#20124,#20123) successor(#20123,#20125) @@ -432,17 +432,17 @@ exit_cfg_node(#20136,#20092) #20137=@"loc,{#10000},5,2,5,1" locations_default(#20137,#10000,5,2,5,1) hasLocation(#20136,#20137) -successor(#20097,#20101) successor(#20101,#20099) successor(#20099,#20105) successor(#20099,#20136) -successor(#20109,#20111) successor(#20111,#20115) successor(#20115,#20113) successor(#20113,#20099) +successor(#20109,#20111) successor(#20105,#20108) successor(#20108,#20107) successor(#20107,#20109) +successor(#20097,#20101) successor(#20135,#20097) successor(#20094,#20092) successor(#20132,#20094) diff --git a/javascript/extractor/tests/esnext/output/trap/optional-chaining_short-circuiting.js.trap b/javascript/extractor/tests/esnext/output/trap/optional-chaining_short-circuiting.js.trap index 1ae6f5313625..70fe3585215e 100644 --- a/javascript/extractor/tests/esnext/output/trap/optional-chaining_short-circuiting.js.trap +++ b/javascript/extractor/tests/esnext/output/trap/optional-chaining_short-circuiting.js.trap @@ -1575,12 +1575,12 @@ successor(#20492,#20481) successor(#20471,#20491) successor(#20471,#20492) successor(#20473,#20481) -successor(#20476,#20478) successor(#20478,#20480) successor(#20480,#20488) -successor(#20481,#20483) +successor(#20476,#20478) successor(#20483,#20485) successor(#20485,#20488) +successor(#20481,#20483) successor(#20445,#20451) successor(#20452,#20449) successor(#20451,#20452) @@ -1596,12 +1596,12 @@ hasLocation(#20494,#20450) successor(#20494,#20458) successor(#20447,#20493) successor(#20447,#20494) -successor(#20453,#20455) successor(#20455,#20457) successor(#20457,#20463) -successor(#20458,#20460) +successor(#20453,#20455) successor(#20460,#20462) successor(#20462,#20463) +successor(#20458,#20460) successor(#20429,#20433) successor(#20434,#20431) successor(#20433,#20434) @@ -1616,12 +1616,12 @@ successor(#20496,#20440) successor(#20431,#20495) successor(#20431,#20496) successor(#20433,#20440) -successor(#20435,#20437) successor(#20437,#20439) successor(#20439,#20445) -successor(#20440,#20442) +successor(#20435,#20437) successor(#20442,#20444) successor(#20444,#20445) +successor(#20440,#20442) successor(#20404,#20415) successor(#20428,#20405) successor(#20427,#20409) diff --git a/javascript/extractor/tests/esnext/output/trap/yield-import.js.trap b/javascript/extractor/tests/esnext/output/trap/yield-import.js.trap index 4f2b64850424..8a2a95ffc208 100644 --- a/javascript/extractor/tests/esnext/output/trap/yield-import.js.trap +++ b/javascript/extractor/tests/esnext/output/trap/yield-import.js.trap @@ -171,11 +171,11 @@ exit_cfg_node(#20054,#20035) #20055=@"loc,{#10000},3,2,3,1" locations_default(#20055,#10000,3,2,3,1) hasLocation(#20054,#20055) -successor(#20040,#20042) successor(#20042,#20047) successor(#20047,#20045) successor(#20045,#20044) successor(#20044,#20054) +successor(#20040,#20042) successor(#20053,#20040) successor(#20037,#20035) successor(#20050,#20037) diff --git a/javascript/extractor/tests/flow/output/trap/explicitTypeParameters.js.trap b/javascript/extractor/tests/flow/output/trap/explicitTypeParameters.js.trap index 0d12524a1683..eeeaf349ea49 100644 --- a/javascript/extractor/tests/flow/output/trap/explicitTypeParameters.js.trap +++ b/javascript/extractor/tests/flow/output/trap/explicitTypeParameters.js.trap @@ -666,12 +666,12 @@ exit_cfg_node(#20223,#20184) #20224=@"loc,{#10000},5,2,5,1" locations_default(#20224,#10000,5,2,5,1) hasLocation(#20223,#20224) -successor(#20188,#20190) successor(#20190,#20196) successor(#20198,#20194) successor(#20196,#20198) successor(#20194,#20192) successor(#20192,#20223) +successor(#20188,#20190) successor(#20221,#20188) successor(#20183,#20184) successor(#20181,#20200) diff --git a/javascript/extractor/tests/flow/output/trap/methodTypeParams.js.trap b/javascript/extractor/tests/flow/output/trap/methodTypeParams.js.trap index 9b4ae6666b53..b2681d328ff0 100644 --- a/javascript/extractor/tests/flow/output/trap/methodTypeParams.js.trap +++ b/javascript/extractor/tests/flow/output/trap/methodTypeParams.js.trap @@ -247,9 +247,9 @@ exit_cfg_node(#20079,#20062) #20080=@"loc,{#10000},4,4,4,3" locations_default(#20080,#10000,4,4,4,3) hasLocation(#20079,#20080) -successor(#20069,#20073) successor(#20073,#20071) successor(#20071,#20079) +successor(#20069,#20073) successor(#20066,#20069) successor(#20077,#20066) successor(#20061,#20062) diff --git a/javascript/extractor/tests/flow/output/trap/parmAnonFunctionType.js.trap b/javascript/extractor/tests/flow/output/trap/parmAnonFunctionType.js.trap index ab1e66273cd2..7fc6015201a9 100644 --- a/javascript/extractor/tests/flow/output/trap/parmAnonFunctionType.js.trap +++ b/javascript/extractor/tests/flow/output/trap/parmAnonFunctionType.js.trap @@ -226,11 +226,11 @@ exit_cfg_node(#20075,#20055) #20076=@"loc,{#10000},3,2,3,1" locations_default(#20076,#10000,3,2,3,1) hasLocation(#20075,#20076) -successor(#20063,#20065) successor(#20065,#20069) successor(#20070,#20067) successor(#20069,#20070) successor(#20067,#20075) +successor(#20063,#20065) successor(#20060,#20063) successor(#20074,#20060) successor(#20057,#20055) diff --git a/javascript/extractor/tests/flow/output/trap/predicate-function-annotation.js.trap b/javascript/extractor/tests/flow/output/trap/predicate-function-annotation.js.trap index 57e41fef6612..b43afc81579c 100644 --- a/javascript/extractor/tests/flow/output/trap/predicate-function-annotation.js.trap +++ b/javascript/extractor/tests/flow/output/trap/predicate-function-annotation.js.trap @@ -498,9 +498,9 @@ hasLocation(#20165,#20166) successor(#20148,#20165) successor(#20147,#20148) successor(#20163,#20147) -successor(#20136,#20140) successor(#20140,#20138) successor(#20138,#20158) +successor(#20136,#20140) successor(#20129,#20136) #20167=* entry_cfg_node(#20167,#20129) @@ -523,9 +523,9 @@ exit_cfg_node(#20172,#20117) #20173=@"loc,{#10000},3,2,3,1" locations_default(#20173,#10000,3,2,3,1) hasLocation(#20172,#20173) -successor(#20124,#20128) successor(#20128,#20126) successor(#20126,#20172) +successor(#20124,#20128) successor(#20122,#20124) successor(#20171,#20122) successor(#20131,#20117) diff --git a/javascript/extractor/tests/flow/output/trap/tst.js.trap b/javascript/extractor/tests/flow/output/trap/tst.js.trap index dac8b56dea0b..05f0c5ce687b 100644 --- a/javascript/extractor/tests/flow/output/trap/tst.js.trap +++ b/javascript/extractor/tests/flow/output/trap/tst.js.trap @@ -684,12 +684,12 @@ exit_cfg_node(#20237,#20216) #20238=@"loc,{#10000},15,2,15,1" locations_default(#20238,#10000,15,2,15,1) hasLocation(#20237,#20238) -successor(#20221,#20223) successor(#20223,#20225) successor(#20225,#20227) successor(#20227,#20229) successor(#20229,#20231) successor(#20231,#20237) +successor(#20221,#20223) successor(#20235,#20221) successor(#20200,#20197) successor(#20199,#20210) diff --git a/javascript/extractor/tests/generatedcode/output/trap/tst.js.trap b/javascript/extractor/tests/generatedcode/output/trap/tst.js.trap index b9f05be663c0..cf70d72dc5f0 100644 --- a/javascript/extractor/tests/generatedcode/output/trap/tst.js.trap +++ b/javascript/extractor/tests/generatedcode/output/trap/tst.js.trap @@ -634,12 +634,10 @@ hasLocation(#20206,#20187) successor(#20206,#20196) successor(#20186,#20205) successor(#20186,#20206) -successor(#20190,#20192) -successor(#20192,#20194) successor(#20194,#20195) successor(#20195,#20196) -successor(#20175,#20177) -successor(#20177,#20179) +successor(#20192,#20194) +successor(#20190,#20192) successor(#20179,#20181) #20207=* guard_node(#20207,1,#20181) @@ -652,10 +650,12 @@ successor(#20208,#20184) successor(#20181,#20207) successor(#20181,#20208) successor(#20182,#20184) -successor(#20168,#20170) -successor(#20170,#20172) +successor(#20177,#20179) +successor(#20175,#20177) successor(#20172,#20173) successor(#20173,#20175) +successor(#20170,#20172) +successor(#20168,#20170) successor(#20159,#20162) successor(#20166,#20160) successor(#20164,#20166) diff --git a/javascript/extractor/tests/mozilla/output/trap/exprfns.js.trap b/javascript/extractor/tests/mozilla/output/trap/exprfns.js.trap index db738b83deb3..8d67fe56cd0d 100644 --- a/javascript/extractor/tests/mozilla/output/trap/exprfns.js.trap +++ b/javascript/extractor/tests/mozilla/output/trap/exprfns.js.trap @@ -363,7 +363,6 @@ exit_cfg_node(#20118,#20088) #20119=@"loc,{#10000},7,2,7,1" locations_default(#20119,#10000,7,2,7,1) hasLocation(#20118,#20119) -successor(#20094,#20096) successor(#20096,#20098) #20120=* guard_node(#20120,1,#20098) @@ -375,9 +374,7 @@ hasLocation(#20121,#20047) successor(#20121,#20118) successor(#20098,#20120) successor(#20098,#20121) -successor(#20099,#20101) -successor(#20101,#20103) -successor(#20103,#20118) +successor(#20101,#20118) #20122=* entry_cfg_node(#20122,#20101) #20123=@"loc,{#10000},5,5,5,4" @@ -392,6 +389,9 @@ successor(#20108,#20110) successor(#20110,#20124) successor(#20106,#20108) successor(#20122,#20106) +successor(#20103,#20101) +successor(#20099,#20103) +successor(#20094,#20096) successor(#20092,#20094) successor(#20116,#20092) successor(#20075,#20086) diff --git a/javascript/extractor/tests/mozilla/output/trap/foreach.js.trap b/javascript/extractor/tests/mozilla/output/trap/foreach.js.trap index 28f0598a9946..cecedc6e9b0a 100644 --- a/javascript/extractor/tests/mozilla/output/trap/foreach.js.trap +++ b/javascript/extractor/tests/mozilla/output/trap/foreach.js.trap @@ -516,11 +516,11 @@ successor(#20151,#20161) successor(#20136,#20134) successor(#20134,#20137) successor(#20134,#20149) -successor(#20141,#20143) successor(#20143,#20147) successor(#20148,#20145) successor(#20147,#20148) successor(#20145,#20134) +successor(#20141,#20143) successor(#20137,#20140) successor(#20140,#20139) successor(#20139,#20141) diff --git a/javascript/extractor/tests/mozilla/output/trap/guardedCatch.js.trap b/javascript/extractor/tests/mozilla/output/trap/guardedCatch.js.trap index 28200e7e0289..c4ff04cd2904 100644 --- a/javascript/extractor/tests/mozilla/output/trap/guardedCatch.js.trap +++ b/javascript/extractor/tests/mozilla/output/trap/guardedCatch.js.trap @@ -542,35 +542,35 @@ hasLocation(#20173,#20171) #20174=* exit_cfg_node(#20174,#20111) hasLocation(#20174,#20108) -successor(#20117,#20119) successor(#20119,#20121) -successor(#20121,#20123) successor(#20123,#20127) successor(#20127,#20125) successor(#20125,#20128) successor(#20125,#20174) +successor(#20121,#20123) successor(#20128,#20132) successor(#20136,#20133) successor(#20135,#20136) successor(#20133,#20138) successor(#20133,#20152) successor(#20132,#20135) -successor(#20138,#20140) successor(#20140,#20146) successor(#20149,#20142) successor(#20148,#20144) successor(#20146,#20148) successor(#20144,#20149) successor(#20142,#20174) +successor(#20138,#20140) successor(#20152,#20156) -successor(#20157,#20159) successor(#20159,#20165) successor(#20167,#20161) successor(#20166,#20163) successor(#20165,#20166) successor(#20163,#20167) successor(#20161,#20174) +successor(#20157,#20159) successor(#20156,#20157) +successor(#20117,#20119) successor(#20115,#20117) successor(#20173,#20115) successor(#20112,#20111) diff --git a/javascript/extractor/tests/mozilla/output/trap/letStmt.js.trap b/javascript/extractor/tests/mozilla/output/trap/letStmt.js.trap index 38bed9aeab6a..24050b29d6c7 100644 --- a/javascript/extractor/tests/mozilla/output/trap/letStmt.js.trap +++ b/javascript/extractor/tests/mozilla/output/trap/letStmt.js.trap @@ -489,7 +489,6 @@ successor(#20140,#20141) successor(#20138,#20144) successor(#20136,#20148) successor(#20107,#20114) -successor(#20120,#20122) successor(#20122,#20128) successor(#20134,#20131) successor(#20133,#20134) @@ -498,6 +497,7 @@ successor(#20130,#20126) successor(#20128,#20130) successor(#20126,#20133) successor(#20124,#20135) +successor(#20120,#20122) successor(#20119,#20116) successor(#20118,#20119) successor(#20116,#20120) diff --git a/javascript/extractor/tests/mozilla/output/trap/odasa-2593.js.trap b/javascript/extractor/tests/mozilla/output/trap/odasa-2593.js.trap index 23711b8d6e39..7cc4e9be2216 100644 --- a/javascript/extractor/tests/mozilla/output/trap/odasa-2593.js.trap +++ b/javascript/extractor/tests/mozilla/output/trap/odasa-2593.js.trap @@ -189,13 +189,13 @@ hasLocation(#20058,#20056) #20059=* exit_cfg_node(#20059,#20039) hasLocation(#20059,#20036) -successor(#20043,#20045) successor(#20048,#20052) successor(#20054,#20050) successor(#20052,#20054) successor(#20050,#20059) successor(#20045,#20047) successor(#20047,#20048) +successor(#20043,#20045) successor(#20058,#20043) successor(#20040,#20039) successor(#20055,#20040) diff --git a/javascript/extractor/tests/stmts/output/trap/functions.js.trap b/javascript/extractor/tests/stmts/output/trap/functions.js.trap index 7eb1f5a04c1f..f89ba7e8cc78 100644 --- a/javascript/extractor/tests/stmts/output/trap/functions.js.trap +++ b/javascript/extractor/tests/stmts/output/trap/functions.js.trap @@ -565,8 +565,8 @@ exit_cfg_node(#20182,#20143) #20183=@"loc,{#10000},9,2,9,1" locations_default(#20183,#10000,9,2,9,1) hasLocation(#20182,#20183) -successor(#20147,#20149) successor(#20149,#20182) +successor(#20147,#20149) successor(#20180,#20147) successor(#20141,#20143) successor(#20140,#20151) @@ -592,11 +592,11 @@ exit_cfg_node(#20189,#20115) #20190=@"loc,{#10000},3,2,3,1" locations_default(#20190,#10000,3,2,3,1) hasLocation(#20189,#20190) -successor(#20124,#20130) successor(#20131,#20128) successor(#20130,#20131) successor(#20128,#20126) successor(#20126,#20189) +successor(#20124,#20130) successor(#20122,#20124) successor(#20120,#20122) successor(#20188,#20120) diff --git a/javascript/extractor/tests/stmts/output/trap/loops.js.trap b/javascript/extractor/tests/stmts/output/trap/loops.js.trap index 3b6519e9479d..2adac2bb41ce 100644 --- a/javascript/extractor/tests/stmts/output/trap/loops.js.trap +++ b/javascript/extractor/tests/stmts/output/trap/loops.js.trap @@ -1009,8 +1009,8 @@ successor(#20281,#20279) successor(#20279,#20277) successor(#20292,#20281) successor(#20268,#20271) -successor(#20271,#20273) successor(#20273,#20270) +successor(#20271,#20273) #20317=* guard_node(#20317,1,#20270) hasLocation(#20317,#20136) @@ -1035,7 +1035,6 @@ successor(#20320,#20268) successor(#20242,#20319) successor(#20242,#20320) successor(#20244,#20242) -successor(#20248,#20250) successor(#20250,#20252) successor(#20252,#20254) #20321=* @@ -1062,6 +1061,7 @@ successor(#20261,#20323) successor(#20261,#20324) successor(#20263,#20268) successor(#20266,#20252) +successor(#20248,#20250) successor(#20233,#20235) successor(#20236,#20235) successor(#20235,#20236) diff --git a/javascript/extractor/tests/stmts/output/trap/switch.js.trap b/javascript/extractor/tests/stmts/output/trap/switch.js.trap index 7e6d831b38fd..ab4566ccb982 100644 --- a/javascript/extractor/tests/stmts/output/trap/switch.js.trap +++ b/javascript/extractor/tests/stmts/output/trap/switch.js.trap @@ -548,7 +548,6 @@ exit_cfg_node(#20179,#20147) #20180=@"loc,{#10000},17,2,17,1" locations_default(#20180,#10000,17,2,17,1) hasLocation(#20179,#20180) -successor(#20152,#20154) successor(#20154,#20156) successor(#20156,#20157) successor(#20168,#20170) @@ -564,6 +563,7 @@ successor(#20159,#20162) successor(#20159,#20168) successor(#20162,#20160) successor(#20160,#20179) +successor(#20152,#20154) successor(#20177,#20152) successor(#20130,#20132) successor(#20132,#20138) diff --git a/javascript/extractor/tests/stmts/output/trap/switch2.js.trap b/javascript/extractor/tests/stmts/output/trap/switch2.js.trap index bd5de336d090..d753eebe3a9c 100644 --- a/javascript/extractor/tests/stmts/output/trap/switch2.js.trap +++ b/javascript/extractor/tests/stmts/output/trap/switch2.js.trap @@ -321,7 +321,6 @@ exit_cfg_node(#20104,#20075) #20105=@"loc,{#10000},9,2,9,1" locations_default(#20105,#10000,9,2,9,1) hasLocation(#20104,#20105) -successor(#20080,#20082) successor(#20082,#20084) successor(#20084,#20086) successor(#20094,#20096) @@ -335,6 +334,7 @@ successor(#20091,#20104) successor(#20086,#20088) successor(#20088,#20089) successor(#20088,#20094) +successor(#20080,#20082) successor(#20103,#20080) successor(#20077,#20075) successor(#20100,#20077) diff --git a/javascript/extractor/tests/stmts/output/trap/try.js.trap b/javascript/extractor/tests/stmts/output/trap/try.js.trap index 607d91d6f641..f364be587d28 100644 --- a/javascript/extractor/tests/stmts/output/trap/try.js.trap +++ b/javascript/extractor/tests/stmts/output/trap/try.js.trap @@ -345,15 +345,15 @@ successor(#20109,#20110) successor(#20112,#20116) successor(#20096,#20097) successor(#20097,#20099) -successor(#20099,#20101) successor(#20101,#20102) +successor(#20099,#20101) successor(#20079,#20081) -successor(#20081,#20085) successor(#20085,#20083) successor(#20083,#20088) +successor(#20081,#20085) successor(#20088,#20092) -successor(#20093,#20095) successor(#20095,#20096) +successor(#20093,#20095) successor(#20092,#20093) successor(#20114,#20079) numlines(#10000,5,5,0) diff --git a/javascript/extractor/tests/strictmode/output/trap/assignargs.js.trap b/javascript/extractor/tests/strictmode/output/trap/assignargs.js.trap index efc24fe55e5c..5f4e3f939b03 100644 --- a/javascript/extractor/tests/strictmode/output/trap/assignargs.js.trap +++ b/javascript/extractor/tests/strictmode/output/trap/assignargs.js.trap @@ -186,13 +186,13 @@ hasLocation(#20057,#20055) #20058=* exit_cfg_node(#20058,#20037) hasLocation(#20058,#20034) -successor(#20041,#20043) successor(#20048,#20052) successor(#20053,#20050) successor(#20052,#20053) successor(#20050,#20058) successor(#20043,#20045) successor(#20045,#20048) +successor(#20041,#20043) successor(#20057,#20041) successor(#20038,#20037) successor(#20054,#20038) diff --git a/javascript/extractor/tests/ts/output/trap/classes.ts.trap b/javascript/extractor/tests/ts/output/trap/classes.ts.trap index e91be374bf03..aec7713d4e39 100644 --- a/javascript/extractor/tests/ts/output/trap/classes.ts.trap +++ b/javascript/extractor/tests/ts/output/trap/classes.ts.trap @@ -226,12 +226,12 @@ hasLocation(#20064,#20048) #20065=* exit_cfg_node(#20065,#20050) hasLocation(#20065,#20048) -successor(#20055,#20056) successor(#20056,#20058) successor(#20060,#20059) successor(#20059,#20057) successor(#20058,#20060) successor(#20057,#20065) +successor(#20055,#20056) successor(#20053,#20055) successor(#20064,#20053) successor(#20049,#20050) diff --git a/javascript/extractor/tests/ts/output/trap/conditionalTypes.ts.trap b/javascript/extractor/tests/ts/output/trap/conditionalTypes.ts.trap index c8d26a9b9830..0751d283e6cc 100644 --- a/javascript/extractor/tests/ts/output/trap/conditionalTypes.ts.trap +++ b/javascript/extractor/tests/ts/output/trap/conditionalTypes.ts.trap @@ -10121,7 +10121,6 @@ exit_cfg_node(#23205,#22591) #23206=@"loc,{#10000},49,4,49,3" locations_default(#23206,#10000,49,4,49,3) hasLocation(#23205,#23206) -successor(#22613,#22617) successor(#22623,#22627) successor(#22628,#22625) successor(#22627,#22628) @@ -10130,6 +10129,7 @@ successor(#22617,#22621) successor(#22622,#22619) successor(#22621,#22622) successor(#22619,#22623) +successor(#22613,#22617) successor(#22599,#22613) successor(#22597,#22599) successor(#23203,#22597) @@ -10144,11 +10144,11 @@ exit_cfg_node(#23209,#22566) #23210=@"loc,{#10000},44,4,44,3" locations_default(#23210,#10000,44,4,44,3) hasLocation(#23209,#23210) -successor(#22583,#22585) successor(#22585,#22589) successor(#22590,#22587) successor(#22589,#22590) successor(#22587,#23209) +successor(#22583,#22585) successor(#22574,#22583) successor(#22572,#22574) successor(#23207,#22572) diff --git a/javascript/extractor/tests/ts/output/trap/decorators.ts.trap b/javascript/extractor/tests/ts/output/trap/decorators.ts.trap index de7745b6427c..4a29c482a694 100644 --- a/javascript/extractor/tests/ts/output/trap/decorators.ts.trap +++ b/javascript/extractor/tests/ts/output/trap/decorators.ts.trap @@ -638,11 +638,11 @@ exit_cfg_node(#20194,#20132) #20195=@"loc,{#10000},4,41,4,40" locations_default(#20195,#10000,4,41,4,40) hasLocation(#20194,#20195) -successor(#20136,#20142) successor(#20143,#20140) successor(#20142,#20143) successor(#20140,#20138) successor(#20138,#20194) +successor(#20136,#20142) successor(#20192,#20136) successor(#20131,#20132) successor(#20125,#20155) diff --git a/javascript/extractor/tests/ts/output/trap/enum.ts.trap b/javascript/extractor/tests/ts/output/trap/enum.ts.trap index 146d34fb6ccb..c6a36ea1cc09 100644 --- a/javascript/extractor/tests/ts/output/trap/enum.ts.trap +++ b/javascript/extractor/tests/ts/output/trap/enum.ts.trap @@ -1070,9 +1070,9 @@ exit_cfg_node(#20333,#20276) #20334=@"loc,{#10000},7,30,7,29" locations_default(#20334,#10000,7,30,7,29) hasLocation(#20333,#20334) -successor(#20282,#20286) successor(#20286,#20284) successor(#20284,#20333) +successor(#20282,#20286) successor(#20280,#20282) successor(#20331,#20280) successor(#20275,#20274) diff --git a/javascript/extractor/tests/ts/output/trap/exprs.ts.trap b/javascript/extractor/tests/ts/output/trap/exprs.ts.trap index fdd477046a59..02fe28fbb608 100644 --- a/javascript/extractor/tests/ts/output/trap/exprs.ts.trap +++ b/javascript/extractor/tests/ts/output/trap/exprs.ts.trap @@ -324,7 +324,6 @@ hasLocation(#20098,#20096) #20099=* exit_cfg_node(#20099,#20063) hasLocation(#20099,#20060) -successor(#20069,#20074) successor(#20086,#20094) successor(#20090,#20092) successor(#20093,#20088) @@ -340,6 +339,7 @@ successor(#20079,#20078) successor(#20078,#20080) successor(#20077,#20076) successor(#20076,#20079) +successor(#20069,#20074) successor(#20067,#20069) successor(#20098,#20067) successor(#20064,#20063) diff --git a/javascript/extractor/tests/ts/output/trap/hello.ts.trap b/javascript/extractor/tests/ts/output/trap/hello.ts.trap index a1f36955b455..9639e17a662b 100644 --- a/javascript/extractor/tests/ts/output/trap/hello.ts.trap +++ b/javascript/extractor/tests/ts/output/trap/hello.ts.trap @@ -316,13 +316,13 @@ exit_cfg_node(#20097,#20063) #20098=@"loc,{#10000},3,2,3,1" locations_default(#20098,#10000,3,2,3,1) hasLocation(#20097,#20098) -successor(#20071,#20079) successor(#20081,#20075) successor(#20080,#20077) successor(#20079,#20080) successor(#20077,#20081) successor(#20075,#20073) successor(#20073,#20097) +successor(#20071,#20079) successor(#20068,#20071) successor(#20096,#20068) successor(#20065,#20063) diff --git a/javascript/extractor/tests/ts/output/trap/logicalOr.ts.trap b/javascript/extractor/tests/ts/output/trap/logicalOr.ts.trap index abd1cbd3be54..53769c269119 100644 --- a/javascript/extractor/tests/ts/output/trap/logicalOr.ts.trap +++ b/javascript/extractor/tests/ts/output/trap/logicalOr.ts.trap @@ -294,7 +294,6 @@ exit_cfg_node(#20094,#20063) #20095=@"loc,{#10000},4,2,4,1" locations_default(#20095,#10000,4,2,4,1) hasLocation(#20094,#20095) -successor(#20072,#20074) successor(#20082,#20084) successor(#20084,#20086) #20096=* @@ -341,6 +340,7 @@ successor(#20103,#20082) successor(#20079,#20102) successor(#20079,#20103) successor(#20080,#20082) +successor(#20072,#20074) successor(#20070,#20072) successor(#20068,#20070) successor(#20093,#20068) diff --git a/javascript/extractor/tests/ts/output/trap/objectLiteralAccessor.ts.trap b/javascript/extractor/tests/ts/output/trap/objectLiteralAccessor.ts.trap index 4ee94b2a3130..f199fee39549 100644 --- a/javascript/extractor/tests/ts/output/trap/objectLiteralAccessor.ts.trap +++ b/javascript/extractor/tests/ts/output/trap/objectLiteralAccessor.ts.trap @@ -294,9 +294,9 @@ exit_cfg_node(#20092,#20065) #20093=@"loc,{#10000},2,23,2,22" locations_default(#20093,#10000,2,23,2,22) hasLocation(#20092,#20093) -successor(#20068,#20072) successor(#20072,#20070) successor(#20070,#20092) +successor(#20068,#20072) successor(#20090,#20068) successor(#20064,#20065) successor(#20062,#20075) diff --git a/javascript/extractor/tests/ts/output/trap/privateField.ts.trap b/javascript/extractor/tests/ts/output/trap/privateField.ts.trap index 334f1de6f834..55897164df68 100644 --- a/javascript/extractor/tests/ts/output/trap/privateField.ts.trap +++ b/javascript/extractor/tests/ts/output/trap/privateField.ts.trap @@ -256,13 +256,13 @@ exit_cfg_node(#20079,#20054) #20080=@"loc,{#10000},5,3,5,2" locations_default(#20080,#10000,5,3,5,2) hasLocation(#20079,#20080) -successor(#20062,#20064) successor(#20064,#20070) successor(#20073,#20066) successor(#20071,#20068) successor(#20070,#20071) successor(#20068,#20073) successor(#20066,#20079) +successor(#20062,#20064) successor(#20077,#20055) successor(#20059,#20054) successor(#20057,#20048) diff --git a/javascript/extractor/tests/ts/output/trap/tryfinally.ts.trap b/javascript/extractor/tests/ts/output/trap/tryfinally.ts.trap index d3c660c7d6e6..de5d0a2d72c4 100644 --- a/javascript/extractor/tests/ts/output/trap/tryfinally.ts.trap +++ b/javascript/extractor/tests/ts/output/trap/tryfinally.ts.trap @@ -267,16 +267,16 @@ exit_cfg_node(#20086,#20059) #20087=@"loc,{#10000},7,2,7,1" locations_default(#20087,#10000,7,2,7,1) hasLocation(#20086,#20087) -successor(#20065,#20067) successor(#20073,#20075) successor(#20075,#20077) -successor(#20077,#20081) successor(#20081,#20079) successor(#20079,#20086) +successor(#20077,#20081) successor(#20067,#20071) successor(#20072,#20069) successor(#20071,#20072) successor(#20069,#20073) +successor(#20065,#20067) successor(#20085,#20065) successor(#20061,#20059) successor(#20082,#20061) diff --git a/javascript/extractor/tests/ts/output/trap/typeannotations.ts.trap b/javascript/extractor/tests/ts/output/trap/typeannotations.ts.trap index ccedb72e42f5..694684672797 100644 --- a/javascript/extractor/tests/ts/output/trap/typeannotations.ts.trap +++ b/javascript/extractor/tests/ts/output/trap/typeannotations.ts.trap @@ -4603,9 +4603,9 @@ exit_cfg_node(#21451,#21425) #21452=@"loc,{#10000},64,40,64,39" locations_default(#21452,#10000,64,40,64,39) hasLocation(#21451,#21452) -successor(#21432,#21436) successor(#21436,#21434) successor(#21434,#21451) +successor(#21432,#21436) successor(#21428,#21432) successor(#21449,#21428) successor(#21424,#21425) diff --git a/javascript/extractor/tests/variables/output/trap/finally.js.trap b/javascript/extractor/tests/variables/output/trap/finally.js.trap index 0b20c915634b..95849a05bb73 100644 --- a/javascript/extractor/tests/variables/output/trap/finally.js.trap +++ b/javascript/extractor/tests/variables/output/trap/finally.js.trap @@ -298,7 +298,6 @@ exit_cfg_node(#20097,#20065) #20098=@"loc,{#10000},8,2,8,1" locations_default(#20098,#10000,8,2,8,1) hasLocation(#20097,#20098) -successor(#20073,#20075) successor(#20075,#20097) #20099=* entry_cfg_node(#20099,#20075) @@ -310,14 +309,16 @@ exit_cfg_node(#20101,#20075) #20102=@"loc,{#10000},7,4,7,3" locations_default(#20102,#10000,7,4,7,3) hasLocation(#20101,#20102) -successor(#20081,#20083) successor(#20083,#20085) successor(#20085,#20087) -successor(#20087,#20089) successor(#20089,#20092) successor(#20092,#20091) successor(#20091,#20101) +successor(#20087,#20089) +successor(#20081,#20083) successor(#20099,#20081) +successor(#20077,#20075) +successor(#20073,#20077) successor(#20077,#20073) successor(#20071,#20077) successor(#20096,#20071) diff --git a/javascript/extractor/tests/variables/output/trap/switch.js.trap b/javascript/extractor/tests/variables/output/trap/switch.js.trap index 9127e02831a8..7ea8d83f4ee1 100644 --- a/javascript/extractor/tests/variables/output/trap/switch.js.trap +++ b/javascript/extractor/tests/variables/output/trap/switch.js.trap @@ -224,13 +224,13 @@ exit_cfg_node(#20072,#20051) #20073=@"loc,{#10000},6,2,6,1" locations_default(#20073,#10000,6,2,6,1) hasLocation(#20072,#20073) -successor(#20057,#20059) successor(#20059,#20061) successor(#20061,#20062) successor(#20062,#20064) successor(#20064,#20067) successor(#20067,#20066) successor(#20066,#20072) +successor(#20057,#20059) successor(#20071,#20057) successor(#20053,#20051) successor(#20068,#20053) diff --git a/javascript/extractor/tests/variables/output/trap/try.js.trap b/javascript/extractor/tests/variables/output/trap/try.js.trap index 062b593b72d4..4ce7fe8bb584 100644 --- a/javascript/extractor/tests/variables/output/trap/try.js.trap +++ b/javascript/extractor/tests/variables/output/trap/try.js.trap @@ -202,13 +202,13 @@ hasLocation(#20065,#20063) #20066=* exit_cfg_node(#20066,#20045) hasLocation(#20066,#20042) -successor(#20050,#20052) successor(#20052,#20054) -successor(#20054,#20056) successor(#20056,#20059) successor(#20059,#20058) successor(#20058,#20060) +successor(#20054,#20056) successor(#20060,#20066) +successor(#20050,#20052) successor(#20065,#20050) successor(#20046,#20045) successor(#20062,#20046) diff --git a/javascript/extractor/tests/variables/output/trap/variables.js.trap b/javascript/extractor/tests/variables/output/trap/variables.js.trap index ebc1bc00e197..b0c3a1b7e71d 100644 --- a/javascript/extractor/tests/variables/output/trap/variables.js.trap +++ b/javascript/extractor/tests/variables/output/trap/variables.js.trap @@ -699,8 +699,6 @@ hasLocation(#20222,#20223) #20224=* exit_cfg_node(#20224,#20183) hasLocation(#20224,#20143) -successor(#20190,#20192) -successor(#20199,#20201) successor(#20208,#20211) successor(#20211,#20210) #20225=* @@ -717,8 +715,7 @@ successor(#20217,#20227) successor(#20215,#20217) successor(#20225,#20215) successor(#20210,#20224) -successor(#20201,#20203) -successor(#20203,#20208) +successor(#20201,#20208) #20229=* entry_cfg_node(#20229,#20201) #20230=@"loc,{#10000},16,3,16,2" @@ -731,11 +728,14 @@ locations_default(#20232,#10000,16,18,16,17) hasLocation(#20231,#20232) successor(#20206,#20231) successor(#20229,#20206) +successor(#20203,#20201) +successor(#20199,#20203) successor(#20195,#20198) successor(#20198,#20197) successor(#20197,#20199) successor(#20192,#20194) successor(#20194,#20195) +successor(#20190,#20192) successor(#20222,#20190) successor(#20168,#20183) #20233=* @@ -748,17 +748,17 @@ exit_cfg_node(#20235,#20168) #20236=@"loc,{#10000},11,2,11,1" locations_default(#20236,#10000,11,2,11,1) hasLocation(#20235,#20236) -successor(#20174,#20176) successor(#20180,#20182) successor(#20182,#20235) successor(#20176,#20179) successor(#20179,#20178) successor(#20178,#20180) +successor(#20174,#20176) successor(#20233,#20174) -successor(#20162,#20164) successor(#20164,#20167) successor(#20167,#20166) successor(#20166,#20168) +successor(#20162,#20164) successor(#20160,#20161) successor(#20161,#20162) successor(#20158,#20159) From 427e329363af5a526fa2a9bc267b7aad09b21186 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 3 Feb 2025 15:21:41 +0100 Subject: [PATCH 04/11] JS: Bump extractor version string --- javascript/extractor/src/com/semmle/js/extractor/Main.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/extractor/src/com/semmle/js/extractor/Main.java b/javascript/extractor/src/com/semmle/js/extractor/Main.java index 4fbfa1518188..56e4e42dc543 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/Main.java +++ b/javascript/extractor/src/com/semmle/js/extractor/Main.java @@ -42,7 +42,7 @@ public class Main { * A version identifier that should be updated every time the extractor changes in such a way that * it may produce different tuples for the same file under the same {@link ExtractorConfig}. */ - public static final String EXTRACTOR_VERSION = "2025-01-21"; + public static final String EXTRACTOR_VERSION = "2025-02-03"; public static final Pattern NEWLINE = Pattern.compile("\n"); From 1e5885ea1e138fdc653ce7a5a53dd6ff1220c542 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 4 Feb 2025 10:41:47 +0100 Subject: [PATCH 05/11] JS: Remove hoisting code from functions 'buildFunctionBody' no longer needs to handle hoisting, because hoisting now happens when visiting the block statement that is the body of the function. Note that curly-brace functions contain a block statement as their body, not a list of statements. --- .../src/com/semmle/js/extractor/CFGExtractor.java | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/javascript/extractor/src/com/semmle/js/extractor/CFGExtractor.java b/javascript/extractor/src/com/semmle/js/extractor/CFGExtractor.java index 61e44368789b..8f58f3a41853 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/CFGExtractor.java +++ b/javascript/extractor/src/com/semmle/js/extractor/CFGExtractor.java @@ -586,14 +586,6 @@ private static List of(List body) { public static List of(Program p) { return of(p.getBody()); } - - public static List of(IFunction fn) { - Node body = fn.getBody(); - if (body instanceof BlockStatement) return of(((BlockStatement) body).getBody()); - // if the body of the function is missing or is an expression, then there are - // no hoisted functions - return Collections.emptyList(); - } } /** @@ -1096,8 +1088,6 @@ private void buildFunctionBody(IFunction nd) { if (nd.hasRest()) paramsAndDefaults.add((Expression) nd.getRest()); Node entry = getEntryNode(nd); - List fns = HoistedFunDecls.of(nd); - hoistedFns.addAll(fns); // if this is the constructor of a class without a superclass, we need to // initialise all fields before running the body of the constructor @@ -1117,7 +1107,7 @@ private void buildFunctionBody(IFunction nd) { if (firstField != null) fst = Collections.singleton(First.of(firstField)); fst = visitSequence( - nd instanceof FunctionDeclaration ? null : nd.getId(), paramsAndDefaults, fns, fst); + nd instanceof FunctionDeclaration ? null : nd.getId(), paramsAndDefaults, fst); writeSuccessors(entry, fst); this.ctxt.pop(); From 5e109ff45794aaba358c39d1250c54a0e12fbdda Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 4 Feb 2025 10:45:21 +0100 Subject: [PATCH 06/11] JS: Update test output --- .../library-tests/DataFlow/tests.expected | 22 +++++++++---------- .../library-tests/DefUse/DefUsePair.expected | 4 ++-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/javascript/ql/test/library-tests/DataFlow/tests.expected b/javascript/ql/test/library-tests/DataFlow/tests.expected index 3637927d0e25..eb911083a789 100644 --- a/javascript/ql/test/library-tests/DataFlow/tests.expected +++ b/javascript/ql/test/library-tests/DataFlow/tests.expected @@ -16,18 +16,18 @@ basicBlock | arguments.js:1:1:12:4 | exceptional return of (functi ... );\\n})() | arguments.js:1:1:1:0 | entry node of | | arguments.js:1:2:1:1 | this | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | | arguments.js:1:2:12:1 | [function self-reference] functio ... , 3);\\n} | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | -| arguments.js:1:2:12:1 | exceptional return of anonymous function | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | +| arguments.js:1:2:12:1 | exceptional return of anonymous function | arguments.js:2:5:10:5 | functio ... ;\\n } | | arguments.js:1:2:12:1 | functio ... , 3);\\n} | arguments.js:1:1:1:0 | entry node of | -| arguments.js:1:2:12:1 | return of anonymous function | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | +| arguments.js:1:2:12:1 | return of anonymous function | arguments.js:2:5:10:5 | functio ... ;\\n } | | arguments.js:2:5:2:4 | this | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:2:5:2:5 | arguments | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:2:5:10:5 | 'arguments' object of function f | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:2:5:10:5 | [function self-reference] functio ... ;\\n } | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:2:5:10:5 | exceptional return of function f | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | -| arguments.js:2:5:10:5 | functio ... ;\\n } | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | +| arguments.js:2:5:10:5 | functio ... ;\\n } | arguments.js:2:5:10:5 | functio ... ;\\n } | | arguments.js:2:5:10:5 | return of function f | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | -| arguments.js:2:14:2:14 | f | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | -| arguments.js:2:14:2:14 | f | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | +| arguments.js:2:14:2:14 | f | arguments.js:2:14:2:14 | f | +| arguments.js:2:14:2:14 | f | arguments.js:2:14:2:14 | f | | arguments.js:2:16:2:16 | x | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:2:16:2:16 | x | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:3:13:3:20 | firstArg | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | @@ -61,12 +61,12 @@ basicBlock | arguments.js:9:27:9:35 | arguments | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:9:27:9:38 | arguments[0] | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:9:37:9:37 | 0 | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | -| arguments.js:11:5:11:5 | f | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | -| arguments.js:11:5:11:14 | exceptional return of f(1, 2, 3) | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | -| arguments.js:11:5:11:14 | f(1, 2, 3) | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | -| arguments.js:11:7:11:7 | 1 | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | -| arguments.js:11:10:11:10 | 2 | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | -| arguments.js:11:13:11:13 | 3 | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | +| arguments.js:11:5:11:5 | f | arguments.js:2:5:10:5 | functio ... ;\\n } | +| arguments.js:11:5:11:14 | exceptional return of f(1, 2, 3) | arguments.js:2:5:10:5 | functio ... ;\\n } | +| arguments.js:11:5:11:14 | f(1, 2, 3) | arguments.js:2:5:10:5 | functio ... ;\\n } | +| arguments.js:11:7:11:7 | 1 | arguments.js:2:5:10:5 | functio ... ;\\n } | +| arguments.js:11:10:11:10 | 2 | arguments.js:2:5:10:5 | functio ... ;\\n } | +| arguments.js:11:13:11:13 | 3 | arguments.js:2:5:10:5 | functio ... ;\\n } | | eval.js:1:1:1:0 | this | eval.js:1:1:1:0 | entry node of | | eval.js:1:1:1:0 | this | eval.js:1:1:1:0 | entry node of functio ... eval`\\n} | | eval.js:1:1:5:1 | [function self-reference] functio ... eval`\\n} | eval.js:1:1:1:0 | entry node of functio ... eval`\\n} | diff --git a/javascript/ql/test/library-tests/DefUse/DefUsePair.expected b/javascript/ql/test/library-tests/DefUse/DefUsePair.expected index caaf440a778c..f029dd71b6cd 100644 --- a/javascript/ql/test/library-tests/DefUse/DefUsePair.expected +++ b/javascript/ql/test/library-tests/DefUse/DefUsePair.expected @@ -11,8 +11,8 @@ | fundecls.js:12:12:12:12 | def@12:12 | fundecls.js:10:3:10:3 | f | | fundecls.js:18:12:18:12 | def@18:12 | fundecls.js:17:3:17:3 | f | | fundecls.js:23:12:23:12 | def@23:12 | fundecls.js:24:3:24:3 | f | -| fundecls.js:27:2:27:2 | implicitInit@27:2 | fundecls.js:28:3:28:3 | f | -| fundecls.js:34:12:34:12 | def@34:12 | fundecls.js:35:3:35:3 | f | +| fundecls.js:30:12:30:12 | def@30:12 | fundecls.js:28:3:28:3 | f | +| fundecls.js:36:12:36:12 | def@36:12 | fundecls.js:35:3:35:3 | f | | fundecls.js:39:11:39:11 | def@39:11 | fundecls.js:40:7:40:7 | x | | fundecls.js:45:3:45:3 | phi@45:3 | fundecls.js:45:3:45:3 | f | | fundecls.js:48:11:48:11 | def@48:11 | fundecls.js:50:7:50:7 | x | From d22268e119dd95453a9786509a4fc61039903056 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 4 Feb 2025 10:46:57 +0100 Subject: [PATCH 07/11] JS: Update TRAP again The extra successor edge was due to visiting hoisted function declaration IDs multiple times, which has now been fixed. --- .../extractor/tests/variables/output/trap/finally.js.trap | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/javascript/extractor/tests/variables/output/trap/finally.js.trap b/javascript/extractor/tests/variables/output/trap/finally.js.trap index 95849a05bb73..7d6511265298 100644 --- a/javascript/extractor/tests/variables/output/trap/finally.js.trap +++ b/javascript/extractor/tests/variables/output/trap/finally.js.trap @@ -319,8 +319,7 @@ successor(#20081,#20083) successor(#20099,#20081) successor(#20077,#20075) successor(#20073,#20077) -successor(#20077,#20073) -successor(#20071,#20077) +successor(#20071,#20073) successor(#20096,#20071) successor(#20067,#20065) successor(#20093,#20067) From 80824cfdc740b9e2b2b69765d2bb236cd65a0e1e Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 4 Feb 2025 12:12:41 +0100 Subject: [PATCH 08/11] JS: Benign test output changes --- .../library-tests/DataFlow/tests.expected | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/javascript/ql/test/library-tests/DataFlow/tests.expected b/javascript/ql/test/library-tests/DataFlow/tests.expected index eb911083a789..3637927d0e25 100644 --- a/javascript/ql/test/library-tests/DataFlow/tests.expected +++ b/javascript/ql/test/library-tests/DataFlow/tests.expected @@ -16,18 +16,18 @@ basicBlock | arguments.js:1:1:12:4 | exceptional return of (functi ... );\\n})() | arguments.js:1:1:1:0 | entry node of | | arguments.js:1:2:1:1 | this | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | | arguments.js:1:2:12:1 | [function self-reference] functio ... , 3);\\n} | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | -| arguments.js:1:2:12:1 | exceptional return of anonymous function | arguments.js:2:5:10:5 | functio ... ;\\n } | +| arguments.js:1:2:12:1 | exceptional return of anonymous function | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | | arguments.js:1:2:12:1 | functio ... , 3);\\n} | arguments.js:1:1:1:0 | entry node of | -| arguments.js:1:2:12:1 | return of anonymous function | arguments.js:2:5:10:5 | functio ... ;\\n } | +| arguments.js:1:2:12:1 | return of anonymous function | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | | arguments.js:2:5:2:4 | this | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:2:5:2:5 | arguments | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:2:5:10:5 | 'arguments' object of function f | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:2:5:10:5 | [function self-reference] functio ... ;\\n } | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:2:5:10:5 | exceptional return of function f | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | -| arguments.js:2:5:10:5 | functio ... ;\\n } | arguments.js:2:5:10:5 | functio ... ;\\n } | +| arguments.js:2:5:10:5 | functio ... ;\\n } | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | | arguments.js:2:5:10:5 | return of function f | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | -| arguments.js:2:14:2:14 | f | arguments.js:2:14:2:14 | f | -| arguments.js:2:14:2:14 | f | arguments.js:2:14:2:14 | f | +| arguments.js:2:14:2:14 | f | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | +| arguments.js:2:14:2:14 | f | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | | arguments.js:2:16:2:16 | x | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:2:16:2:16 | x | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:3:13:3:20 | firstArg | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | @@ -61,12 +61,12 @@ basicBlock | arguments.js:9:27:9:35 | arguments | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:9:27:9:38 | arguments[0] | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:9:37:9:37 | 0 | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | -| arguments.js:11:5:11:5 | f | arguments.js:2:5:10:5 | functio ... ;\\n } | -| arguments.js:11:5:11:14 | exceptional return of f(1, 2, 3) | arguments.js:2:5:10:5 | functio ... ;\\n } | -| arguments.js:11:5:11:14 | f(1, 2, 3) | arguments.js:2:5:10:5 | functio ... ;\\n } | -| arguments.js:11:7:11:7 | 1 | arguments.js:2:5:10:5 | functio ... ;\\n } | -| arguments.js:11:10:11:10 | 2 | arguments.js:2:5:10:5 | functio ... ;\\n } | -| arguments.js:11:13:11:13 | 3 | arguments.js:2:5:10:5 | functio ... ;\\n } | +| arguments.js:11:5:11:5 | f | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | +| arguments.js:11:5:11:14 | exceptional return of f(1, 2, 3) | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | +| arguments.js:11:5:11:14 | f(1, 2, 3) | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | +| arguments.js:11:7:11:7 | 1 | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | +| arguments.js:11:10:11:10 | 2 | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | +| arguments.js:11:13:11:13 | 3 | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | | eval.js:1:1:1:0 | this | eval.js:1:1:1:0 | entry node of | | eval.js:1:1:1:0 | this | eval.js:1:1:1:0 | entry node of functio ... eval`\\n} | | eval.js:1:1:5:1 | [function self-reference] functio ... eval`\\n} | eval.js:1:1:1:0 | entry node of functio ... eval`\\n} | From 5613661a482a422076cd4ee127875e8e08c594d7 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 4 Feb 2025 14:02:51 +0100 Subject: [PATCH 09/11] JS: Update another TRAP file --- javascript/extractor/tests/jsx/output/trap/repro1.jsx.trap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/extractor/tests/jsx/output/trap/repro1.jsx.trap b/javascript/extractor/tests/jsx/output/trap/repro1.jsx.trap index c1cb84747511..387b6e4d0ad8 100644 --- a/javascript/extractor/tests/jsx/output/trap/repro1.jsx.trap +++ b/javascript/extractor/tests/jsx/output/trap/repro1.jsx.trap @@ -351,7 +351,6 @@ exit_cfg_node(#20114,#20075) #20115=@"loc,{#10000},4,2,4,1" locations_default(#20115,#10000,4,2,4,1) hasLocation(#20114,#20115) -successor(#20080,#20084) successor(#20094,#20096) successor(#20096,#20097) successor(#20097,#20099) @@ -378,6 +377,7 @@ successor(#20091,#20089) successor(#20089,#20086) successor(#20088,#20091) successor(#20086,#20094) +successor(#20080,#20084) successor(#20113,#20080) successor(#20077,#20075) successor(#20110,#20077) From 6207e39b5f6b848f8da318790551a4fe54a2442d Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 6 Feb 2025 09:58:24 +0100 Subject: [PATCH 10/11] JS: Change note --- javascript/ql/src/change-notes/2025-02-06-hoist-in-block.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 javascript/ql/src/change-notes/2025-02-06-hoist-in-block.md diff --git a/javascript/ql/src/change-notes/2025-02-06-hoist-in-block.md b/javascript/ql/src/change-notes/2025-02-06-hoist-in-block.md new file mode 100644 index 000000000000..9fa966e23ce3 --- /dev/null +++ b/javascript/ql/src/change-notes/2025-02-06-hoist-in-block.md @@ -0,0 +1,6 @@ +--- +category: fix +--- +* Fixed a rare issue that would occur when a function declaration inside a block statement was referenced before it was declared. + Such code is reliant on legacy web semantics, which is non-standard but nevertheless implemented by most engines. + CodeQL now takes legacy web semantics into account and resolves references to these functions correctly. From 6ae06aed9e96ae85f22b1fb70580de3265482fb2 Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 6 Feb 2025 10:03:28 +0100 Subject: [PATCH 11/11] Update javascript/extractor/src/com/semmle/js/extractor/CFGExtractor.java Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../extractor/src/com/semmle/js/extractor/CFGExtractor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/extractor/src/com/semmle/js/extractor/CFGExtractor.java b/javascript/extractor/src/com/semmle/js/extractor/CFGExtractor.java index 8f58f3a41853..72dac30c933b 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/CFGExtractor.java +++ b/javascript/extractor/src/com/semmle/js/extractor/CFGExtractor.java @@ -1247,7 +1247,7 @@ public Void visit(Literal nd, SuccessorInfo i) { public Void visit(BlockStatement nd, SuccessorInfo i) { // Hoist function declarations in a block statement to the top of the block. // This reflects non-standard behaviour implemented by most engines. - // See also: EcmaScript "B.3.2 Block-Level Function Declarations Web Legacy Compatibility Semantics". + // See also: ECMAScript "B.3.2 Block-Level Function Declarations Web Legacy Compatibility Semantics". List hoisted = HoistedFunDecls.of(nd.getBody()); hoistedFns.addAll(hoisted); writeSuccessors(nd, visitSequence(hoisted, nd.getBody(), i.getAllSuccessors()));