js-slang
Version:
Javascript-based implementations of Source, written in Typescript
196 lines • 5.52 kB
JavaScript
/* Library for building ESTree nodes. */
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeExportNamedDeclaration = exports.makeImportDeclaration = exports.makeImportSpecifier = exports.makeArrayExpression = exports.makeRestElement = exports.makeReturnStatement = exports.makeExpressionStatement = exports.makeAssignmentExpression = exports.makeConditionalExpression = exports.makeCallExpression = exports.makeBlockStatement = exports.makeArrowFunctionExpression = exports.makeLiteral = exports.makeIdentifier = exports.makeDeclaration = exports.makeProgram = void 0;
function makeProgram(body = []) {
// generate a good location based on the start of the first element of the body
// and its last, as long as the body is not empty
const loc = body.length > 0
? {
start: body[0].loc.start,
end: body[body.length - 1].loc.end,
}
: {
start: { line: 1, column: 0 },
end: { line: 1, column: 0 },
};
return {
type: "Program",
body,
sourceType: "module",
loc: loc,
};
}
exports.makeProgram = makeProgram;
function makeDeclaration(kind, id, init, loc) {
return {
type: "VariableDeclaration",
kind,
declarations: [
{
type: "VariableDeclarator",
id,
init,
},
],
loc: loc ? loc : id.loc,
};
}
exports.makeDeclaration = makeDeclaration;
function makeIdentifier(name, loc) {
return {
type: "Identifier",
name,
loc,
};
}
exports.makeIdentifier = makeIdentifier;
function makeLiteral(value, loc) {
return {
type: "Literal",
value,
raw: `"${value}"`,
loc,
};
}
exports.makeLiteral = makeLiteral;
function makeArrowFunctionExpression(params, body, loc) {
return {
type: "ArrowFunctionExpression",
params,
body,
async: false,
expression: body.type !== "BlockStatement",
loc: loc ? loc : body.loc,
};
}
exports.makeArrowFunctionExpression = makeArrowFunctionExpression;
function makeBlockStatement(body, loc) {
return {
type: "BlockStatement",
body,
loc: loc
? loc
: {
start: body[0].loc.start,
end: body[body.length - 1].loc.end,
},
};
}
exports.makeBlockStatement = makeBlockStatement;
function makeCallExpression(callee, args, loc) {
return {
type: "CallExpression",
optional: false,
callee,
arguments: args,
loc: loc
? loc
: {
start: callee.loc.start,
end: args[args.length - 1].loc.end,
},
};
}
exports.makeCallExpression = makeCallExpression;
function makeConditionalExpression(test, consequent, alternate, loc) {
return {
type: "ConditionalExpression",
test,
consequent,
alternate,
loc: loc
? loc
: {
start: test.loc.start,
end: alternate.loc.end,
},
};
}
exports.makeConditionalExpression = makeConditionalExpression;
function makeAssignmentExpression(left, right, loc) {
return {
type: "AssignmentExpression",
operator: "=",
left,
right,
loc: loc
? loc
: {
start: left.loc.start,
end: right.loc.end,
},
};
}
exports.makeAssignmentExpression = makeAssignmentExpression;
function makeExpressionStatement(expression, loc) {
return {
type: "ExpressionStatement",
expression,
loc: loc ? loc : expression.loc,
};
}
exports.makeExpressionStatement = makeExpressionStatement;
function makeReturnStatement(argument, loc) {
return {
type: "ReturnStatement",
argument,
loc: loc ? loc : argument.loc,
};
}
exports.makeReturnStatement = makeReturnStatement;
function makeRestElement(argument, loc) {
return {
type: "RestElement",
argument,
loc: loc ? loc : argument.loc,
};
}
exports.makeRestElement = makeRestElement;
function makeArrayExpression(elements, loc) {
return {
type: "ArrayExpression",
elements,
loc: loc
? loc
: {
start: elements[0].loc.start,
end: elements[elements.length - 1].loc.end,
},
};
}
exports.makeArrayExpression = makeArrayExpression;
function makeImportSpecifier(imported, local, loc) {
return {
type: "ImportSpecifier",
imported,
local,
loc: loc ? loc : imported.loc,
};
}
exports.makeImportSpecifier = makeImportSpecifier;
function makeImportDeclaration(specifiers, source, loc) {
return {
type: "ImportDeclaration",
specifiers,
source,
loc: loc
? loc
: {
start: specifiers[0].loc.start,
end: source.loc.end,
},
};
}
exports.makeImportDeclaration = makeImportDeclaration;
function makeExportNamedDeclaration(declaration, loc) {
return {
type: "ExportNamedDeclaration",
specifiers: [],
source: null,
declaration,
loc: loc ? loc : declaration.loc,
};
}
exports.makeExportNamedDeclaration = makeExportNamedDeclaration;
//# sourceMappingURL=estree-nodes.js.map
;