JS(extractor): improve parser support for flowtype syntax

This commit is contained in:
Esben Sparre Andreasen
2018-11-22 09:01:36 +01:00
parent 733acaccfa
commit 8c7ca38b8d
12 changed files with 1636 additions and 20 deletions

View File

@@ -3040,6 +3040,10 @@ public class Parser {
return parseClassPropertyBody(pi, hadConstructor, isStatic);
}
protected boolean atGetterSetterName(PropertyInfo pi) {
return !pi.isGenerator && !pi.isAsync && pi.key instanceof Identifier && this.type != TokenType.parenL && (((Identifier) pi.key).getName().equals("get") || ((Identifier) pi.key).getName().equals("set"));
}
/**
* Parse a method declaration in a class, assuming that its name has already been consumed.
*/
@@ -3047,7 +3051,7 @@ public class Parser {
pi.kind = "method";
boolean isGetSet = false;
if (!pi.computed) {
if (!pi.isGenerator && !pi.isAsync && pi.key instanceof Identifier && this.type != TokenType.parenL && (((Identifier) pi.key).getName().equals("get") || ((Identifier) pi.key).getName().equals("set"))) {
if (atGetterSetterName(pi)) {
isGetSet = true;
pi.kind = ((Identifier) pi.key).getName();
this.parsePropertyName(pi);

View File

@@ -146,6 +146,10 @@ public class FlowParser extends ESNextParser {
boolean oldInType = inType;
inType = true;
this.expect(tok == null ? TokenType.colon : tok);
if (this.type == TokenType.modulo) {// an annotation like '%checks' without a preceeding type
inType = oldInType;
return;
}
if (allowLeadingPipeOrAnd) {
if (this.type == TokenType.bitwiseAND || this.type == TokenType.bitwiseOR) {
this.next();
@@ -223,14 +227,29 @@ public class FlowParser extends ESNextParser {
while (this.type != TokenType.braceR) {
Position stmtStart = startLoc;
// todo: declare check
this.next();
if (this.eat(TokenType._import)) {
this.flowParseDeclareImport(stmtStart);
} else {
// todo: declare check
this.next();
this.flowParseDeclare(stmtStart);
this.flowParseDeclare(stmtStart);
}
}
this.expect(TokenType.braceR);
}
private void flowParseDeclareImport(Position stmtStart) {
String kind = flowParseImportSpecifiers();
if (kind == null) {
this.raise(stmtStart, "Imports within a `declare module` body must always be `import type` or `import typeof`.");
}
this.expect(TokenType.name);
this.expectContextual("from");
this.expect(TokenType.string);
this.semicolon();
}
private void flowParseDeclareModuleExports() {
this.expectContextual("module");
this.expect(TokenType.dot);
@@ -737,7 +756,7 @@ public class FlowParser extends ESNextParser {
private void flowParsePostfixType() {
this.flowParsePrimaryType();
if (this.type == TokenType.bracketL) {
while (this.type == TokenType.bracketL) {
this.expect(TokenType.bracketL);
this.expect(TokenType.bracketR);
}
@@ -807,11 +826,20 @@ public class FlowParser extends ESNextParser {
// if allowExpression is true then we're parsing an arrow function and if
// there's a return type then it's been handled elsewhere
this.flowParseTypeAnnotation();
this.flowParseChecksAnnotation();
}
return super.parseFunctionBody(id, params, isArrowFunction);
}
private void flowParseChecksAnnotation() {
// predicate functions with the special '%checks' annotation
if (this.type == TokenType.modulo && lookaheadIsIdent("checks", true)) {
this.next();
this.next();
}
}
// interfaces
@Override
protected Statement parseStatement(boolean declaration, boolean topLevel, Set<String> exports) {
@@ -975,24 +1003,30 @@ public class FlowParser extends ESNextParser {
return param;
}
private String flowParseImportSpecifiers() {
String kind = null;
if (this.type == TokenType._typeof) {
kind = "typeof";
} else if (this.isContextual("type")) {
kind = "type";
}
if (kind != null) {
String lh = lookahead(4);
if (!lh.isEmpty()) {
int c = lh.codePointAt(0);
if ((Identifiers.isIdentifierStart(c, true) && !"from".equals(lh)) || c == '{' || c == '*') {
this.next();
}
}
}
return kind;
}
@Override
protected List<ImportSpecifier> parseImportSpecifiers() {
String kind = null;
if (flow()) {
if (this.type == TokenType._typeof) {
kind = "typeof";
} else if (this.isContextual("type")) {
kind = "type";
}
if (kind != null) {
String lh = lookahead(4);
if (!lh.isEmpty()) {
int c = lh.codePointAt(0);
if ((Identifiers.isIdentifierStart(c, true) && !"from".equals(lh)) || c == '{' || c == '*') {
this.next();
}
}
}
kind = flowParseImportSpecifiers();
}
List<ImportSpecifier> specs = super.parseImportSpecifiers();
@@ -1102,6 +1136,7 @@ public class FlowParser extends ESNextParser {
boolean oldNoAnonFunctionType = noAnonFunctionType;
noAnonFunctionType = true;
flowParseTypeAnnotation();
flowParseChecksAnnotation();
noAnonFunctionType = oldNoAnonFunctionType;
if (this.type != TokenType.arrow)
unexpected();
@@ -1158,4 +1193,12 @@ public class FlowParser extends ESNextParser {
this.eat(TokenType.plusMin);
super.parsePropertyName(result);
}
@Override
protected boolean atGetterSetterName(PropertyInfo pi) {
if (flow() && this.isRelational("<"))
return false;
return super.atGetterSetterName(pi);
}
}

View File

@@ -41,7 +41,7 @@ public class Main {
* such a way that it may produce different tuples for the same file under the same
* {@link ExtractorConfig}.
*/
public static final String EXTRACTOR_VERSION = "2018-11-20";
public static final String EXTRACTOR_VERSION = "2018-11-22_a";
public static final Pattern NEWLINE = Pattern.compile("\n");

View File

@@ -0,0 +1,4 @@
function f(p: T) {}
function f(p: T[]) {}
function f(p: T[][]) {}
function f(p: T[][][]) {}

View File

@@ -0,0 +1,4 @@
declare module "m1" {
import type t from "m2";
import typeof t from "m3";
}

View File

@@ -0,0 +1,4 @@
class C {
get<T>(v: T) { }
set<T>(v: T) { }
}

View File

@@ -0,0 +1,9 @@
function f(a): boolean %checks {
return a;
}
function g(): %checks {} {
return b;
}
(c): boolean %checks => c;
(d): %checks => d;

View File

@@ -0,0 +1,492 @@
#10000=@"/array-types.js;sourcefile"
files(#10000,"/array-types.js","array-types","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,0"
locations_default(#20002,#10000,1,1,5,0)
hasLocation(#20001,#20002)
#20003=@"var;{f};{#20000}"
variables(#20003,"f",#20000)
#20004=*
stmts(#20004,17,#20001,0,"function f(p: T) {}")
#20005=@"loc,{#10000},1,1,1,19"
locations_default(#20005,#10000,1,1,1,19)
hasLocation(#20004,#20005)
stmtContainers(#20004,#20001)
#20006=*
exprs(#20006,78,#20004,-1,"f")
#20007=@"loc,{#10000},1,10,1,10"
locations_default(#20007,#10000,1,10,1,10)
hasLocation(#20006,#20007)
exprContainers(#20006,#20004)
literals("f","f",#20006)
decl(#20006,#20003)
#20008=*
scopes(#20008,1)
scopenodes(#20004,#20008)
scopenesting(#20008,#20000)
#20009=@"var;{p};{#20008}"
variables(#20009,"p",#20008)
#20010=*
exprs(#20010,78,#20004,0,"p: T")
#20011=@"loc,{#10000},1,12,1,15"
locations_default(#20011,#10000,1,12,1,15)
hasLocation(#20010,#20011)
exprContainers(#20010,#20004)
literals("p","p",#20010)
decl(#20010,#20009)
#20012=@"var;{arguments};{#20008}"
variables(#20012,"arguments",#20008)
isArgumentsObject(#20012)
#20013=*
stmts(#20013,1,#20004,-2,"{}")
#20014=@"loc,{#10000},1,18,1,19"
locations_default(#20014,#10000,1,18,1,19)
hasLocation(#20013,#20014)
stmtContainers(#20013,#20004)
numlines(#20004,1,1,0)
#20015=*
stmts(#20015,17,#20001,1,"functio ... T[]) {}")
#20016=@"loc,{#10000},2,1,2,21"
locations_default(#20016,#10000,2,1,2,21)
hasLocation(#20015,#20016)
stmtContainers(#20015,#20001)
#20017=*
exprs(#20017,78,#20015,-1,"f")
#20018=@"loc,{#10000},2,10,2,10"
locations_default(#20018,#10000,2,10,2,10)
hasLocation(#20017,#20018)
exprContainers(#20017,#20015)
literals("f","f",#20017)
decl(#20017,#20003)
#20019=*
scopes(#20019,1)
scopenodes(#20015,#20019)
scopenesting(#20019,#20000)
#20020=@"var;{p};{#20019}"
variables(#20020,"p",#20019)
#20021=*
exprs(#20021,78,#20015,0,"p: T[]")
#20022=@"loc,{#10000},2,12,2,17"
locations_default(#20022,#10000,2,12,2,17)
hasLocation(#20021,#20022)
exprContainers(#20021,#20015)
literals("p","p",#20021)
decl(#20021,#20020)
#20023=@"var;{arguments};{#20019}"
variables(#20023,"arguments",#20019)
isArgumentsObject(#20023)
#20024=*
stmts(#20024,1,#20015,-2,"{}")
#20025=@"loc,{#10000},2,20,2,21"
locations_default(#20025,#10000,2,20,2,21)
hasLocation(#20024,#20025)
stmtContainers(#20024,#20015)
numlines(#20015,1,1,0)
#20026=*
stmts(#20026,17,#20001,2,"functio ... ][]) {}")
#20027=@"loc,{#10000},3,1,3,23"
locations_default(#20027,#10000,3,1,3,23)
hasLocation(#20026,#20027)
stmtContainers(#20026,#20001)
#20028=*
exprs(#20028,78,#20026,-1,"f")
#20029=@"loc,{#10000},3,10,3,10"
locations_default(#20029,#10000,3,10,3,10)
hasLocation(#20028,#20029)
exprContainers(#20028,#20026)
literals("f","f",#20028)
decl(#20028,#20003)
#20030=*
scopes(#20030,1)
scopenodes(#20026,#20030)
scopenesting(#20030,#20000)
#20031=@"var;{p};{#20030}"
variables(#20031,"p",#20030)
#20032=*
exprs(#20032,78,#20026,0,"p: T[][]")
#20033=@"loc,{#10000},3,12,3,19"
locations_default(#20033,#10000,3,12,3,19)
hasLocation(#20032,#20033)
exprContainers(#20032,#20026)
literals("p","p",#20032)
decl(#20032,#20031)
#20034=@"var;{arguments};{#20030}"
variables(#20034,"arguments",#20030)
isArgumentsObject(#20034)
#20035=*
stmts(#20035,1,#20026,-2,"{}")
#20036=@"loc,{#10000},3,22,3,23"
locations_default(#20036,#10000,3,22,3,23)
hasLocation(#20035,#20036)
stmtContainers(#20035,#20026)
numlines(#20026,1,1,0)
#20037=*
stmts(#20037,17,#20001,3,"functio ... ][]) {}")
#20038=@"loc,{#10000},4,1,4,25"
locations_default(#20038,#10000,4,1,4,25)
hasLocation(#20037,#20038)
stmtContainers(#20037,#20001)
#20039=*
exprs(#20039,78,#20037,-1,"f")
#20040=@"loc,{#10000},4,10,4,10"
locations_default(#20040,#10000,4,10,4,10)
hasLocation(#20039,#20040)
exprContainers(#20039,#20037)
literals("f","f",#20039)
decl(#20039,#20003)
#20041=*
scopes(#20041,1)
scopenodes(#20037,#20041)
scopenesting(#20041,#20000)
#20042=@"var;{p};{#20041}"
variables(#20042,"p",#20041)
#20043=*
exprs(#20043,78,#20037,0,"p: T[][][]")
#20044=@"loc,{#10000},4,12,4,21"
locations_default(#20044,#10000,4,12,4,21)
hasLocation(#20043,#20044)
exprContainers(#20043,#20037)
literals("p","p",#20043)
decl(#20043,#20042)
#20045=@"var;{arguments};{#20041}"
variables(#20045,"arguments",#20041)
isArgumentsObject(#20045)
#20046=*
stmts(#20046,1,#20037,-2,"{}")
#20047=@"loc,{#10000},4,24,4,25"
locations_default(#20047,#10000,4,24,4,25)
hasLocation(#20046,#20047)
stmtContainers(#20046,#20037)
numlines(#20037,1,1,0)
#20048=*
lines(#20048,#20001,"function f(p: T) {}","
")
hasLocation(#20048,#20005)
#20049=*
lines(#20049,#20001,"function f(p: T[]) {}","
")
hasLocation(#20049,#20016)
#20050=*
lines(#20050,#20001,"function f(p: T[][]) {}","
")
hasLocation(#20050,#20027)
#20051=*
lines(#20051,#20001,"function f(p: T[][][]) {}","
")
hasLocation(#20051,#20038)
numlines(#20001,4,4,0)
#20052=*
tokeninfo(#20052,7,#20001,0,"function")
#20053=@"loc,{#10000},1,1,1,8"
locations_default(#20053,#10000,1,1,1,8)
hasLocation(#20052,#20053)
#20054=*
tokeninfo(#20054,6,#20001,1,"f")
hasLocation(#20054,#20007)
#20055=*
tokeninfo(#20055,8,#20001,2,"(")
#20056=@"loc,{#10000},1,11,1,11"
locations_default(#20056,#10000,1,11,1,11)
hasLocation(#20055,#20056)
#20057=*
tokeninfo(#20057,6,#20001,3,"p")
#20058=@"loc,{#10000},1,12,1,12"
locations_default(#20058,#10000,1,12,1,12)
hasLocation(#20057,#20058)
#20059=*
tokeninfo(#20059,8,#20001,4,":")
#20060=@"loc,{#10000},1,13,1,13"
locations_default(#20060,#10000,1,13,1,13)
hasLocation(#20059,#20060)
#20061=*
tokeninfo(#20061,6,#20001,5,"T")
#20062=@"loc,{#10000},1,15,1,15"
locations_default(#20062,#10000,1,15,1,15)
hasLocation(#20061,#20062)
#20063=*
tokeninfo(#20063,8,#20001,6,")")
#20064=@"loc,{#10000},1,16,1,16"
locations_default(#20064,#10000,1,16,1,16)
hasLocation(#20063,#20064)
#20065=*
tokeninfo(#20065,8,#20001,7,"{")
#20066=@"loc,{#10000},1,18,1,18"
locations_default(#20066,#10000,1,18,1,18)
hasLocation(#20065,#20066)
#20067=*
tokeninfo(#20067,8,#20001,8,"}")
#20068=@"loc,{#10000},1,19,1,19"
locations_default(#20068,#10000,1,19,1,19)
hasLocation(#20067,#20068)
#20069=*
tokeninfo(#20069,7,#20001,9,"function")
#20070=@"loc,{#10000},2,1,2,8"
locations_default(#20070,#10000,2,1,2,8)
hasLocation(#20069,#20070)
#20071=*
tokeninfo(#20071,6,#20001,10,"f")
hasLocation(#20071,#20018)
#20072=*
tokeninfo(#20072,8,#20001,11,"(")
#20073=@"loc,{#10000},2,11,2,11"
locations_default(#20073,#10000,2,11,2,11)
hasLocation(#20072,#20073)
#20074=*
tokeninfo(#20074,6,#20001,12,"p")
#20075=@"loc,{#10000},2,12,2,12"
locations_default(#20075,#10000,2,12,2,12)
hasLocation(#20074,#20075)
#20076=*
tokeninfo(#20076,8,#20001,13,":")
#20077=@"loc,{#10000},2,13,2,13"
locations_default(#20077,#10000,2,13,2,13)
hasLocation(#20076,#20077)
#20078=*
tokeninfo(#20078,6,#20001,14,"T")
#20079=@"loc,{#10000},2,15,2,15"
locations_default(#20079,#10000,2,15,2,15)
hasLocation(#20078,#20079)
#20080=*
tokeninfo(#20080,8,#20001,15,"[")
#20081=@"loc,{#10000},2,16,2,16"
locations_default(#20081,#10000,2,16,2,16)
hasLocation(#20080,#20081)
#20082=*
tokeninfo(#20082,8,#20001,16,"]")
#20083=@"loc,{#10000},2,17,2,17"
locations_default(#20083,#10000,2,17,2,17)
hasLocation(#20082,#20083)
#20084=*
tokeninfo(#20084,8,#20001,17,")")
#20085=@"loc,{#10000},2,18,2,18"
locations_default(#20085,#10000,2,18,2,18)
hasLocation(#20084,#20085)
#20086=*
tokeninfo(#20086,8,#20001,18,"{")
#20087=@"loc,{#10000},2,20,2,20"
locations_default(#20087,#10000,2,20,2,20)
hasLocation(#20086,#20087)
#20088=*
tokeninfo(#20088,8,#20001,19,"}")
#20089=@"loc,{#10000},2,21,2,21"
locations_default(#20089,#10000,2,21,2,21)
hasLocation(#20088,#20089)
#20090=*
tokeninfo(#20090,7,#20001,20,"function")
#20091=@"loc,{#10000},3,1,3,8"
locations_default(#20091,#10000,3,1,3,8)
hasLocation(#20090,#20091)
#20092=*
tokeninfo(#20092,6,#20001,21,"f")
hasLocation(#20092,#20029)
#20093=*
tokeninfo(#20093,8,#20001,22,"(")
#20094=@"loc,{#10000},3,11,3,11"
locations_default(#20094,#10000,3,11,3,11)
hasLocation(#20093,#20094)
#20095=*
tokeninfo(#20095,6,#20001,23,"p")
#20096=@"loc,{#10000},3,12,3,12"
locations_default(#20096,#10000,3,12,3,12)
hasLocation(#20095,#20096)
#20097=*
tokeninfo(#20097,8,#20001,24,":")
#20098=@"loc,{#10000},3,13,3,13"
locations_default(#20098,#10000,3,13,3,13)
hasLocation(#20097,#20098)
#20099=*
tokeninfo(#20099,6,#20001,25,"T")
#20100=@"loc,{#10000},3,15,3,15"
locations_default(#20100,#10000,3,15,3,15)
hasLocation(#20099,#20100)
#20101=*
tokeninfo(#20101,8,#20001,26,"[")
#20102=@"loc,{#10000},3,16,3,16"
locations_default(#20102,#10000,3,16,3,16)
hasLocation(#20101,#20102)
#20103=*
tokeninfo(#20103,8,#20001,27,"]")
#20104=@"loc,{#10000},3,17,3,17"
locations_default(#20104,#10000,3,17,3,17)
hasLocation(#20103,#20104)
#20105=*
tokeninfo(#20105,8,#20001,28,"[")
#20106=@"loc,{#10000},3,18,3,18"
locations_default(#20106,#10000,3,18,3,18)
hasLocation(#20105,#20106)
#20107=*
tokeninfo(#20107,8,#20001,29,"]")
#20108=@"loc,{#10000},3,19,3,19"
locations_default(#20108,#10000,3,19,3,19)
hasLocation(#20107,#20108)
#20109=*
tokeninfo(#20109,8,#20001,30,")")
#20110=@"loc,{#10000},3,20,3,20"
locations_default(#20110,#10000,3,20,3,20)
hasLocation(#20109,#20110)
#20111=*
tokeninfo(#20111,8,#20001,31,"{")
#20112=@"loc,{#10000},3,22,3,22"
locations_default(#20112,#10000,3,22,3,22)
hasLocation(#20111,#20112)
#20113=*
tokeninfo(#20113,8,#20001,32,"}")
#20114=@"loc,{#10000},3,23,3,23"
locations_default(#20114,#10000,3,23,3,23)
hasLocation(#20113,#20114)
#20115=*
tokeninfo(#20115,7,#20001,33,"function")
#20116=@"loc,{#10000},4,1,4,8"
locations_default(#20116,#10000,4,1,4,8)
hasLocation(#20115,#20116)
#20117=*
tokeninfo(#20117,6,#20001,34,"f")
hasLocation(#20117,#20040)
#20118=*
tokeninfo(#20118,8,#20001,35,"(")
#20119=@"loc,{#10000},4,11,4,11"
locations_default(#20119,#10000,4,11,4,11)
hasLocation(#20118,#20119)
#20120=*
tokeninfo(#20120,6,#20001,36,"p")
#20121=@"loc,{#10000},4,12,4,12"
locations_default(#20121,#10000,4,12,4,12)
hasLocation(#20120,#20121)
#20122=*
tokeninfo(#20122,8,#20001,37,":")
#20123=@"loc,{#10000},4,13,4,13"
locations_default(#20123,#10000,4,13,4,13)
hasLocation(#20122,#20123)
#20124=*
tokeninfo(#20124,6,#20001,38,"T")
#20125=@"loc,{#10000},4,15,4,15"
locations_default(#20125,#10000,4,15,4,15)
hasLocation(#20124,#20125)
#20126=*
tokeninfo(#20126,8,#20001,39,"[")
#20127=@"loc,{#10000},4,16,4,16"
locations_default(#20127,#10000,4,16,4,16)
hasLocation(#20126,#20127)
#20128=*
tokeninfo(#20128,8,#20001,40,"]")
#20129=@"loc,{#10000},4,17,4,17"
locations_default(#20129,#10000,4,17,4,17)
hasLocation(#20128,#20129)
#20130=*
tokeninfo(#20130,8,#20001,41,"[")
#20131=@"loc,{#10000},4,18,4,18"
locations_default(#20131,#10000,4,18,4,18)
hasLocation(#20130,#20131)
#20132=*
tokeninfo(#20132,8,#20001,42,"]")
#20133=@"loc,{#10000},4,19,4,19"
locations_default(#20133,#10000,4,19,4,19)
hasLocation(#20132,#20133)
#20134=*
tokeninfo(#20134,8,#20001,43,"[")
#20135=@"loc,{#10000},4,20,4,20"
locations_default(#20135,#10000,4,20,4,20)
hasLocation(#20134,#20135)
#20136=*
tokeninfo(#20136,8,#20001,44,"]")
#20137=@"loc,{#10000},4,21,4,21"
locations_default(#20137,#10000,4,21,4,21)
hasLocation(#20136,#20137)
#20138=*
tokeninfo(#20138,8,#20001,45,")")
#20139=@"loc,{#10000},4,22,4,22"
locations_default(#20139,#10000,4,22,4,22)
hasLocation(#20138,#20139)
#20140=*
tokeninfo(#20140,8,#20001,46,"{")
#20141=@"loc,{#10000},4,24,4,24"
locations_default(#20141,#10000,4,24,4,24)
hasLocation(#20140,#20141)
#20142=*
tokeninfo(#20142,8,#20001,47,"}")
#20143=@"loc,{#10000},4,25,4,25"
locations_default(#20143,#10000,4,25,4,25)
hasLocation(#20142,#20143)
#20144=*
tokeninfo(#20144,0,#20001,48,"")
#20145=@"loc,{#10000},5,1,5,0"
locations_default(#20145,#10000,5,1,5,0)
hasLocation(#20144,#20145)
#20146=*
entry_cfg_node(#20146,#20001)
#20147=@"loc,{#10000},1,1,1,0"
locations_default(#20147,#10000,1,1,1,0)
hasLocation(#20146,#20147)
#20148=*
exit_cfg_node(#20148,#20001)
hasLocation(#20148,#20145)
successor(#20037,#20148)
#20149=*
entry_cfg_node(#20149,#20037)
#20150=@"loc,{#10000},4,1,4,0"
locations_default(#20150,#10000,4,1,4,0)
hasLocation(#20149,#20150)
#20151=*
exit_cfg_node(#20151,#20037)
#20152=@"loc,{#10000},4,26,4,25"
locations_default(#20152,#10000,4,26,4,25)
hasLocation(#20151,#20152)
successor(#20046,#20151)
successor(#20043,#20046)
successor(#20149,#20043)
successor(#20026,#20037)
#20153=*
entry_cfg_node(#20153,#20026)
#20154=@"loc,{#10000},3,1,3,0"
locations_default(#20154,#10000,3,1,3,0)
hasLocation(#20153,#20154)
#20155=*
exit_cfg_node(#20155,#20026)
#20156=@"loc,{#10000},3,24,3,23"
locations_default(#20156,#10000,3,24,3,23)
hasLocation(#20155,#20156)
successor(#20035,#20155)
successor(#20032,#20035)
successor(#20153,#20032)
successor(#20015,#20026)
#20157=*
entry_cfg_node(#20157,#20015)
#20158=@"loc,{#10000},2,1,2,0"
locations_default(#20158,#10000,2,1,2,0)
hasLocation(#20157,#20158)
#20159=*
exit_cfg_node(#20159,#20015)
#20160=@"loc,{#10000},2,22,2,21"
locations_default(#20160,#10000,2,22,2,21)
hasLocation(#20159,#20160)
successor(#20024,#20159)
successor(#20021,#20024)
successor(#20157,#20021)
successor(#20004,#20015)
#20161=*
entry_cfg_node(#20161,#20004)
hasLocation(#20161,#20147)
#20162=*
exit_cfg_node(#20162,#20004)
#20163=@"loc,{#10000},1,20,1,19"
locations_default(#20163,#10000,1,20,1,19)
hasLocation(#20162,#20163)
successor(#20013,#20162)
successor(#20010,#20013)
successor(#20161,#20010)
successor(#20039,#20004)
successor(#20028,#20039)
successor(#20017,#20028)
successor(#20006,#20017)
successor(#20146,#20006)
numlines(#10000,4,4,0)
filetype(#10000,"javascript")

View File

@@ -0,0 +1,146 @@
#10000=@"/declared-module-imports.js;sourcefile"
files(#10000,"/declared-module-imports.js","declared-module-imports","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,0"
locations_default(#20002,#10000,1,1,5,0)
hasLocation(#20001,#20002)
#20003=@"module;{#10000},1,1"
scopes(#20003,3)
scopenodes(#20001,#20003)
scopenesting(#20003,#20000)
isModule(#20001)
#20004=*
lines(#20004,#20001,"declare module ""m1"" {","
")
#20005=@"loc,{#10000},1,1,1,21"
locations_default(#20005,#10000,1,1,1,21)
hasLocation(#20004,#20005)
#20006=*
lines(#20006,#20001," import type t from ""m2"";","
")
#20007=@"loc,{#10000},2,1,2,26"
locations_default(#20007,#10000,2,1,2,26)
hasLocation(#20006,#20007)
indentation(#10000,2," ",2)
#20008=*
lines(#20008,#20001," import typeof t from ""m3"";","
")
#20009=@"loc,{#10000},3,1,3,28"
locations_default(#20009,#10000,3,1,3,28)
hasLocation(#20008,#20009)
indentation(#10000,3," ",2)
#20010=*
lines(#20010,#20001,"}","
")
#20011=@"loc,{#10000},4,1,4,1"
locations_default(#20011,#10000,4,1,4,1)
hasLocation(#20010,#20011)
numlines(#20001,4,4,0)
#20012=*
tokeninfo(#20012,6,#20001,0,"declare")
#20013=@"loc,{#10000},1,1,1,7"
locations_default(#20013,#10000,1,1,1,7)
hasLocation(#20012,#20013)
#20014=*
tokeninfo(#20014,6,#20001,1,"module")
#20015=@"loc,{#10000},1,9,1,14"
locations_default(#20015,#10000,1,9,1,14)
hasLocation(#20014,#20015)
#20016=*
tokeninfo(#20016,4,#20001,2,"""m1""")
#20017=@"loc,{#10000},1,16,1,19"
locations_default(#20017,#10000,1,16,1,19)
hasLocation(#20016,#20017)
#20018=*
tokeninfo(#20018,8,#20001,3,"{")
#20019=@"loc,{#10000},1,21,1,21"
locations_default(#20019,#10000,1,21,1,21)
hasLocation(#20018,#20019)
#20020=*
tokeninfo(#20020,7,#20001,4,"import")
#20021=@"loc,{#10000},2,3,2,8"
locations_default(#20021,#10000,2,3,2,8)
hasLocation(#20020,#20021)
#20022=*
tokeninfo(#20022,6,#20001,5,"type")
#20023=@"loc,{#10000},2,10,2,13"
locations_default(#20023,#10000,2,10,2,13)
hasLocation(#20022,#20023)
#20024=*
tokeninfo(#20024,6,#20001,6,"t")
#20025=@"loc,{#10000},2,15,2,15"
locations_default(#20025,#10000,2,15,2,15)
hasLocation(#20024,#20025)
#20026=*
tokeninfo(#20026,6,#20001,7,"from")
#20027=@"loc,{#10000},2,17,2,20"
locations_default(#20027,#10000,2,17,2,20)
hasLocation(#20026,#20027)
#20028=*
tokeninfo(#20028,4,#20001,8,"""m2""")
#20029=@"loc,{#10000},2,22,2,25"
locations_default(#20029,#10000,2,22,2,25)
hasLocation(#20028,#20029)
#20030=*
tokeninfo(#20030,8,#20001,9,";")
#20031=@"loc,{#10000},2,26,2,26"
locations_default(#20031,#10000,2,26,2,26)
hasLocation(#20030,#20031)
#20032=*
tokeninfo(#20032,7,#20001,10,"import")
#20033=@"loc,{#10000},3,3,3,8"
locations_default(#20033,#10000,3,3,3,8)
hasLocation(#20032,#20033)
#20034=*
tokeninfo(#20034,7,#20001,11,"typeof")
#20035=@"loc,{#10000},3,10,3,15"
locations_default(#20035,#10000,3,10,3,15)
hasLocation(#20034,#20035)
#20036=*
tokeninfo(#20036,6,#20001,12,"t")
#20037=@"loc,{#10000},3,17,3,17"
locations_default(#20037,#10000,3,17,3,17)
hasLocation(#20036,#20037)
#20038=*
tokeninfo(#20038,6,#20001,13,"from")
#20039=@"loc,{#10000},3,19,3,22"
locations_default(#20039,#10000,3,19,3,22)
hasLocation(#20038,#20039)
#20040=*
tokeninfo(#20040,4,#20001,14,"""m3""")
#20041=@"loc,{#10000},3,24,3,27"
locations_default(#20041,#10000,3,24,3,27)
hasLocation(#20040,#20041)
#20042=*
tokeninfo(#20042,8,#20001,15,";")
#20043=@"loc,{#10000},3,28,3,28"
locations_default(#20043,#10000,3,28,3,28)
hasLocation(#20042,#20043)
#20044=*
tokeninfo(#20044,8,#20001,16,"}")
hasLocation(#20044,#20011)
#20045=*
tokeninfo(#20045,0,#20001,17,"")
#20046=@"loc,{#10000},5,1,5,0"
locations_default(#20046,#10000,5,1,5,0)
hasLocation(#20045,#20046)
#20047=*
entry_cfg_node(#20047,#20001)
#20048=@"loc,{#10000},1,1,1,0"
locations_default(#20048,#10000,1,1,1,0)
hasLocation(#20047,#20048)
#20049=*
exit_cfg_node(#20049,#20001)
hasLocation(#20049,#20046)
successor(#20047,#20049)
numlines(#10000,4,4,0)
filetype(#10000,"javascript")

View File

@@ -0,0 +1,368 @@
#10000=@"/get-set-methods.js;sourcefile"
files(#10000,"/get-set-methods.js","get-set-methods","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,0"
locations_default(#20002,#10000,1,1,5,0)
hasLocation(#20001,#20002)
#20003=@"var;{C};{#20000}"
variables(#20003,"C",#20000)
#20004=@"local_type_name;{C};{#20000}"
local_type_names(#20004,"C",#20000)
#20005=*
stmts(#20005,26,#20001,0,"class C ... ) { }\n}")
#20006=@"loc,{#10000},1,1,4,1"
locations_default(#20006,#10000,1,1,4,1)
hasLocation(#20005,#20006)
stmtContainers(#20005,#20001)
#20007=*
exprs(#20007,78,#20005,0,"C")
#20008=@"loc,{#10000},1,7,1,7"
locations_default(#20008,#10000,1,7,1,7)
hasLocation(#20007,#20008)
enclosingStmt(#20007,#20005)
exprContainers(#20007,#20001)
literals("C","C",#20007)
decl(#20007,#20003)
typedecl(#20007,#20004)
#20009=*
scopes(#20009,10)
scopenodes(#20005,#20009)
scopenesting(#20009,#20000)
#20010=*
properties(#20010,#20005,2,0,"get<T>(v: T) { }")
#20011=@"loc,{#10000},2,5,2,20"
locations_default(#20011,#10000,2,5,2,20)
hasLocation(#20010,#20011)
#20012=*
exprs(#20012,0,#20010,0,"get")
#20013=@"loc,{#10000},2,5,2,7"
locations_default(#20013,#10000,2,5,2,7)
hasLocation(#20012,#20013)
enclosingStmt(#20012,#20005)
exprContainers(#20012,#20001)
literals("get","get",#20012)
#20014=*
exprs(#20014,9,#20010,1,"(v: T) { }")
#20015=@"loc,{#10000},2,11,2,20"
locations_default(#20015,#10000,2,11,2,20)
hasLocation(#20014,#20015)
enclosingStmt(#20014,#20005)
exprContainers(#20014,#20001)
#20016=*
scopes(#20016,1)
scopenodes(#20014,#20016)
scopenesting(#20016,#20009)
#20017=@"var;{v};{#20016}"
variables(#20017,"v",#20016)
#20018=*
exprs(#20018,78,#20014,0,"v: T")
#20019=@"loc,{#10000},2,12,2,15"
locations_default(#20019,#10000,2,12,2,15)
hasLocation(#20018,#20019)
exprContainers(#20018,#20014)
literals("v","v",#20018)
decl(#20018,#20017)
#20020=@"var;{arguments};{#20016}"
variables(#20020,"arguments",#20016)
isArgumentsObject(#20020)
#20021=*
stmts(#20021,1,#20014,-2,"{ }")
#20022=@"loc,{#10000},2,18,2,20"
locations_default(#20022,#10000,2,18,2,20)
hasLocation(#20021,#20022)
stmtContainers(#20021,#20014)
numlines(#20014,1,1,0)
isMethod(#20010)
#20023=*
properties(#20023,#20005,3,0,"set<T>(v: T) { }")
#20024=@"loc,{#10000},3,5,3,20"
locations_default(#20024,#10000,3,5,3,20)
hasLocation(#20023,#20024)
#20025=*
exprs(#20025,0,#20023,0,"set")
#20026=@"loc,{#10000},3,5,3,7"
locations_default(#20026,#10000,3,5,3,7)
hasLocation(#20025,#20026)
enclosingStmt(#20025,#20005)
exprContainers(#20025,#20001)
literals("set","set",#20025)
#20027=*
exprs(#20027,9,#20023,1,"(v: T) { }")
#20028=@"loc,{#10000},3,11,3,20"
locations_default(#20028,#10000,3,11,3,20)
hasLocation(#20027,#20028)
enclosingStmt(#20027,#20005)
exprContainers(#20027,#20001)
#20029=*
scopes(#20029,1)
scopenodes(#20027,#20029)
scopenesting(#20029,#20009)
#20030=@"var;{v};{#20029}"
variables(#20030,"v",#20029)
#20031=*
exprs(#20031,78,#20027,0,"v: T")
#20032=@"loc,{#10000},3,12,3,15"
locations_default(#20032,#10000,3,12,3,15)
hasLocation(#20031,#20032)
exprContainers(#20031,#20027)
literals("v","v",#20031)
decl(#20031,#20030)
#20033=@"var;{arguments};{#20029}"
variables(#20033,"arguments",#20029)
isArgumentsObject(#20033)
#20034=*
stmts(#20034,1,#20027,-2,"{ }")
#20035=@"loc,{#10000},3,18,3,20"
locations_default(#20035,#10000,3,18,3,20)
hasLocation(#20034,#20035)
stmtContainers(#20034,#20027)
numlines(#20027,1,1,0)
isMethod(#20023)
#20036=*
properties(#20036,#20005,4,0,"constructor() {}")
#20037=@"loc,{#10000},1,9,1,8"
locations_default(#20037,#10000,1,9,1,8)
hasLocation(#20036,#20037)
#20038=*
exprs(#20038,0,#20036,0,"constructor")
hasLocation(#20038,#20037)
enclosingStmt(#20038,#20005)
exprContainers(#20038,#20001)
literals("constructor","constructor",#20038)
#20039=*
exprs(#20039,9,#20036,1,"() {}")
hasLocation(#20039,#20037)
enclosingStmt(#20039,#20005)
exprContainers(#20039,#20001)
#20040=*
scopes(#20040,1)
scopenodes(#20039,#20040)
scopenesting(#20040,#20009)
#20041=@"var;{arguments};{#20040}"
variables(#20041,"arguments",#20040)
isArgumentsObject(#20041)
#20042=*
stmts(#20042,1,#20039,-2,"{}")
hasLocation(#20042,#20037)
stmtContainers(#20042,#20039)
numlines(#20039,1,0,0)
isMethod(#20036)
#20043=*
lines(#20043,#20001,"class C {","
")
#20044=@"loc,{#10000},1,1,1,9"
locations_default(#20044,#10000,1,1,1,9)
hasLocation(#20043,#20044)
#20045=*
lines(#20045,#20001," get<T>(v: T) { }","
")
#20046=@"loc,{#10000},2,1,2,20"
locations_default(#20046,#10000,2,1,2,20)
hasLocation(#20045,#20046)
indentation(#10000,2," ",4)
#20047=*
lines(#20047,#20001," set<T>(v: T) { }","
")
#20048=@"loc,{#10000},3,1,3,20"
locations_default(#20048,#10000,3,1,3,20)
hasLocation(#20047,#20048)
indentation(#10000,3," ",4)
#20049=*
lines(#20049,#20001,"}","
")
#20050=@"loc,{#10000},4,1,4,1"
locations_default(#20050,#10000,4,1,4,1)
hasLocation(#20049,#20050)
numlines(#20001,4,4,0)
#20051=*
tokeninfo(#20051,7,#20001,0,"class")
#20052=@"loc,{#10000},1,1,1,5"
locations_default(#20052,#10000,1,1,1,5)
hasLocation(#20051,#20052)
#20053=*
tokeninfo(#20053,6,#20001,1,"C")
hasLocation(#20053,#20008)
#20054=*
tokeninfo(#20054,8,#20001,2,"{")
#20055=@"loc,{#10000},1,9,1,9"
locations_default(#20055,#10000,1,9,1,9)
hasLocation(#20054,#20055)
#20056=*
tokeninfo(#20056,6,#20001,3,"get")
hasLocation(#20056,#20013)
#20057=*
tokeninfo(#20057,8,#20001,4,"<")
#20058=@"loc,{#10000},2,8,2,8"
locations_default(#20058,#10000,2,8,2,8)
hasLocation(#20057,#20058)
#20059=*
tokeninfo(#20059,6,#20001,5,"T")
#20060=@"loc,{#10000},2,9,2,9"
locations_default(#20060,#10000,2,9,2,9)
hasLocation(#20059,#20060)
#20061=*
tokeninfo(#20061,8,#20001,6,">")
#20062=@"loc,{#10000},2,10,2,10"
locations_default(#20062,#10000,2,10,2,10)
hasLocation(#20061,#20062)
#20063=*
tokeninfo(#20063,8,#20001,7,"(")
#20064=@"loc,{#10000},2,11,2,11"
locations_default(#20064,#10000,2,11,2,11)
hasLocation(#20063,#20064)
#20065=*
tokeninfo(#20065,6,#20001,8,"v")
#20066=@"loc,{#10000},2,12,2,12"
locations_default(#20066,#10000,2,12,2,12)
hasLocation(#20065,#20066)
#20067=*
tokeninfo(#20067,8,#20001,9,":")
#20068=@"loc,{#10000},2,13,2,13"
locations_default(#20068,#10000,2,13,2,13)
hasLocation(#20067,#20068)
#20069=*
tokeninfo(#20069,6,#20001,10,"T")
#20070=@"loc,{#10000},2,15,2,15"
locations_default(#20070,#10000,2,15,2,15)
hasLocation(#20069,#20070)
#20071=*
tokeninfo(#20071,8,#20001,11,")")
#20072=@"loc,{#10000},2,16,2,16"
locations_default(#20072,#10000,2,16,2,16)
hasLocation(#20071,#20072)
#20073=*
tokeninfo(#20073,8,#20001,12,"{")
#20074=@"loc,{#10000},2,18,2,18"
locations_default(#20074,#10000,2,18,2,18)
hasLocation(#20073,#20074)
#20075=*
tokeninfo(#20075,8,#20001,13,"}")
#20076=@"loc,{#10000},2,20,2,20"
locations_default(#20076,#10000,2,20,2,20)
hasLocation(#20075,#20076)
#20077=*
tokeninfo(#20077,6,#20001,14,"set")
hasLocation(#20077,#20026)
#20078=*
tokeninfo(#20078,8,#20001,15,"<")
#20079=@"loc,{#10000},3,8,3,8"
locations_default(#20079,#10000,3,8,3,8)
hasLocation(#20078,#20079)
#20080=*
tokeninfo(#20080,6,#20001,16,"T")
#20081=@"loc,{#10000},3,9,3,9"
locations_default(#20081,#10000,3,9,3,9)
hasLocation(#20080,#20081)
#20082=*
tokeninfo(#20082,8,#20001,17,">")
#20083=@"loc,{#10000},3,10,3,10"
locations_default(#20083,#10000,3,10,3,10)
hasLocation(#20082,#20083)
#20084=*
tokeninfo(#20084,8,#20001,18,"(")
#20085=@"loc,{#10000},3,11,3,11"
locations_default(#20085,#10000,3,11,3,11)
hasLocation(#20084,#20085)
#20086=*
tokeninfo(#20086,6,#20001,19,"v")
#20087=@"loc,{#10000},3,12,3,12"
locations_default(#20087,#10000,3,12,3,12)
hasLocation(#20086,#20087)
#20088=*
tokeninfo(#20088,8,#20001,20,":")
#20089=@"loc,{#10000},3,13,3,13"
locations_default(#20089,#10000,3,13,3,13)
hasLocation(#20088,#20089)
#20090=*
tokeninfo(#20090,6,#20001,21,"T")
#20091=@"loc,{#10000},3,15,3,15"
locations_default(#20091,#10000,3,15,3,15)
hasLocation(#20090,#20091)
#20092=*
tokeninfo(#20092,8,#20001,22,")")
#20093=@"loc,{#10000},3,16,3,16"
locations_default(#20093,#10000,3,16,3,16)
hasLocation(#20092,#20093)
#20094=*
tokeninfo(#20094,8,#20001,23,"{")
#20095=@"loc,{#10000},3,18,3,18"
locations_default(#20095,#10000,3,18,3,18)
hasLocation(#20094,#20095)
#20096=*
tokeninfo(#20096,8,#20001,24,"}")
#20097=@"loc,{#10000},3,20,3,20"
locations_default(#20097,#10000,3,20,3,20)
hasLocation(#20096,#20097)
#20098=*
tokeninfo(#20098,8,#20001,25,"}")
hasLocation(#20098,#20050)
#20099=*
tokeninfo(#20099,0,#20001,26,"")
#20100=@"loc,{#10000},5,1,5,0"
locations_default(#20100,#10000,5,1,5,0)
hasLocation(#20099,#20100)
#20101=*
entry_cfg_node(#20101,#20001)
#20102=@"loc,{#10000},1,1,1,0"
locations_default(#20102,#10000,1,1,1,0)
hasLocation(#20101,#20102)
#20103=*
exit_cfg_node(#20103,#20001)
hasLocation(#20103,#20100)
successor(#20039,#20036)
#20104=*
entry_cfg_node(#20104,#20039)
hasLocation(#20104,#20037)
#20105=*
exit_cfg_node(#20105,#20039)
hasLocation(#20105,#20037)
successor(#20042,#20105)
successor(#20104,#20042)
successor(#20038,#20039)
successor(#20036,#20005)
successor(#20027,#20023)
#20106=*
entry_cfg_node(#20106,#20027)
#20107=@"loc,{#10000},3,11,3,10"
locations_default(#20107,#10000,3,11,3,10)
hasLocation(#20106,#20107)
#20108=*
exit_cfg_node(#20108,#20027)
#20109=@"loc,{#10000},3,21,3,20"
locations_default(#20109,#10000,3,21,3,20)
hasLocation(#20108,#20109)
successor(#20034,#20108)
successor(#20031,#20034)
successor(#20106,#20031)
successor(#20025,#20027)
successor(#20023,#20038)
successor(#20014,#20010)
#20110=*
entry_cfg_node(#20110,#20014)
#20111=@"loc,{#10000},2,11,2,10"
locations_default(#20111,#10000,2,11,2,10)
hasLocation(#20110,#20111)
#20112=*
exit_cfg_node(#20112,#20014)
#20113=@"loc,{#10000},2,21,2,20"
locations_default(#20113,#10000,2,21,2,20)
hasLocation(#20112,#20113)
successor(#20021,#20112)
successor(#20018,#20021)
successor(#20110,#20018)
successor(#20012,#20014)
successor(#20010,#20025)
successor(#20007,#20012)
successor(#20005,#20103)
successor(#20101,#20007)
numlines(#10000,4,4,0)
filetype(#10000,"javascript")

View File

@@ -0,0 +1,539 @@
#10000=@"/predicate-function-annotation.js;sourcefile"
files(#10000,"/predicate-function-annotation.js","predicate-function-annotation","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,10,0"
locations_default(#20002,#10000,1,1,10,0)
hasLocation(#20001,#20002)
#20003=@"var;{f};{#20000}"
variables(#20003,"f",#20000)
#20004=@"var;{g};{#20000}"
variables(#20004,"g",#20000)
#20005=*
stmts(#20005,17,#20001,0,"functio ... rn a;\n}")
#20006=@"loc,{#10000},1,1,3,1"
locations_default(#20006,#10000,1,1,3,1)
hasLocation(#20005,#20006)
stmtContainers(#20005,#20001)
#20007=*
exprs(#20007,78,#20005,-1,"f")
#20008=@"loc,{#10000},1,10,1,10"
locations_default(#20008,#10000,1,10,1,10)
hasLocation(#20007,#20008)
exprContainers(#20007,#20005)
literals("f","f",#20007)
decl(#20007,#20003)
#20009=*
scopes(#20009,1)
scopenodes(#20005,#20009)
scopenesting(#20009,#20000)
#20010=@"var;{a};{#20009}"
variables(#20010,"a",#20009)
#20011=*
exprs(#20011,78,#20005,0,"a")
#20012=@"loc,{#10000},1,12,1,12"
locations_default(#20012,#10000,1,12,1,12)
hasLocation(#20011,#20012)
exprContainers(#20011,#20005)
literals("a","a",#20011)
decl(#20011,#20010)
#20013=@"var;{arguments};{#20009}"
variables(#20013,"arguments",#20009)
isArgumentsObject(#20013)
#20014=*
stmts(#20014,1,#20005,-2,"{\n return a;\n}")
#20015=@"loc,{#10000},1,32,3,1"
locations_default(#20015,#10000,1,32,3,1)
hasLocation(#20014,#20015)
stmtContainers(#20014,#20005)
#20016=*
stmts(#20016,9,#20014,0,"return a;")
#20017=@"loc,{#10000},2,5,2,13"
locations_default(#20017,#10000,2,5,2,13)
hasLocation(#20016,#20017)
stmtContainers(#20016,#20005)
#20018=*
exprs(#20018,79,#20016,0,"a")
#20019=@"loc,{#10000},2,12,2,12"
locations_default(#20019,#10000,2,12,2,12)
hasLocation(#20018,#20019)
enclosingStmt(#20018,#20016)
exprContainers(#20018,#20005)
literals("a","a",#20018)
bind(#20018,#20010)
numlines(#20005,3,3,0)
#20020=*
stmts(#20020,17,#20001,1,"functio ... ecks {}")
#20021=@"loc,{#10000},4,1,4,24"
locations_default(#20021,#10000,4,1,4,24)
hasLocation(#20020,#20021)
stmtContainers(#20020,#20001)
#20022=*
exprs(#20022,78,#20020,-1,"g")
#20023=@"loc,{#10000},4,10,4,10"
locations_default(#20023,#10000,4,10,4,10)
hasLocation(#20022,#20023)
exprContainers(#20022,#20020)
literals("g","g",#20022)
decl(#20022,#20004)
#20024=*
scopes(#20024,1)
scopenodes(#20020,#20024)
scopenesting(#20024,#20000)
#20025=@"var;{arguments};{#20024}"
variables(#20025,"arguments",#20024)
isArgumentsObject(#20025)
#20026=*
stmts(#20026,1,#20020,-2,"{}")
#20027=@"loc,{#10000},4,23,4,24"
locations_default(#20027,#10000,4,23,4,24)
hasLocation(#20026,#20027)
stmtContainers(#20026,#20020)
numlines(#20020,1,1,0)
#20028=*
stmts(#20028,1,#20001,2,"{\n return b;\n}")
#20029=@"loc,{#10000},4,26,6,1"
locations_default(#20029,#10000,4,26,6,1)
hasLocation(#20028,#20029)
stmtContainers(#20028,#20001)
#20030=*
stmts(#20030,9,#20028,0,"return b;")
#20031=@"loc,{#10000},5,5,5,13"
locations_default(#20031,#10000,5,5,5,13)
hasLocation(#20030,#20031)
stmtContainers(#20030,#20001)
#20032=*
exprs(#20032,79,#20030,0,"b")
#20033=@"loc,{#10000},5,12,5,12"
locations_default(#20033,#10000,5,12,5,12)
hasLocation(#20032,#20033)
enclosingStmt(#20032,#20030)
exprContainers(#20032,#20001)
literals("b","b",#20032)
#20034=@"var;{b};{#20000}"
variables(#20034,"b",#20000)
bind(#20032,#20034)
#20035=*
stmts(#20035,2,#20001,3,"(c): bo ... s => c;")
#20036=@"loc,{#10000},8,1,8,26"
locations_default(#20036,#10000,8,1,8,26)
hasLocation(#20035,#20036)
stmtContainers(#20035,#20001)
#20037=*
exprs(#20037,65,#20035,0,"(c): bo ... ks => c")
#20038=@"loc,{#10000},8,1,8,25"
locations_default(#20038,#10000,8,1,8,25)
hasLocation(#20037,#20038)
enclosingStmt(#20037,#20035)
exprContainers(#20037,#20001)
#20039=*
scopes(#20039,1)
scopenodes(#20037,#20039)
scopenesting(#20039,#20000)
#20040=@"var;{c};{#20039}"
variables(#20040,"c",#20039)
#20041=*
exprs(#20041,78,#20037,0,"c")
#20042=@"loc,{#10000},8,2,8,2"
locations_default(#20042,#10000,8,2,8,2)
hasLocation(#20041,#20042)
exprContainers(#20041,#20037)
literals("c","c",#20041)
decl(#20041,#20040)
#20043=*
exprs(#20043,79,#20037,-2,"c")
#20044=@"loc,{#10000},8,25,8,25"
locations_default(#20044,#10000,8,25,8,25)
hasLocation(#20043,#20044)
exprContainers(#20043,#20037)
literals("c","c",#20043)
bind(#20043,#20040)
numlines(#20037,1,1,0)
#20045=*
stmts(#20045,2,#20001,4,"(d): %checks => d;")
#20046=@"loc,{#10000},9,1,9,18"
locations_default(#20046,#10000,9,1,9,18)
hasLocation(#20045,#20046)
stmtContainers(#20045,#20001)
#20047=*
exprs(#20047,65,#20045,0,"(d): %checks => d")
#20048=@"loc,{#10000},9,1,9,17"
locations_default(#20048,#10000,9,1,9,17)
hasLocation(#20047,#20048)
enclosingStmt(#20047,#20045)
exprContainers(#20047,#20001)
#20049=*
scopes(#20049,1)
scopenodes(#20047,#20049)
scopenesting(#20049,#20000)
#20050=@"var;{d};{#20049}"
variables(#20050,"d",#20049)
#20051=*
exprs(#20051,78,#20047,0,"d")
#20052=@"loc,{#10000},9,2,9,2"
locations_default(#20052,#10000,9,2,9,2)
hasLocation(#20051,#20052)
exprContainers(#20051,#20047)
literals("d","d",#20051)
decl(#20051,#20050)
#20053=*
exprs(#20053,79,#20047,-2,"d")
#20054=@"loc,{#10000},9,17,9,17"
locations_default(#20054,#10000,9,17,9,17)
hasLocation(#20053,#20054)
exprContainers(#20053,#20047)
literals("d","d",#20053)
bind(#20053,#20050)
numlines(#20047,1,1,0)
#20055=*
lines(#20055,#20001,"function f(a): boolean %checks {","
")
#20056=@"loc,{#10000},1,1,1,32"
locations_default(#20056,#10000,1,1,1,32)
hasLocation(#20055,#20056)
#20057=*
lines(#20057,#20001," return a;","
")
#20058=@"loc,{#10000},2,1,2,13"
locations_default(#20058,#10000,2,1,2,13)
hasLocation(#20057,#20058)
indentation(#10000,2," ",4)
#20059=*
lines(#20059,#20001,"}","
")
#20060=@"loc,{#10000},3,1,3,1"
locations_default(#20060,#10000,3,1,3,1)
hasLocation(#20059,#20060)
#20061=*
lines(#20061,#20001,"function g(): %checks {} {","
")
#20062=@"loc,{#10000},4,1,4,26"
locations_default(#20062,#10000,4,1,4,26)
hasLocation(#20061,#20062)
#20063=*
lines(#20063,#20001," return b;","
")
#20064=@"loc,{#10000},5,1,5,13"
locations_default(#20064,#10000,5,1,5,13)
hasLocation(#20063,#20064)
indentation(#10000,5," ",4)
#20065=*
lines(#20065,#20001,"}","
")
#20066=@"loc,{#10000},6,1,6,1"
locations_default(#20066,#10000,6,1,6,1)
hasLocation(#20065,#20066)
#20067=*
lines(#20067,#20001,"","
")
#20068=@"loc,{#10000},7,1,7,0"
locations_default(#20068,#10000,7,1,7,0)
hasLocation(#20067,#20068)
#20069=*
lines(#20069,#20001,"(c): boolean %checks => c;","
")
hasLocation(#20069,#20036)
#20070=*
lines(#20070,#20001,"(d): %checks => d;","
")
hasLocation(#20070,#20046)
numlines(#20001,9,8,0)
#20071=*
tokeninfo(#20071,7,#20001,0,"function")
#20072=@"loc,{#10000},1,1,1,8"
locations_default(#20072,#10000,1,1,1,8)
hasLocation(#20071,#20072)
#20073=*
tokeninfo(#20073,6,#20001,1,"f")
hasLocation(#20073,#20008)
#20074=*
tokeninfo(#20074,8,#20001,2,"(")
#20075=@"loc,{#10000},1,11,1,11"
locations_default(#20075,#10000,1,11,1,11)
hasLocation(#20074,#20075)
#20076=*
tokeninfo(#20076,6,#20001,3,"a")
hasLocation(#20076,#20012)
#20077=*
tokeninfo(#20077,8,#20001,4,")")
#20078=@"loc,{#10000},1,13,1,13"
locations_default(#20078,#10000,1,13,1,13)
hasLocation(#20077,#20078)
#20079=*
tokeninfo(#20079,8,#20001,5,":")
#20080=@"loc,{#10000},1,14,1,14"
locations_default(#20080,#10000,1,14,1,14)
hasLocation(#20079,#20080)
#20081=*
tokeninfo(#20081,6,#20001,6,"boolean")
#20082=@"loc,{#10000},1,16,1,22"
locations_default(#20082,#10000,1,16,1,22)
hasLocation(#20081,#20082)
#20083=*
tokeninfo(#20083,8,#20001,7,"%")
#20084=@"loc,{#10000},1,24,1,24"
locations_default(#20084,#10000,1,24,1,24)
hasLocation(#20083,#20084)
#20085=*
tokeninfo(#20085,6,#20001,8,"checks")
#20086=@"loc,{#10000},1,25,1,30"
locations_default(#20086,#10000,1,25,1,30)
hasLocation(#20085,#20086)
#20087=*
tokeninfo(#20087,8,#20001,9,"{")
#20088=@"loc,{#10000},1,32,1,32"
locations_default(#20088,#10000,1,32,1,32)
hasLocation(#20087,#20088)
#20089=*
tokeninfo(#20089,7,#20001,10,"return")
#20090=@"loc,{#10000},2,5,2,10"
locations_default(#20090,#10000,2,5,2,10)
hasLocation(#20089,#20090)
#20091=*
tokeninfo(#20091,6,#20001,11,"a")
hasLocation(#20091,#20019)
#20092=*
tokeninfo(#20092,8,#20001,12,";")
#20093=@"loc,{#10000},2,13,2,13"
locations_default(#20093,#10000,2,13,2,13)
hasLocation(#20092,#20093)
#20094=*
tokeninfo(#20094,8,#20001,13,"}")
hasLocation(#20094,#20060)
#20095=*
tokeninfo(#20095,7,#20001,14,"function")
#20096=@"loc,{#10000},4,1,4,8"
locations_default(#20096,#10000,4,1,4,8)
hasLocation(#20095,#20096)
#20097=*
tokeninfo(#20097,6,#20001,15,"g")
hasLocation(#20097,#20023)
#20098=*
tokeninfo(#20098,8,#20001,16,"(")
#20099=@"loc,{#10000},4,11,4,11"
locations_default(#20099,#10000,4,11,4,11)
hasLocation(#20098,#20099)
#20100=*
tokeninfo(#20100,8,#20001,17,")")
#20101=@"loc,{#10000},4,12,4,12"
locations_default(#20101,#10000,4,12,4,12)
hasLocation(#20100,#20101)
#20102=*
tokeninfo(#20102,8,#20001,18,":")
#20103=@"loc,{#10000},4,13,4,13"
locations_default(#20103,#10000,4,13,4,13)
hasLocation(#20102,#20103)
#20104=*
tokeninfo(#20104,8,#20001,19,"%")
#20105=@"loc,{#10000},4,15,4,15"
locations_default(#20105,#10000,4,15,4,15)
hasLocation(#20104,#20105)
#20106=*
tokeninfo(#20106,6,#20001,20,"checks")
#20107=@"loc,{#10000},4,16,4,21"
locations_default(#20107,#10000,4,16,4,21)
hasLocation(#20106,#20107)
#20108=*
tokeninfo(#20108,8,#20001,21,"{")
#20109=@"loc,{#10000},4,23,4,23"
locations_default(#20109,#10000,4,23,4,23)
hasLocation(#20108,#20109)
#20110=*
tokeninfo(#20110,8,#20001,22,"}")
#20111=@"loc,{#10000},4,24,4,24"
locations_default(#20111,#10000,4,24,4,24)
hasLocation(#20110,#20111)
#20112=*
tokeninfo(#20112,8,#20001,23,"{")
#20113=@"loc,{#10000},4,26,4,26"
locations_default(#20113,#10000,4,26,4,26)
hasLocation(#20112,#20113)
#20114=*
tokeninfo(#20114,7,#20001,24,"return")
#20115=@"loc,{#10000},5,5,5,10"
locations_default(#20115,#10000,5,5,5,10)
hasLocation(#20114,#20115)
#20116=*
tokeninfo(#20116,6,#20001,25,"b")
hasLocation(#20116,#20033)
#20117=*
tokeninfo(#20117,8,#20001,26,";")
#20118=@"loc,{#10000},5,13,5,13"
locations_default(#20118,#10000,5,13,5,13)
hasLocation(#20117,#20118)
#20119=*
tokeninfo(#20119,8,#20001,27,"}")
hasLocation(#20119,#20066)
#20120=*
tokeninfo(#20120,8,#20001,28,"(")
#20121=@"loc,{#10000},8,1,8,1"
locations_default(#20121,#10000,8,1,8,1)
hasLocation(#20120,#20121)
#20122=*
tokeninfo(#20122,6,#20001,29,"c")
hasLocation(#20122,#20042)
#20123=*
tokeninfo(#20123,8,#20001,30,")")
#20124=@"loc,{#10000},8,3,8,3"
locations_default(#20124,#10000,8,3,8,3)
hasLocation(#20123,#20124)
#20125=*
tokeninfo(#20125,8,#20001,31,":")
#20126=@"loc,{#10000},8,4,8,4"
locations_default(#20126,#10000,8,4,8,4)
hasLocation(#20125,#20126)
#20127=*
tokeninfo(#20127,6,#20001,32,"boolean")
#20128=@"loc,{#10000},8,6,8,12"
locations_default(#20128,#10000,8,6,8,12)
hasLocation(#20127,#20128)
#20129=*
tokeninfo(#20129,8,#20001,33,"%")
#20130=@"loc,{#10000},8,14,8,14"
locations_default(#20130,#10000,8,14,8,14)
hasLocation(#20129,#20130)
#20131=*
tokeninfo(#20131,6,#20001,34,"checks")
#20132=@"loc,{#10000},8,15,8,20"
locations_default(#20132,#10000,8,15,8,20)
hasLocation(#20131,#20132)
#20133=*
tokeninfo(#20133,8,#20001,35,"=>")
#20134=@"loc,{#10000},8,22,8,23"
locations_default(#20134,#10000,8,22,8,23)
hasLocation(#20133,#20134)
#20135=*
tokeninfo(#20135,6,#20001,36,"c")
hasLocation(#20135,#20044)
#20136=*
tokeninfo(#20136,8,#20001,37,";")
#20137=@"loc,{#10000},8,26,8,26"
locations_default(#20137,#10000,8,26,8,26)
hasLocation(#20136,#20137)
#20138=*
tokeninfo(#20138,8,#20001,38,"(")
#20139=@"loc,{#10000},9,1,9,1"
locations_default(#20139,#10000,9,1,9,1)
hasLocation(#20138,#20139)
#20140=*
tokeninfo(#20140,6,#20001,39,"d")
hasLocation(#20140,#20052)
#20141=*
tokeninfo(#20141,8,#20001,40,")")
#20142=@"loc,{#10000},9,3,9,3"
locations_default(#20142,#10000,9,3,9,3)
hasLocation(#20141,#20142)
#20143=*
tokeninfo(#20143,8,#20001,41,":")
#20144=@"loc,{#10000},9,4,9,4"
locations_default(#20144,#10000,9,4,9,4)
hasLocation(#20143,#20144)
#20145=*
tokeninfo(#20145,8,#20001,42,"%")
#20146=@"loc,{#10000},9,6,9,6"
locations_default(#20146,#10000,9,6,9,6)
hasLocation(#20145,#20146)
#20147=*
tokeninfo(#20147,6,#20001,43,"checks")
#20148=@"loc,{#10000},9,7,9,12"
locations_default(#20148,#10000,9,7,9,12)
hasLocation(#20147,#20148)
#20149=*
tokeninfo(#20149,8,#20001,44,"=>")
#20150=@"loc,{#10000},9,14,9,15"
locations_default(#20150,#10000,9,14,9,15)
hasLocation(#20149,#20150)
#20151=*
tokeninfo(#20151,6,#20001,45,"d")
hasLocation(#20151,#20054)
#20152=*
tokeninfo(#20152,8,#20001,46,";")
#20153=@"loc,{#10000},9,18,9,18"
locations_default(#20153,#10000,9,18,9,18)
hasLocation(#20152,#20153)
#20154=*
tokeninfo(#20154,0,#20001,47,"")
#20155=@"loc,{#10000},10,1,10,0"
locations_default(#20155,#10000,10,1,10,0)
hasLocation(#20154,#20155)
#20156=*
entry_cfg_node(#20156,#20001)
#20157=@"loc,{#10000},1,1,1,0"
locations_default(#20157,#10000,1,1,1,0)
hasLocation(#20156,#20157)
#20158=*
exit_cfg_node(#20158,#20001)
hasLocation(#20158,#20155)
successor(#20045,#20047)
successor(#20047,#20158)
#20159=*
entry_cfg_node(#20159,#20047)
#20160=@"loc,{#10000},9,1,9,0"
locations_default(#20160,#10000,9,1,9,0)
hasLocation(#20159,#20160)
#20161=*
exit_cfg_node(#20161,#20047)
#20162=@"loc,{#10000},9,18,9,17"
locations_default(#20162,#10000,9,18,9,17)
hasLocation(#20161,#20162)
successor(#20053,#20161)
successor(#20051,#20053)
successor(#20159,#20051)
successor(#20035,#20037)
successor(#20037,#20045)
#20163=*
entry_cfg_node(#20163,#20037)
#20164=@"loc,{#10000},8,1,8,0"
locations_default(#20164,#10000,8,1,8,0)
hasLocation(#20163,#20164)
#20165=*
exit_cfg_node(#20165,#20037)
#20166=@"loc,{#10000},8,26,8,25"
locations_default(#20166,#10000,8,26,8,25)
hasLocation(#20165,#20166)
successor(#20043,#20165)
successor(#20041,#20043)
successor(#20163,#20041)
successor(#20028,#20032)
successor(#20032,#20030)
successor(#20030,#20158)
successor(#20020,#20028)
#20167=*
entry_cfg_node(#20167,#20020)
#20168=@"loc,{#10000},4,1,4,0"
locations_default(#20168,#10000,4,1,4,0)
hasLocation(#20167,#20168)
#20169=*
exit_cfg_node(#20169,#20020)
#20170=@"loc,{#10000},4,25,4,24"
locations_default(#20170,#10000,4,25,4,24)
hasLocation(#20169,#20170)
successor(#20026,#20169)
successor(#20167,#20026)
successor(#20005,#20020)
#20171=*
entry_cfg_node(#20171,#20005)
hasLocation(#20171,#20157)
#20172=*
exit_cfg_node(#20172,#20005)
#20173=@"loc,{#10000},3,2,3,1"
locations_default(#20173,#10000,3,2,3,1)
hasLocation(#20172,#20173)
successor(#20014,#20018)
successor(#20018,#20016)
successor(#20016,#20172)
successor(#20011,#20014)
successor(#20171,#20011)
successor(#20022,#20005)
successor(#20007,#20022)
successor(#20156,#20007)
numlines(#10000,9,8,0)
filetype(#10000,"javascript")