You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.2 KiB
JavaScript
44 lines
1.2 KiB
JavaScript
7 years ago
|
require("./core");
|
||
|
var types = require("../lib/types");
|
||
|
var def = types.Type.def;
|
||
|
var or = types.Type.or;
|
||
|
var geq = require("../lib/shared").geq;
|
||
|
|
||
|
def("Function")
|
||
|
// SpiderMonkey allows expression closures: function(x) x+1
|
||
|
.field("body", or(def("BlockStatement"), def("Expression")));
|
||
|
|
||
|
def("ForOfStatement")
|
||
|
.bases("Statement")
|
||
|
.build("left", "right", "body")
|
||
|
.field("left", or(
|
||
|
def("VariableDeclaration"),
|
||
|
def("Expression")))
|
||
|
.field("right", def("Expression"))
|
||
|
.field("body", def("Statement"));
|
||
|
|
||
|
def("LetStatement")
|
||
|
.bases("Statement")
|
||
|
.build("head", "body")
|
||
|
// TODO Deviating from the spec by reusing VariableDeclarator here.
|
||
|
.field("head", [def("VariableDeclarator")])
|
||
|
.field("body", def("Statement"));
|
||
|
|
||
|
def("LetExpression")
|
||
|
.bases("Expression")
|
||
|
.build("head", "body")
|
||
|
// TODO Deviating from the spec by reusing VariableDeclarator here.
|
||
|
.field("head", [def("VariableDeclarator")])
|
||
|
.field("body", def("Expression"));
|
||
|
|
||
|
def("GraphExpression")
|
||
|
.bases("Expression")
|
||
|
.build("index", "expression")
|
||
|
.field("index", geq(0))
|
||
|
.field("expression", def("Literal"));
|
||
|
|
||
|
def("GraphIndexExpression")
|
||
|
.bases("Expression")
|
||
|
.build("index")
|
||
|
.field("index", geq(0));
|