added support for ES2021 assignment operators

This commit is contained in:
Erik Krogh Kristensen 2020-09-17 12:42:37 +02:00
Родитель d867172d27
Коммит 87d4e13584
4 изменённых файлов: 659 добавлений и 6 удалений

Просмотреть файл

@ -531,9 +531,14 @@ public class Parser {
int next2 = charAt(this.pos + 2); int next2 = charAt(this.pos + 2);
if (this.options.esnext()) { if (this.options.esnext()) {
if (next == '.' && !('0' <= next2 && next2 <= '9')) // '?.', but not '?.X' where X is a digit if (next == '.' && !('0' <= next2 && next2 <= '9')) // '?.', but not '?.X' where X is a digit
return this.finishOp(TokenType.questiondot, 2); return this.finishOp(TokenType.questiondot, 2);
if (next == '?') // '??' if (next == '?') { // '??'
return this.finishOp(TokenType.questionquestion, 2); if (next2 == '=') { // ??=
return this.finishOp(TokenType.assign, 3);
}
return this.finishOp(TokenType.questionquestion, 2);
}
} }
return this.finishOp(TokenType.question, 1); return this.finishOp(TokenType.question, 1);
} }
@ -566,8 +571,11 @@ public class Parser {
private Token readToken_pipe_amp(int code) { // '|&' private Token readToken_pipe_amp(int code) { // '|&'
int next = charAt(this.pos + 1); int next = charAt(this.pos + 1);
if (next == code) int next2 = charAt(this.pos + 2);
if (next == code) { // && ||
if (next2 == 61) return this.finishOp(TokenType.assign, 3); // &&= ||=
return this.finishOp(code == 124 ? TokenType.logicalOR : TokenType.logicalAND, 2); return this.finishOp(code == 124 ? TokenType.logicalOR : TokenType.logicalAND, 2);
}
if (next == 61) return this.finishOp(TokenType.assign, 2); if (next == 61) return this.finishOp(TokenType.assign, 2);
return this.finishOp(code == 124 ? TokenType.bitwiseOR : TokenType.bitwiseAND, 1); return this.finishOp(code == 124 ? TokenType.bitwiseOR : TokenType.bitwiseAND, 1);
} }
@ -709,8 +717,8 @@ public class Parser {
case 42: // '%*' case 42: // '%*'
return this.readToken_mult_modulo_exp(code); return this.readToken_mult_modulo_exp(code);
case 124: case 124: // '|'
case 38: // '|&' case 38: // '&'
return this.readToken_pipe_amp(code); return this.readToken_pipe_amp(code);
case 94: // '^' case 94: // '^'

Просмотреть файл

@ -0,0 +1,9 @@
var x = 1;
var y = 2;
var foo = x && y;
var bar = x &&= y;
console.log(x); // 2
x &&= y;
x ||= y;
x ??= y;

Просмотреть файл

@ -0,0 +1,3 @@
{
"experimental": true
}

Просмотреть файл

@ -0,0 +1,633 @@
#10000=@"/assign.js;sourcefile"
files(#10000,"/assign.js","assign","js",0)
#10001=@"/;folder"
folders(#10001,"/","")
containerparent(#10001,#10000)
#10002=@"loc,{#10000},0,0,0,0"
locations_default(#10002,#10000,0,0,0,0)
hasLocation(#10000,#10002)
#20000=@"global_scope"
scopes(#20000,0)
#20001=@"script;{#10000},1,1"
#20002=*
comments(#20002,0,#20001," 2","// 2")
#20003=@"loc,{#10000},5,17,5,20"
locations_default(#20003,#10000,5,17,5,20)
hasLocation(#20002,#20003)
#20004=*
lines(#20004,#20001,"var x = 1;","
")
#20005=@"loc,{#10000},1,1,1,10"
locations_default(#20005,#10000,1,1,1,10)
hasLocation(#20004,#20005)
#20006=*
lines(#20006,#20001,"var y = 2;","
")
#20007=@"loc,{#10000},2,1,2,10"
locations_default(#20007,#10000,2,1,2,10)
hasLocation(#20006,#20007)
#20008=*
lines(#20008,#20001,"var foo = x && y;","
")
#20009=@"loc,{#10000},3,1,3,17"
locations_default(#20009,#10000,3,1,3,17)
hasLocation(#20008,#20009)
#20010=*
lines(#20010,#20001,"var bar = x &&= y;","
")
#20011=@"loc,{#10000},4,1,4,18"
locations_default(#20011,#10000,4,1,4,18)
hasLocation(#20010,#20011)
#20012=*
lines(#20012,#20001,"console.log(x); // 2","
")
#20013=@"loc,{#10000},5,1,5,20"
locations_default(#20013,#10000,5,1,5,20)
hasLocation(#20012,#20013)
#20014=*
lines(#20014,#20001,"","
")
#20015=@"loc,{#10000},6,1,6,0"
locations_default(#20015,#10000,6,1,6,0)
hasLocation(#20014,#20015)
#20016=*
lines(#20016,#20001,"x &&= y;","
")
#20017=@"loc,{#10000},7,1,7,8"
locations_default(#20017,#10000,7,1,7,8)
hasLocation(#20016,#20017)
#20018=*
lines(#20018,#20001,"x ||= y;","
")
#20019=@"loc,{#10000},8,1,8,8"
locations_default(#20019,#10000,8,1,8,8)
hasLocation(#20018,#20019)
#20020=*
lines(#20020,#20001,"x ??= y;","
")
#20021=@"loc,{#10000},9,1,9,8"
locations_default(#20021,#10000,9,1,9,8)
hasLocation(#20020,#20021)
numlines(#20001,9,8,1)
#20022=*
tokeninfo(#20022,7,#20001,0,"var")
#20023=@"loc,{#10000},1,1,1,3"
locations_default(#20023,#10000,1,1,1,3)
hasLocation(#20022,#20023)
#20024=*
tokeninfo(#20024,6,#20001,1,"x")
#20025=@"loc,{#10000},1,5,1,5"
locations_default(#20025,#10000,1,5,1,5)
hasLocation(#20024,#20025)
#20026=*
tokeninfo(#20026,8,#20001,2,"=")
#20027=@"loc,{#10000},1,7,1,7"
locations_default(#20027,#10000,1,7,1,7)
hasLocation(#20026,#20027)
#20028=*
tokeninfo(#20028,3,#20001,3,"1")
#20029=@"loc,{#10000},1,9,1,9"
locations_default(#20029,#10000,1,9,1,9)
hasLocation(#20028,#20029)
#20030=*
tokeninfo(#20030,8,#20001,4,";")
#20031=@"loc,{#10000},1,10,1,10"
locations_default(#20031,#10000,1,10,1,10)
hasLocation(#20030,#20031)
#20032=*
tokeninfo(#20032,7,#20001,5,"var")
#20033=@"loc,{#10000},2,1,2,3"
locations_default(#20033,#10000,2,1,2,3)
hasLocation(#20032,#20033)
#20034=*
tokeninfo(#20034,6,#20001,6,"y")
#20035=@"loc,{#10000},2,5,2,5"
locations_default(#20035,#10000,2,5,2,5)
hasLocation(#20034,#20035)
#20036=*
tokeninfo(#20036,8,#20001,7,"=")
#20037=@"loc,{#10000},2,7,2,7"
locations_default(#20037,#10000,2,7,2,7)
hasLocation(#20036,#20037)
#20038=*
tokeninfo(#20038,3,#20001,8,"2")
#20039=@"loc,{#10000},2,9,2,9"
locations_default(#20039,#10000,2,9,2,9)
hasLocation(#20038,#20039)
#20040=*
tokeninfo(#20040,8,#20001,9,";")
#20041=@"loc,{#10000},2,10,2,10"
locations_default(#20041,#10000,2,10,2,10)
hasLocation(#20040,#20041)
#20042=*
tokeninfo(#20042,7,#20001,10,"var")
#20043=@"loc,{#10000},3,1,3,3"
locations_default(#20043,#10000,3,1,3,3)
hasLocation(#20042,#20043)
#20044=*
tokeninfo(#20044,6,#20001,11,"foo")
#20045=@"loc,{#10000},3,5,3,7"
locations_default(#20045,#10000,3,5,3,7)
hasLocation(#20044,#20045)
#20046=*
tokeninfo(#20046,8,#20001,12,"=")
#20047=@"loc,{#10000},3,9,3,9"
locations_default(#20047,#10000,3,9,3,9)
hasLocation(#20046,#20047)
#20048=*
tokeninfo(#20048,6,#20001,13,"x")
#20049=@"loc,{#10000},3,11,3,11"
locations_default(#20049,#10000,3,11,3,11)
hasLocation(#20048,#20049)
#20050=*
tokeninfo(#20050,8,#20001,14,"&&")
#20051=@"loc,{#10000},3,13,3,14"
locations_default(#20051,#10000,3,13,3,14)
hasLocation(#20050,#20051)
#20052=*
tokeninfo(#20052,6,#20001,15,"y")
#20053=@"loc,{#10000},3,16,3,16"
locations_default(#20053,#10000,3,16,3,16)
hasLocation(#20052,#20053)
#20054=*
tokeninfo(#20054,8,#20001,16,";")
#20055=@"loc,{#10000},3,17,3,17"
locations_default(#20055,#10000,3,17,3,17)
hasLocation(#20054,#20055)
#20056=*
tokeninfo(#20056,7,#20001,17,"var")
#20057=@"loc,{#10000},4,1,4,3"
locations_default(#20057,#10000,4,1,4,3)
hasLocation(#20056,#20057)
#20058=*
tokeninfo(#20058,6,#20001,18,"bar")
#20059=@"loc,{#10000},4,5,4,7"
locations_default(#20059,#10000,4,5,4,7)
hasLocation(#20058,#20059)
#20060=*
tokeninfo(#20060,8,#20001,19,"=")
#20061=@"loc,{#10000},4,9,4,9"
locations_default(#20061,#10000,4,9,4,9)
hasLocation(#20060,#20061)
#20062=*
tokeninfo(#20062,6,#20001,20,"x")
#20063=@"loc,{#10000},4,11,4,11"
locations_default(#20063,#10000,4,11,4,11)
hasLocation(#20062,#20063)
#20064=*
tokeninfo(#20064,8,#20001,21,"&&=")
#20065=@"loc,{#10000},4,13,4,15"
locations_default(#20065,#10000,4,13,4,15)
hasLocation(#20064,#20065)
#20066=*
tokeninfo(#20066,6,#20001,22,"y")
#20067=@"loc,{#10000},4,17,4,17"
locations_default(#20067,#10000,4,17,4,17)
hasLocation(#20066,#20067)
#20068=*
tokeninfo(#20068,8,#20001,23,";")
#20069=@"loc,{#10000},4,18,4,18"
locations_default(#20069,#10000,4,18,4,18)
hasLocation(#20068,#20069)
#20070=*
tokeninfo(#20070,6,#20001,24,"console")
#20071=@"loc,{#10000},5,1,5,7"
locations_default(#20071,#10000,5,1,5,7)
hasLocation(#20070,#20071)
#20072=*
tokeninfo(#20072,8,#20001,25,".")
#20073=@"loc,{#10000},5,8,5,8"
locations_default(#20073,#10000,5,8,5,8)
hasLocation(#20072,#20073)
#20074=*
tokeninfo(#20074,6,#20001,26,"log")
#20075=@"loc,{#10000},5,9,5,11"
locations_default(#20075,#10000,5,9,5,11)
hasLocation(#20074,#20075)
#20076=*
tokeninfo(#20076,8,#20001,27,"(")
#20077=@"loc,{#10000},5,12,5,12"
locations_default(#20077,#10000,5,12,5,12)
hasLocation(#20076,#20077)
#20078=*
tokeninfo(#20078,6,#20001,28,"x")
#20079=@"loc,{#10000},5,13,5,13"
locations_default(#20079,#10000,5,13,5,13)
hasLocation(#20078,#20079)
#20080=*
tokeninfo(#20080,8,#20001,29,")")
#20081=@"loc,{#10000},5,14,5,14"
locations_default(#20081,#10000,5,14,5,14)
hasLocation(#20080,#20081)
#20082=*
tokeninfo(#20082,8,#20001,30,";")
#20083=@"loc,{#10000},5,15,5,15"
locations_default(#20083,#10000,5,15,5,15)
hasLocation(#20082,#20083)
#20084=*
tokeninfo(#20084,6,#20001,31,"x")
#20085=@"loc,{#10000},7,1,7,1"
locations_default(#20085,#10000,7,1,7,1)
hasLocation(#20084,#20085)
next_token(#20002,#20084)
#20086=*
tokeninfo(#20086,8,#20001,32,"&&=")
#20087=@"loc,{#10000},7,3,7,5"
locations_default(#20087,#10000,7,3,7,5)
hasLocation(#20086,#20087)
#20088=*
tokeninfo(#20088,6,#20001,33,"y")
#20089=@"loc,{#10000},7,7,7,7"
locations_default(#20089,#10000,7,7,7,7)
hasLocation(#20088,#20089)
#20090=*
tokeninfo(#20090,8,#20001,34,";")
#20091=@"loc,{#10000},7,8,7,8"
locations_default(#20091,#10000,7,8,7,8)
hasLocation(#20090,#20091)
#20092=*
tokeninfo(#20092,6,#20001,35,"x")
#20093=@"loc,{#10000},8,1,8,1"
locations_default(#20093,#10000,8,1,8,1)
hasLocation(#20092,#20093)
#20094=*
tokeninfo(#20094,8,#20001,36,"||=")
#20095=@"loc,{#10000},8,3,8,5"
locations_default(#20095,#10000,8,3,8,5)
hasLocation(#20094,#20095)
#20096=*
tokeninfo(#20096,6,#20001,37,"y")
#20097=@"loc,{#10000},8,7,8,7"
locations_default(#20097,#10000,8,7,8,7)
hasLocation(#20096,#20097)
#20098=*
tokeninfo(#20098,8,#20001,38,";")
#20099=@"loc,{#10000},8,8,8,8"
locations_default(#20099,#10000,8,8,8,8)
hasLocation(#20098,#20099)
#20100=*
tokeninfo(#20100,6,#20001,39,"x")
#20101=@"loc,{#10000},9,1,9,1"
locations_default(#20101,#10000,9,1,9,1)
hasLocation(#20100,#20101)
#20102=*
tokeninfo(#20102,8,#20001,40,"??=")
#20103=@"loc,{#10000},9,3,9,5"
locations_default(#20103,#10000,9,3,9,5)
hasLocation(#20102,#20103)
#20104=*
tokeninfo(#20104,6,#20001,41,"y")
#20105=@"loc,{#10000},9,7,9,7"
locations_default(#20105,#10000,9,7,9,7)
hasLocation(#20104,#20105)
#20106=*
tokeninfo(#20106,8,#20001,42,";")
#20107=@"loc,{#10000},9,8,9,8"
locations_default(#20107,#10000,9,8,9,8)
hasLocation(#20106,#20107)
#20108=*
tokeninfo(#20108,0,#20001,43,"")
#20109=@"loc,{#10000},10,1,10,0"
locations_default(#20109,#10000,10,1,10,0)
hasLocation(#20108,#20109)
toplevels(#20001,0)
#20110=@"loc,{#10000},1,1,10,0"
locations_default(#20110,#10000,1,1,10,0)
hasLocation(#20001,#20110)
#20111=@"var;{x};{#20000}"
variables(#20111,"x",#20000)
#20112=@"var;{y};{#20000}"
variables(#20112,"y",#20000)
#20113=@"var;{foo};{#20000}"
variables(#20113,"foo",#20000)
#20114=@"var;{bar};{#20000}"
variables(#20114,"bar",#20000)
#20115=*
stmts(#20115,18,#20001,0,"var x = 1;")
hasLocation(#20115,#20005)
stmt_containers(#20115,#20001)
#20116=*
exprs(#20116,64,#20115,0,"x = 1")
#20117=@"loc,{#10000},1,5,1,9"
locations_default(#20117,#10000,1,5,1,9)
hasLocation(#20116,#20117)
enclosing_stmt(#20116,#20115)
expr_containers(#20116,#20001)
#20118=*
exprs(#20118,78,#20116,0,"x")
hasLocation(#20118,#20025)
enclosing_stmt(#20118,#20115)
expr_containers(#20118,#20001)
literals("x","x",#20118)
decl(#20118,#20111)
#20119=*
exprs(#20119,3,#20116,1,"1")
hasLocation(#20119,#20029)
enclosing_stmt(#20119,#20115)
expr_containers(#20119,#20001)
literals("1","1",#20119)
#20120=*
stmts(#20120,18,#20001,1,"var y = 2;")
hasLocation(#20120,#20007)
stmt_containers(#20120,#20001)
#20121=*
exprs(#20121,64,#20120,0,"y = 2")
#20122=@"loc,{#10000},2,5,2,9"
locations_default(#20122,#10000,2,5,2,9)
hasLocation(#20121,#20122)
enclosing_stmt(#20121,#20120)
expr_containers(#20121,#20001)
#20123=*
exprs(#20123,78,#20121,0,"y")
hasLocation(#20123,#20035)
enclosing_stmt(#20123,#20120)
expr_containers(#20123,#20001)
literals("y","y",#20123)
decl(#20123,#20112)
#20124=*
exprs(#20124,3,#20121,1,"2")
hasLocation(#20124,#20039)
enclosing_stmt(#20124,#20120)
expr_containers(#20124,#20001)
literals("2","2",#20124)
#20125=*
stmts(#20125,18,#20001,2,"var foo = x && y;")
hasLocation(#20125,#20009)
stmt_containers(#20125,#20001)
#20126=*
exprs(#20126,64,#20125,0,"foo = x && y")
#20127=@"loc,{#10000},3,5,3,16"
locations_default(#20127,#10000,3,5,3,16)
hasLocation(#20126,#20127)
enclosing_stmt(#20126,#20125)
expr_containers(#20126,#20001)
#20128=*
exprs(#20128,78,#20126,0,"foo")
hasLocation(#20128,#20045)
enclosing_stmt(#20128,#20125)
expr_containers(#20128,#20001)
literals("foo","foo",#20128)
decl(#20128,#20113)
#20129=*
exprs(#20129,44,#20126,1,"x && y")
#20130=@"loc,{#10000},3,11,3,16"
locations_default(#20130,#10000,3,11,3,16)
hasLocation(#20129,#20130)
enclosing_stmt(#20129,#20125)
expr_containers(#20129,#20001)
#20131=*
exprs(#20131,79,#20129,0,"x")
hasLocation(#20131,#20049)
enclosing_stmt(#20131,#20125)
expr_containers(#20131,#20001)
literals("x","x",#20131)
bind(#20131,#20111)
#20132=*
exprs(#20132,79,#20129,1,"y")
hasLocation(#20132,#20053)
enclosing_stmt(#20132,#20125)
expr_containers(#20132,#20001)
literals("y","y",#20132)
bind(#20132,#20112)
#20133=*
stmts(#20133,18,#20001,3,"var bar = x &&= y;")
hasLocation(#20133,#20011)
stmt_containers(#20133,#20001)
#20134=*
exprs(#20134,64,#20133,0,"bar = x &&= y")
#20135=@"loc,{#10000},4,5,4,17"
locations_default(#20135,#10000,4,5,4,17)
hasLocation(#20134,#20135)
enclosing_stmt(#20134,#20133)
expr_containers(#20134,#20001)
#20136=*
exprs(#20136,78,#20134,0,"bar")
hasLocation(#20136,#20059)
enclosing_stmt(#20136,#20133)
expr_containers(#20136,#20001)
literals("bar","bar",#20136)
decl(#20136,#20114)
#20137=*
exprs(#20137,116,#20134,1,"x &&= y")
#20138=@"loc,{#10000},4,11,4,17"
locations_default(#20138,#10000,4,11,4,17)
hasLocation(#20137,#20138)
enclosing_stmt(#20137,#20133)
expr_containers(#20137,#20001)
#20139=*
exprs(#20139,79,#20137,0,"x")
hasLocation(#20139,#20063)
enclosing_stmt(#20139,#20133)
expr_containers(#20139,#20001)
literals("x","x",#20139)
bind(#20139,#20111)
#20140=*
exprs(#20140,79,#20137,1,"y")
hasLocation(#20140,#20067)
enclosing_stmt(#20140,#20133)
expr_containers(#20140,#20001)
literals("y","y",#20140)
bind(#20140,#20112)
#20141=*
stmts(#20141,2,#20001,4,"console.log(x);")
#20142=@"loc,{#10000},5,1,5,15"
locations_default(#20142,#10000,5,1,5,15)
hasLocation(#20141,#20142)
stmt_containers(#20141,#20001)
#20143=*
exprs(#20143,13,#20141,0,"console.log(x)")
#20144=@"loc,{#10000},5,1,5,14"
locations_default(#20144,#10000,5,1,5,14)
hasLocation(#20143,#20144)
enclosing_stmt(#20143,#20141)
expr_containers(#20143,#20001)
#20145=*
exprs(#20145,14,#20143,-1,"console.log")
#20146=@"loc,{#10000},5,1,5,11"
locations_default(#20146,#10000,5,1,5,11)
hasLocation(#20145,#20146)
enclosing_stmt(#20145,#20141)
expr_containers(#20145,#20001)
#20147=*
exprs(#20147,79,#20145,0,"console")
hasLocation(#20147,#20071)
enclosing_stmt(#20147,#20141)
expr_containers(#20147,#20001)
literals("console","console",#20147)
#20148=@"var;{console};{#20000}"
variables(#20148,"console",#20000)
bind(#20147,#20148)
#20149=*
exprs(#20149,0,#20145,1,"log")
hasLocation(#20149,#20075)
enclosing_stmt(#20149,#20141)
expr_containers(#20149,#20001)
literals("log","log",#20149)
#20150=*
exprs(#20150,79,#20143,0,"x")
hasLocation(#20150,#20079)
enclosing_stmt(#20150,#20141)
expr_containers(#20150,#20001)
literals("x","x",#20150)
bind(#20150,#20111)
#20151=*
stmts(#20151,2,#20001,5,"x &&= y;")
hasLocation(#20151,#20017)
stmt_containers(#20151,#20001)
#20152=*
exprs(#20152,116,#20151,0,"x &&= y")
#20153=@"loc,{#10000},7,1,7,7"
locations_default(#20153,#10000,7,1,7,7)
hasLocation(#20152,#20153)
enclosing_stmt(#20152,#20151)
expr_containers(#20152,#20001)
#20154=*
exprs(#20154,79,#20152,0,"x")
hasLocation(#20154,#20085)
enclosing_stmt(#20154,#20151)
expr_containers(#20154,#20001)
literals("x","x",#20154)
bind(#20154,#20111)
#20155=*
exprs(#20155,79,#20152,1,"y")
hasLocation(#20155,#20089)
enclosing_stmt(#20155,#20151)
expr_containers(#20155,#20001)
literals("y","y",#20155)
bind(#20155,#20112)
#20156=*
stmts(#20156,2,#20001,6,"x ||= y;")
hasLocation(#20156,#20019)
stmt_containers(#20156,#20001)
#20157=*
exprs(#20157,117,#20156,0,"x ||= y")
#20158=@"loc,{#10000},8,1,8,7"
locations_default(#20158,#10000,8,1,8,7)
hasLocation(#20157,#20158)
enclosing_stmt(#20157,#20156)
expr_containers(#20157,#20001)
#20159=*
exprs(#20159,79,#20157,0,"x")
hasLocation(#20159,#20093)
enclosing_stmt(#20159,#20156)
expr_containers(#20159,#20001)
literals("x","x",#20159)
bind(#20159,#20111)
#20160=*
exprs(#20160,79,#20157,1,"y")
hasLocation(#20160,#20097)
enclosing_stmt(#20160,#20156)
expr_containers(#20160,#20001)
literals("y","y",#20160)
bind(#20160,#20112)
#20161=*
stmts(#20161,2,#20001,7,"x ??= y;")
hasLocation(#20161,#20021)
stmt_containers(#20161,#20001)
#20162=*
exprs(#20162,118,#20161,0,"x ??= y")
#20163=@"loc,{#10000},9,1,9,7"
locations_default(#20163,#10000,9,1,9,7)
hasLocation(#20162,#20163)
enclosing_stmt(#20162,#20161)
expr_containers(#20162,#20001)
#20164=*
exprs(#20164,79,#20162,0,"x")
hasLocation(#20164,#20101)
enclosing_stmt(#20164,#20161)
expr_containers(#20164,#20001)
literals("x","x",#20164)
bind(#20164,#20111)
#20165=*
exprs(#20165,79,#20162,1,"y")
hasLocation(#20165,#20105)
enclosing_stmt(#20165,#20161)
expr_containers(#20165,#20001)
literals("y","y",#20165)
bind(#20165,#20112)
#20166=*
entry_cfg_node(#20166,#20001)
#20167=@"loc,{#10000},1,1,1,0"
locations_default(#20167,#10000,1,1,1,0)
hasLocation(#20166,#20167)
#20168=*
exit_cfg_node(#20168,#20001)
hasLocation(#20168,#20109)
successor(#20161,#20164)
successor(#20164,#20165)
successor(#20164,#20168)
successor(#20165,#20164)
successor(#20162,#20168)
successor(#20156,#20159)
#20169=*
guard_node(#20169,1,#20159)
hasLocation(#20169,#20093)
successor(#20169,#20161)
#20170=*
guard_node(#20170,0,#20159)
hasLocation(#20170,#20093)
successor(#20170,#20160)
successor(#20159,#20169)
successor(#20159,#20170)
successor(#20160,#20159)
successor(#20157,#20161)
successor(#20151,#20154)
#20171=*
guard_node(#20171,1,#20154)
hasLocation(#20171,#20085)
successor(#20171,#20155)
#20172=*
guard_node(#20172,0,#20154)
hasLocation(#20172,#20085)
successor(#20172,#20156)
successor(#20154,#20171)
successor(#20154,#20172)
successor(#20155,#20154)
successor(#20152,#20156)
successor(#20141,#20147)
successor(#20150,#20143)
successor(#20149,#20145)
successor(#20147,#20149)
successor(#20145,#20150)
successor(#20143,#20151)
successor(#20133,#20136)
#20173=*
guard_node(#20173,1,#20139)
hasLocation(#20173,#20063)
successor(#20173,#20140)
#20174=*
guard_node(#20174,0,#20139)
hasLocation(#20174,#20063)
successor(#20174,#20134)
successor(#20139,#20173)
successor(#20139,#20174)
successor(#20140,#20139)
successor(#20137,#20134)
successor(#20136,#20139)
successor(#20134,#20141)
successor(#20125,#20128)
successor(#20129,#20131)
#20175=*
guard_node(#20175,1,#20131)
hasLocation(#20175,#20049)
successor(#20175,#20132)
#20176=*
guard_node(#20176,0,#20131)
hasLocation(#20176,#20049)
successor(#20176,#20126)
successor(#20131,#20175)
successor(#20131,#20176)
successor(#20132,#20126)
successor(#20128,#20129)
successor(#20126,#20133)
successor(#20120,#20123)
successor(#20124,#20121)
successor(#20123,#20124)
successor(#20121,#20125)
successor(#20115,#20118)
successor(#20119,#20116)
successor(#20118,#20119)
successor(#20116,#20120)
successor(#20166,#20115)
numlines(#10000,9,8,1)
filetype(#10000,"javascript")