js-slang
Version:
Javascript-based implementations of Source, written in Typescript
50 lines • 2.25 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.auxiliaryBuiltinFunctions = void 0;
const acorn_1 = require("acorn");
const ArrowFunctionExpression_1 = require("../nodes/Expression/ArrowFunctionExpression");
const FunctionApplication_1 = require("../nodes/Expression/FunctionApplication");
exports.auxiliaryBuiltinFunctions = {
__access_export__: {
definition: (args) => {
const parsedProgram = (0, acorn_1.parse)(`
(exports, lookup_name) => {
if (lookup_name === "default") {
return head(exports);
} else {
const named_exports = tail(exports);
return __access_named_export__(named_exports, lookup_name);
}
}
`, { ecmaVersion: 10 });
const parsedExpressionStatement = parsedProgram.body[0];
const parsedExpression = parsedExpressionStatement.expression;
return new FunctionApplication_1.StepperFunctionApplication(ArrowFunctionExpression_1.StepperArrowFunctionExpression.create(parsedExpression), args);
},
arity: 2
},
__access_named_export__: {
definition: (args) => {
const parsedProgram = (0, acorn_1.parse)(`
(named_exports, lookup_name) => {
if (is_null(named_exports)) {
return undefined;
} else {
const name = head(head(named_exports));
const identifier = tail(head(named_exports));
if (name === lookup_name) {
return identifier;
} else {
return __access_named_export__(tail(named_exports), lookup_name);
}
}
}
`, { ecmaVersion: 10 });
const parsedExpressionStatement = parsedProgram.body[0];
const parsedExpression = parsedExpressionStatement.expression;
return new FunctionApplication_1.StepperFunctionApplication(ArrowFunctionExpression_1.StepperArrowFunctionExpression.create(parsedExpression), args);
},
arity: 2
}
};
//# sourceMappingURL=auxiliary.js.map
;