diff --git a/javascript/extractor/src/com/semmle/jcorn/flow/FlowParser.java b/javascript/extractor/src/com/semmle/jcorn/flow/FlowParser.java index 2027e6f29c3..4ad65e03749 100644 --- a/javascript/extractor/src/com/semmle/jcorn/flow/FlowParser.java +++ b/javascript/extractor/src/com/semmle/jcorn/flow/FlowParser.java @@ -911,6 +911,11 @@ public class FlowParser extends ESNextParser { List specifiers = this.parseExportSpecifiers(exports); this.parseExportFrom(specifiers, null, false); return null; + } else if (this.eat(TokenType.star)) { + if (this.eatContextual("as")) + this.parseIdent(true); + this.parseExportFrom(null, null, true); + return null; } else { // `export type Foo = Bar;` this.flowParseTypeAlias(startLoc); diff --git a/javascript/extractor/tests/flow/input/declareExport.js b/javascript/extractor/tests/flow/input/declareExport.js index 47c183c6c5e..262c7f656eb 100644 --- a/javascript/extractor/tests/flow/input/declareExport.js +++ b/javascript/extractor/tests/flow/input/declareExport.js @@ -2,3 +2,4 @@ declare export var foo : boolean; declare export default typeof simpleTextBuffer$TextBuffer; declare export default marked$Marked; declare export type ProcessEnv = { }; +declare module "foo" { declare export type * from "bar"; } \ No newline at end of file diff --git a/javascript/extractor/tests/flow/input/export.js b/javascript/extractor/tests/flow/input/export.js new file mode 100644 index 00000000000..88bbf9d5897 --- /dev/null +++ b/javascript/extractor/tests/flow/input/export.js @@ -0,0 +1,5 @@ +export { a } from "m"; +export * from "m"; +export type { b } from "m"; +export type * from "m"; +export type * as fooTypes from "foo"; \ No newline at end of file diff --git a/javascript/extractor/tests/flow/output/trap/declareExport.js.trap b/javascript/extractor/tests/flow/output/trap/declareExport.js.trap index 6850a1767c6..893df96cec7 100644 --- a/javascript/extractor/tests/flow/output/trap/declareExport.js.trap +++ b/javascript/extractor/tests/flow/output/trap/declareExport.js.trap @@ -10,8 +10,8 @@ hasLocation(#10000,#10002) scopes(#20000,0) #20001=@"script;{#10000},1,1" toplevels(#20001,0) -#20002=@"loc,{#10000},1,1,5,0" -locations_default(#20002,#10000,1,1,5,0) +#20002=@"loc,{#10000},1,1,5,58" +locations_default(#20002,#10000,1,1,5,58) hasLocation(#20001,#20002) #20003=* lines(#20003,#20001,"declare export var foo : boolean;"," @@ -37,150 +37,215 @@ lines(#20009,#20001,"declare export type ProcessEnv = { };"," #20010=@"loc,{#10000},4,1,4,37" locations_default(#20010,#10000,4,1,4,37) hasLocation(#20009,#20010) -numlines(#20001,4,4,0) #20011=* -tokeninfo(#20011,6,#20001,0,"declare") -#20012=@"loc,{#10000},1,1,1,7" -locations_default(#20012,#10000,1,1,1,7) +lines(#20011,#20001,"declare module ""foo"" { declare export type * from ""bar""; }","") +#20012=@"loc,{#10000},5,1,5,58" +locations_default(#20012,#10000,5,1,5,58) hasLocation(#20011,#20012) +numlines(#20001,5,5,0) #20013=* -tokeninfo(#20013,7,#20001,1,"export") -#20014=@"loc,{#10000},1,9,1,14" -locations_default(#20014,#10000,1,9,1,14) +tokeninfo(#20013,6,#20001,0,"declare") +#20014=@"loc,{#10000},1,1,1,7" +locations_default(#20014,#10000,1,1,1,7) hasLocation(#20013,#20014) #20015=* -tokeninfo(#20015,7,#20001,2,"var") -#20016=@"loc,{#10000},1,16,1,18" -locations_default(#20016,#10000,1,16,1,18) +tokeninfo(#20015,7,#20001,1,"export") +#20016=@"loc,{#10000},1,9,1,14" +locations_default(#20016,#10000,1,9,1,14) hasLocation(#20015,#20016) #20017=* -tokeninfo(#20017,6,#20001,3,"foo") -#20018=@"loc,{#10000},1,20,1,22" -locations_default(#20018,#10000,1,20,1,22) +tokeninfo(#20017,7,#20001,2,"var") +#20018=@"loc,{#10000},1,16,1,18" +locations_default(#20018,#10000,1,16,1,18) hasLocation(#20017,#20018) #20019=* -tokeninfo(#20019,8,#20001,4,":") -#20020=@"loc,{#10000},1,24,1,24" -locations_default(#20020,#10000,1,24,1,24) +tokeninfo(#20019,6,#20001,3,"foo") +#20020=@"loc,{#10000},1,20,1,22" +locations_default(#20020,#10000,1,20,1,22) hasLocation(#20019,#20020) #20021=* -tokeninfo(#20021,6,#20001,5,"boolean") -#20022=@"loc,{#10000},1,26,1,32" -locations_default(#20022,#10000,1,26,1,32) +tokeninfo(#20021,8,#20001,4,":") +#20022=@"loc,{#10000},1,24,1,24" +locations_default(#20022,#10000,1,24,1,24) hasLocation(#20021,#20022) #20023=* -tokeninfo(#20023,8,#20001,6,";") -#20024=@"loc,{#10000},1,33,1,33" -locations_default(#20024,#10000,1,33,1,33) +tokeninfo(#20023,6,#20001,5,"boolean") +#20024=@"loc,{#10000},1,26,1,32" +locations_default(#20024,#10000,1,26,1,32) hasLocation(#20023,#20024) #20025=* -tokeninfo(#20025,6,#20001,7,"declare") -#20026=@"loc,{#10000},2,1,2,7" -locations_default(#20026,#10000,2,1,2,7) +tokeninfo(#20025,8,#20001,6,";") +#20026=@"loc,{#10000},1,33,1,33" +locations_default(#20026,#10000,1,33,1,33) hasLocation(#20025,#20026) #20027=* -tokeninfo(#20027,7,#20001,8,"export") -#20028=@"loc,{#10000},2,9,2,14" -locations_default(#20028,#10000,2,9,2,14) +tokeninfo(#20027,6,#20001,7,"declare") +#20028=@"loc,{#10000},2,1,2,7" +locations_default(#20028,#10000,2,1,2,7) hasLocation(#20027,#20028) #20029=* -tokeninfo(#20029,7,#20001,9,"default") -#20030=@"loc,{#10000},2,16,2,22" -locations_default(#20030,#10000,2,16,2,22) +tokeninfo(#20029,7,#20001,8,"export") +#20030=@"loc,{#10000},2,9,2,14" +locations_default(#20030,#10000,2,9,2,14) hasLocation(#20029,#20030) #20031=* -tokeninfo(#20031,7,#20001,10,"typeof") -#20032=@"loc,{#10000},2,24,2,29" -locations_default(#20032,#10000,2,24,2,29) +tokeninfo(#20031,7,#20001,9,"default") +#20032=@"loc,{#10000},2,16,2,22" +locations_default(#20032,#10000,2,16,2,22) hasLocation(#20031,#20032) #20033=* -tokeninfo(#20033,6,#20001,11,"simpleTextBuffer$TextBuffer") -#20034=@"loc,{#10000},2,31,2,57" -locations_default(#20034,#10000,2,31,2,57) +tokeninfo(#20033,7,#20001,10,"typeof") +#20034=@"loc,{#10000},2,24,2,29" +locations_default(#20034,#10000,2,24,2,29) hasLocation(#20033,#20034) #20035=* -tokeninfo(#20035,8,#20001,12,";") -#20036=@"loc,{#10000},2,58,2,58" -locations_default(#20036,#10000,2,58,2,58) +tokeninfo(#20035,6,#20001,11,"simpleTextBuffer$TextBuffer") +#20036=@"loc,{#10000},2,31,2,57" +locations_default(#20036,#10000,2,31,2,57) hasLocation(#20035,#20036) #20037=* -tokeninfo(#20037,6,#20001,13,"declare") -#20038=@"loc,{#10000},3,1,3,7" -locations_default(#20038,#10000,3,1,3,7) +tokeninfo(#20037,8,#20001,12,";") +#20038=@"loc,{#10000},2,58,2,58" +locations_default(#20038,#10000,2,58,2,58) hasLocation(#20037,#20038) #20039=* -tokeninfo(#20039,7,#20001,14,"export") -#20040=@"loc,{#10000},3,9,3,14" -locations_default(#20040,#10000,3,9,3,14) +tokeninfo(#20039,6,#20001,13,"declare") +#20040=@"loc,{#10000},3,1,3,7" +locations_default(#20040,#10000,3,1,3,7) hasLocation(#20039,#20040) #20041=* -tokeninfo(#20041,7,#20001,15,"default") -#20042=@"loc,{#10000},3,16,3,22" -locations_default(#20042,#10000,3,16,3,22) +tokeninfo(#20041,7,#20001,14,"export") +#20042=@"loc,{#10000},3,9,3,14" +locations_default(#20042,#10000,3,9,3,14) hasLocation(#20041,#20042) #20043=* -tokeninfo(#20043,6,#20001,16,"marked$Marked") -#20044=@"loc,{#10000},3,24,3,36" -locations_default(#20044,#10000,3,24,3,36) +tokeninfo(#20043,7,#20001,15,"default") +#20044=@"loc,{#10000},3,16,3,22" +locations_default(#20044,#10000,3,16,3,22) hasLocation(#20043,#20044) #20045=* -tokeninfo(#20045,8,#20001,17,";") -#20046=@"loc,{#10000},3,37,3,37" -locations_default(#20046,#10000,3,37,3,37) +tokeninfo(#20045,6,#20001,16,"marked$Marked") +#20046=@"loc,{#10000},3,24,3,36" +locations_default(#20046,#10000,3,24,3,36) hasLocation(#20045,#20046) #20047=* -tokeninfo(#20047,6,#20001,18,"declare") -#20048=@"loc,{#10000},4,1,4,7" -locations_default(#20048,#10000,4,1,4,7) +tokeninfo(#20047,8,#20001,17,";") +#20048=@"loc,{#10000},3,37,3,37" +locations_default(#20048,#10000,3,37,3,37) hasLocation(#20047,#20048) #20049=* -tokeninfo(#20049,7,#20001,19,"export") -#20050=@"loc,{#10000},4,9,4,14" -locations_default(#20050,#10000,4,9,4,14) +tokeninfo(#20049,6,#20001,18,"declare") +#20050=@"loc,{#10000},4,1,4,7" +locations_default(#20050,#10000,4,1,4,7) hasLocation(#20049,#20050) #20051=* -tokeninfo(#20051,6,#20001,20,"type") -#20052=@"loc,{#10000},4,16,4,19" -locations_default(#20052,#10000,4,16,4,19) +tokeninfo(#20051,7,#20001,19,"export") +#20052=@"loc,{#10000},4,9,4,14" +locations_default(#20052,#10000,4,9,4,14) hasLocation(#20051,#20052) #20053=* -tokeninfo(#20053,6,#20001,21,"ProcessEnv") -#20054=@"loc,{#10000},4,21,4,30" -locations_default(#20054,#10000,4,21,4,30) +tokeninfo(#20053,6,#20001,20,"type") +#20054=@"loc,{#10000},4,16,4,19" +locations_default(#20054,#10000,4,16,4,19) hasLocation(#20053,#20054) #20055=* -tokeninfo(#20055,8,#20001,22,"=") -#20056=@"loc,{#10000},4,32,4,32" -locations_default(#20056,#10000,4,32,4,32) +tokeninfo(#20055,6,#20001,21,"ProcessEnv") +#20056=@"loc,{#10000},4,21,4,30" +locations_default(#20056,#10000,4,21,4,30) hasLocation(#20055,#20056) #20057=* -tokeninfo(#20057,8,#20001,23,"{") -#20058=@"loc,{#10000},4,34,4,34" -locations_default(#20058,#10000,4,34,4,34) +tokeninfo(#20057,8,#20001,22,"=") +#20058=@"loc,{#10000},4,32,4,32" +locations_default(#20058,#10000,4,32,4,32) hasLocation(#20057,#20058) #20059=* -tokeninfo(#20059,8,#20001,24,"}") -#20060=@"loc,{#10000},4,36,4,36" -locations_default(#20060,#10000,4,36,4,36) +tokeninfo(#20059,8,#20001,23,"{") +#20060=@"loc,{#10000},4,34,4,34" +locations_default(#20060,#10000,4,34,4,34) hasLocation(#20059,#20060) #20061=* -tokeninfo(#20061,8,#20001,25,";") -#20062=@"loc,{#10000},4,37,4,37" -locations_default(#20062,#10000,4,37,4,37) +tokeninfo(#20061,8,#20001,24,"}") +#20062=@"loc,{#10000},4,36,4,36" +locations_default(#20062,#10000,4,36,4,36) hasLocation(#20061,#20062) #20063=* -tokeninfo(#20063,0,#20001,26,"") -#20064=@"loc,{#10000},5,1,5,0" -locations_default(#20064,#10000,5,1,5,0) +tokeninfo(#20063,8,#20001,25,";") +#20064=@"loc,{#10000},4,37,4,37" +locations_default(#20064,#10000,4,37,4,37) hasLocation(#20063,#20064) #20065=* -entry_cfg_node(#20065,#20001) -#20066=@"loc,{#10000},1,1,1,0" -locations_default(#20066,#10000,1,1,1,0) +tokeninfo(#20065,6,#20001,26,"declare") +#20066=@"loc,{#10000},5,1,5,7" +locations_default(#20066,#10000,5,1,5,7) hasLocation(#20065,#20066) #20067=* -exit_cfg_node(#20067,#20001) -hasLocation(#20067,#20064) -successor(#20065,#20067) -numlines(#10000,4,4,0) +tokeninfo(#20067,6,#20001,27,"module") +#20068=@"loc,{#10000},5,9,5,14" +locations_default(#20068,#10000,5,9,5,14) +hasLocation(#20067,#20068) +#20069=* +tokeninfo(#20069,4,#20001,28,"""foo""") +#20070=@"loc,{#10000},5,16,5,20" +locations_default(#20070,#10000,5,16,5,20) +hasLocation(#20069,#20070) +#20071=* +tokeninfo(#20071,8,#20001,29,"{") +#20072=@"loc,{#10000},5,22,5,22" +locations_default(#20072,#10000,5,22,5,22) +hasLocation(#20071,#20072) +#20073=* +tokeninfo(#20073,6,#20001,30,"declare") +#20074=@"loc,{#10000},5,24,5,30" +locations_default(#20074,#10000,5,24,5,30) +hasLocation(#20073,#20074) +#20075=* +tokeninfo(#20075,7,#20001,31,"export") +#20076=@"loc,{#10000},5,32,5,37" +locations_default(#20076,#10000,5,32,5,37) +hasLocation(#20075,#20076) +#20077=* +tokeninfo(#20077,6,#20001,32,"type") +#20078=@"loc,{#10000},5,39,5,42" +locations_default(#20078,#10000,5,39,5,42) +hasLocation(#20077,#20078) +#20079=* +tokeninfo(#20079,8,#20001,33,"*") +#20080=@"loc,{#10000},5,44,5,44" +locations_default(#20080,#10000,5,44,5,44) +hasLocation(#20079,#20080) +#20081=* +tokeninfo(#20081,6,#20001,34,"from") +#20082=@"loc,{#10000},5,46,5,49" +locations_default(#20082,#10000,5,46,5,49) +hasLocation(#20081,#20082) +#20083=* +tokeninfo(#20083,4,#20001,35,"""bar""") +#20084=@"loc,{#10000},5,51,5,55" +locations_default(#20084,#10000,5,51,5,55) +hasLocation(#20083,#20084) +#20085=* +tokeninfo(#20085,8,#20001,36,";") +#20086=@"loc,{#10000},5,56,5,56" +locations_default(#20086,#10000,5,56,5,56) +hasLocation(#20085,#20086) +#20087=* +tokeninfo(#20087,8,#20001,37,"}") +#20088=@"loc,{#10000},5,58,5,58" +locations_default(#20088,#10000,5,58,5,58) +hasLocation(#20087,#20088) +#20089=* +tokeninfo(#20089,0,#20001,38,"") +#20090=@"loc,{#10000},5,59,5,58" +locations_default(#20090,#10000,5,59,5,58) +hasLocation(#20089,#20090) +#20091=* +entry_cfg_node(#20091,#20001) +#20092=@"loc,{#10000},1,1,1,0" +locations_default(#20092,#10000,1,1,1,0) +hasLocation(#20091,#20092) +#20093=* +exit_cfg_node(#20093,#20001) +hasLocation(#20093,#20090) +successor(#20091,#20093) +numlines(#10000,5,5,0) filetype(#10000,"javascript") diff --git a/javascript/extractor/tests/flow/output/trap/export.js.trap b/javascript/extractor/tests/flow/output/trap/export.js.trap new file mode 100644 index 00000000000..9166f710bf2 --- /dev/null +++ b/javascript/extractor/tests/flow/output/trap/export.js.trap @@ -0,0 +1,280 @@ +#10000=@"/export.js;sourcefile" +files(#10000,"/export.js","export","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" +toplevels(#20001,0) +#20002=@"loc,{#10000},1,1,5,37" +locations_default(#20002,#10000,1,1,5,37) +hasLocation(#20001,#20002) +#20003=@"module;{#10000},1,1" +scopes(#20003,3) +scopenodes(#20001,#20003) +scopenesting(#20003,#20000) +isModule(#20001) +#20004=* +stmts(#20004,30,#20001,0,"export ... om ""m"";") +#20005=@"loc,{#10000},1,1,1,22" +locations_default(#20005,#10000,1,1,1,22) +hasLocation(#20004,#20005) +stmtContainers(#20004,#20001) +#20006=* +exprs(#20006,4,#20004,-2,"""m""") +#20007=@"loc,{#10000},1,19,1,21" +locations_default(#20007,#10000,1,19,1,21) +hasLocation(#20006,#20007) +enclosingStmt(#20006,#20004) +exprContainers(#20006,#20001) +literals("m","""m""",#20006) +#20008=* +exprs(#20008,86,#20004,0,"a") +#20009=@"loc,{#10000},1,10,1,10" +locations_default(#20009,#10000,1,10,1,10) +hasLocation(#20008,#20009) +enclosingStmt(#20008,#20004) +exprContainers(#20008,#20001) +#20010=* +exprs(#20010,0,#20008,0,"a") +hasLocation(#20010,#20009) +enclosingStmt(#20010,#20004) +exprContainers(#20010,#20001) +literals("a","a",#20010) +#20011=* +exprs(#20011,0,#20008,1,"a") +hasLocation(#20011,#20009) +enclosingStmt(#20011,#20004) +exprContainers(#20011,#20001) +literals("a","a",#20011) +#20012=* +stmts(#20012,28,#20001,1,"export * from ""m"";") +#20013=@"loc,{#10000},2,1,2,18" +locations_default(#20013,#10000,2,1,2,18) +hasLocation(#20012,#20013) +stmtContainers(#20012,#20001) +#20014=* +exprs(#20014,4,#20012,0,"""m""") +#20015=@"loc,{#10000},2,15,2,17" +locations_default(#20015,#10000,2,15,2,17) +hasLocation(#20014,#20015) +enclosingStmt(#20014,#20012) +exprContainers(#20014,#20001) +literals("m","""m""",#20014) +#20016=* +lines(#20016,#20001,"export { a } from ""m"";"," +") +hasLocation(#20016,#20005) +#20017=* +lines(#20017,#20001,"export * from ""m"";"," +") +hasLocation(#20017,#20013) +#20018=* +lines(#20018,#20001,"export type { b } from ""m"";"," +") +#20019=@"loc,{#10000},3,1,3,27" +locations_default(#20019,#10000,3,1,3,27) +hasLocation(#20018,#20019) +#20020=* +lines(#20020,#20001,"export type * from ""m"";"," +") +#20021=@"loc,{#10000},4,1,4,23" +locations_default(#20021,#10000,4,1,4,23) +hasLocation(#20020,#20021) +#20022=* +lines(#20022,#20001,"export type * as fooTypes from ""foo"";","") +#20023=@"loc,{#10000},5,1,5,37" +locations_default(#20023,#10000,5,1,5,37) +hasLocation(#20022,#20023) +numlines(#20001,5,5,0) +#20024=* +tokeninfo(#20024,7,#20001,0,"export") +#20025=@"loc,{#10000},1,1,1,6" +locations_default(#20025,#10000,1,1,1,6) +hasLocation(#20024,#20025) +#20026=* +tokeninfo(#20026,8,#20001,1,"{") +#20027=@"loc,{#10000},1,8,1,8" +locations_default(#20027,#10000,1,8,1,8) +hasLocation(#20026,#20027) +#20028=* +tokeninfo(#20028,6,#20001,2,"a") +hasLocation(#20028,#20009) +#20029=* +tokeninfo(#20029,8,#20001,3,"}") +#20030=@"loc,{#10000},1,12,1,12" +locations_default(#20030,#10000,1,12,1,12) +hasLocation(#20029,#20030) +#20031=* +tokeninfo(#20031,6,#20001,4,"from") +#20032=@"loc,{#10000},1,14,1,17" +locations_default(#20032,#10000,1,14,1,17) +hasLocation(#20031,#20032) +#20033=* +tokeninfo(#20033,4,#20001,5,"""m""") +hasLocation(#20033,#20007) +#20034=* +tokeninfo(#20034,8,#20001,6,";") +#20035=@"loc,{#10000},1,22,1,22" +locations_default(#20035,#10000,1,22,1,22) +hasLocation(#20034,#20035) +#20036=* +tokeninfo(#20036,7,#20001,7,"export") +#20037=@"loc,{#10000},2,1,2,6" +locations_default(#20037,#10000,2,1,2,6) +hasLocation(#20036,#20037) +#20038=* +tokeninfo(#20038,8,#20001,8,"*") +#20039=@"loc,{#10000},2,8,2,8" +locations_default(#20039,#10000,2,8,2,8) +hasLocation(#20038,#20039) +#20040=* +tokeninfo(#20040,6,#20001,9,"from") +#20041=@"loc,{#10000},2,10,2,13" +locations_default(#20041,#10000,2,10,2,13) +hasLocation(#20040,#20041) +#20042=* +tokeninfo(#20042,4,#20001,10,"""m""") +hasLocation(#20042,#20015) +#20043=* +tokeninfo(#20043,8,#20001,11,";") +#20044=@"loc,{#10000},2,18,2,18" +locations_default(#20044,#10000,2,18,2,18) +hasLocation(#20043,#20044) +#20045=* +tokeninfo(#20045,7,#20001,12,"export") +#20046=@"loc,{#10000},3,1,3,6" +locations_default(#20046,#10000,3,1,3,6) +hasLocation(#20045,#20046) +#20047=* +tokeninfo(#20047,6,#20001,13,"type") +#20048=@"loc,{#10000},3,8,3,11" +locations_default(#20048,#10000,3,8,3,11) +hasLocation(#20047,#20048) +#20049=* +tokeninfo(#20049,8,#20001,14,"{") +#20050=@"loc,{#10000},3,13,3,13" +locations_default(#20050,#10000,3,13,3,13) +hasLocation(#20049,#20050) +#20051=* +tokeninfo(#20051,6,#20001,15,"b") +#20052=@"loc,{#10000},3,15,3,15" +locations_default(#20052,#10000,3,15,3,15) +hasLocation(#20051,#20052) +#20053=* +tokeninfo(#20053,8,#20001,16,"}") +#20054=@"loc,{#10000},3,17,3,17" +locations_default(#20054,#10000,3,17,3,17) +hasLocation(#20053,#20054) +#20055=* +tokeninfo(#20055,6,#20001,17,"from") +#20056=@"loc,{#10000},3,19,3,22" +locations_default(#20056,#10000,3,19,3,22) +hasLocation(#20055,#20056) +#20057=* +tokeninfo(#20057,4,#20001,18,"""m""") +#20058=@"loc,{#10000},3,24,3,26" +locations_default(#20058,#10000,3,24,3,26) +hasLocation(#20057,#20058) +#20059=* +tokeninfo(#20059,8,#20001,19,";") +#20060=@"loc,{#10000},3,27,3,27" +locations_default(#20060,#10000,3,27,3,27) +hasLocation(#20059,#20060) +#20061=* +tokeninfo(#20061,7,#20001,20,"export") +#20062=@"loc,{#10000},4,1,4,6" +locations_default(#20062,#10000,4,1,4,6) +hasLocation(#20061,#20062) +#20063=* +tokeninfo(#20063,6,#20001,21,"type") +#20064=@"loc,{#10000},4,8,4,11" +locations_default(#20064,#10000,4,8,4,11) +hasLocation(#20063,#20064) +#20065=* +tokeninfo(#20065,8,#20001,22,"*") +#20066=@"loc,{#10000},4,13,4,13" +locations_default(#20066,#10000,4,13,4,13) +hasLocation(#20065,#20066) +#20067=* +tokeninfo(#20067,6,#20001,23,"from") +#20068=@"loc,{#10000},4,15,4,18" +locations_default(#20068,#10000,4,15,4,18) +hasLocation(#20067,#20068) +#20069=* +tokeninfo(#20069,4,#20001,24,"""m""") +#20070=@"loc,{#10000},4,20,4,22" +locations_default(#20070,#10000,4,20,4,22) +hasLocation(#20069,#20070) +#20071=* +tokeninfo(#20071,8,#20001,25,";") +#20072=@"loc,{#10000},4,23,4,23" +locations_default(#20072,#10000,4,23,4,23) +hasLocation(#20071,#20072) +#20073=* +tokeninfo(#20073,7,#20001,26,"export") +#20074=@"loc,{#10000},5,1,5,6" +locations_default(#20074,#10000,5,1,5,6) +hasLocation(#20073,#20074) +#20075=* +tokeninfo(#20075,6,#20001,27,"type") +#20076=@"loc,{#10000},5,8,5,11" +locations_default(#20076,#10000,5,8,5,11) +hasLocation(#20075,#20076) +#20077=* +tokeninfo(#20077,8,#20001,28,"*") +#20078=@"loc,{#10000},5,13,5,13" +locations_default(#20078,#10000,5,13,5,13) +hasLocation(#20077,#20078) +#20079=* +tokeninfo(#20079,6,#20001,29,"as") +#20080=@"loc,{#10000},5,15,5,16" +locations_default(#20080,#10000,5,15,5,16) +hasLocation(#20079,#20080) +#20081=* +tokeninfo(#20081,6,#20001,30,"fooTypes") +#20082=@"loc,{#10000},5,18,5,25" +locations_default(#20082,#10000,5,18,5,25) +hasLocation(#20081,#20082) +#20083=* +tokeninfo(#20083,6,#20001,31,"from") +#20084=@"loc,{#10000},5,27,5,30" +locations_default(#20084,#10000,5,27,5,30) +hasLocation(#20083,#20084) +#20085=* +tokeninfo(#20085,4,#20001,32,"""foo""") +#20086=@"loc,{#10000},5,32,5,36" +locations_default(#20086,#10000,5,32,5,36) +hasLocation(#20085,#20086) +#20087=* +tokeninfo(#20087,8,#20001,33,";") +#20088=@"loc,{#10000},5,37,5,37" +locations_default(#20088,#10000,5,37,5,37) +hasLocation(#20087,#20088) +#20089=* +tokeninfo(#20089,0,#20001,34,"") +#20090=@"loc,{#10000},5,38,5,37" +locations_default(#20090,#10000,5,38,5,37) +hasLocation(#20089,#20090) +#20091=* +entry_cfg_node(#20091,#20001) +#20092=@"loc,{#10000},1,1,1,0" +locations_default(#20092,#10000,1,1,1,0) +hasLocation(#20091,#20092) +#20093=* +exit_cfg_node(#20093,#20001) +hasLocation(#20093,#20090) +successor(#20012,#20014) +successor(#20014,#20093) +successor(#20004,#20006) +successor(#20008,#20010) +successor(#20011,#20012) +successor(#20010,#20011) +successor(#20006,#20008) +successor(#20091,#20004) +numlines(#10000,5,5,0) +filetype(#10000,"javascript")