hopper
Version:
An interpreter for the Grace programming language
43 lines (33 loc) • 1.08 kB
JavaScript
var Task, prim, rt, util;
Task = require("../task");
prim = require("../runtime/primitives");
rt = require("../runtime");
util = require("../util");
// Top-level abstract Node constructor, used as a type in Grace.
function Node(located) {
this.location = located.location;
}
// A list of nodes, equivalent to a standard list but can also accept visitors.
function NodeList(nodes) {
Node.call(this, nodes[0]);
prim.List.call(this, nodes);
}
util.inherits(NodeList, prim.List);
NodeList.prototype.accept = rt.method("accept()", [[1, 1]], function (part) {
return Task.each(this.object.nodes, function (node) {
return node.accept(part);
}).then(function (list) {
return rt.list(list);
});
});
// Abstract statement constructor, used as a type in Grace.
function Statement(located) {
Node.call(this, located);
}
util.inherits(Statement, Node);
// Abstract expression constructor, used as a type in Grace.
// All expressions are valid statements.
function Expression(located) {
Statement.call(this, located);
}
util.inherits(Expression, Statement);