Merge pull request #18661 from asgerf/js/hoist-in-block

JS: Hoist function declarations to the top of a block statement
This commit is contained in:
Asger F
2025-02-06 12:38:51 +01:00
committed by GitHub
72 changed files with 159 additions and 135 deletions

View File

@@ -586,14 +586,6 @@ public class CFGExtractor {
public static List<Identifier> of(Program p) {
return of(p.getBody());
}
public static List<Identifier> 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 @@ public class CFGExtractor {
if (nd.hasRest()) paramsAndDefaults.add((Expression) nd.getRest());
Node entry = getEntryNode(nd);
List<Identifier> 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 @@ public class CFGExtractor {
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();
@@ -1255,9 +1245,12 @@ public class CFGExtractor {
@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<Identifier> hoisted = HoistedFunDecls.of(nd.getBody());
hoistedFns.addAll(hoisted);
writeSuccessors(nd, visitSequence(hoisted, nd.getBody(), i.getAllSuccessors()));
return null;
}

View File

@@ -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");

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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")

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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=*

View File

@@ -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")

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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,16 +309,17 @@ 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,#20073)
successor(#20071,#20077)
successor(#20077,#20075)
successor(#20073,#20077)
successor(#20071,#20073)
successor(#20096,#20071)
successor(#20067,#20065)
successor(#20093,#20067)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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.

View File

@@ -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() {}
}
}

View File

@@ -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 |