UNPKG

1.43 kBJavaScriptView Raw
1require("./core");
2var types = require("../lib/types");
3var def = types.Type.def;
4var or = types.Type.or;
5var shared = require("../lib/shared");
6var geq = shared.geq;
7var defaults = shared.defaults;
8
9def("Function")
10 // SpiderMonkey allows expression closures: function(x) x+1
11 .field("body", or(def("BlockStatement"), def("Expression")));
12
13def("ForInStatement")
14 .build("left", "right", "body", "each")
15 .field("each", Boolean, defaults["false"]);
16
17def("ForOfStatement")
18 .bases("Statement")
19 .build("left", "right", "body")
20 .field("left", or(
21 def("VariableDeclaration"),
22 def("Expression")))
23 .field("right", def("Expression"))
24 .field("body", def("Statement"));
25
26def("LetStatement")
27 .bases("Statement")
28 .build("head", "body")
29 // TODO Deviating from the spec by reusing VariableDeclarator here.
30 .field("head", [def("VariableDeclarator")])
31 .field("body", def("Statement"));
32
33def("LetExpression")
34 .bases("Expression")
35 .build("head", "body")
36 // TODO Deviating from the spec by reusing VariableDeclarator here.
37 .field("head", [def("VariableDeclarator")])
38 .field("body", def("Expression"));
39
40def("GraphExpression")
41 .bases("Expression")
42 .build("index", "expression")
43 .field("index", geq(0))
44 .field("expression", def("Literal"));
45
46def("GraphIndexExpression")
47 .bases("Expression")
48 .build("index")
49 .field("index", geq(0));