Don't use "objects" in lib/compiler/passes/generate-bytecode.js

The "objects" module will be removed.

See #442.
redux
David Majda 8 years ago
parent 97d92c9d8b
commit 8a75d19468

@ -1,7 +1,6 @@
"use strict"; "use strict";
let objects = require("../../utils/objects"), let asts = require("../asts"),
asts = require("../asts"),
visitor = require("../visitor"), visitor = require("../visitor"),
op = require("../opcodes"), op = require("../opcodes"),
js = require("../js"); js = require("../js");
@ -204,6 +203,16 @@ function generateBytecode(ast) {
); );
} }
function cloneEnv(env) {
let clone = {};
Object.keys(env).forEach(name => {
clone[name] = env[name];
});
return clone;
}
function buildSequence() { function buildSequence() {
return Array.prototype.concat.apply([], arguments); return Array.prototype.concat.apply([], arguments);
} }
@ -221,7 +230,7 @@ function generateBytecode(ast) {
} }
function buildCall(functionIndex, delta, env, sp) { function buildCall(functionIndex, delta, env, sp) {
let params = objects.values(env).map(p => sp - p); let params = Object.keys(env).map(name => sp - env[name]);
return [op.CALL, functionIndex, delta, params.length].concat(params); return [op.CALL, functionIndex, delta, params.length].concat(params);
} }
@ -232,7 +241,7 @@ function generateBytecode(ast) {
[op.SILENT_FAILS_ON], [op.SILENT_FAILS_ON],
generate(expression, { generate(expression, {
sp: context.sp + 1, sp: context.sp + 1,
env: objects.clone(context.env), env: cloneEnv(context.env),
action: null action: null
}), }),
[op.SILENT_FAILS_OFF], [op.SILENT_FAILS_OFF],
@ -318,7 +327,7 @@ function generateBytecode(ast) {
return buildSequence( return buildSequence(
generate(alternatives[0], { generate(alternatives[0], {
sp: context.sp, sp: context.sp,
env: objects.clone(context.env), env: cloneEnv(context.env),
action: null action: null
}), }),
alternatives.length > 1 alternatives.length > 1
@ -338,7 +347,7 @@ function generateBytecode(ast) {
}, },
action: function(node, context) { action: function(node, context) {
let env = objects.clone(context.env), let env = cloneEnv(context.env),
emitCall = node.expression.type !== "sequence" emitCall = node.expression.type !== "sequence"
|| node.expression.elements.length === 0, || node.expression.elements.length === 0,
expressionCode = generate(node.expression, { expressionCode = generate(node.expression, {
@ -424,7 +433,7 @@ function generateBytecode(ast) {
}, },
labeled: function(node, context) { labeled: function(node, context) {
let env = objects.clone(context.env); let env = cloneEnv(context.env);
context.env[node.label] = context.sp + 1; context.env[node.label] = context.sp + 1;
@ -440,7 +449,7 @@ function generateBytecode(ast) {
[op.PUSH_CURR_POS], [op.PUSH_CURR_POS],
generate(node.expression, { generate(node.expression, {
sp: context.sp + 1, sp: context.sp + 1,
env: objects.clone(context.env), env: cloneEnv(context.env),
action: null action: null
}), }),
buildCondition( buildCondition(
@ -463,7 +472,7 @@ function generateBytecode(ast) {
return buildSequence( return buildSequence(
generate(node.expression, { generate(node.expression, {
sp: context.sp, sp: context.sp,
env: objects.clone(context.env), env: cloneEnv(context.env),
action: null action: null
}), }),
buildCondition( buildCondition(
@ -477,7 +486,7 @@ function generateBytecode(ast) {
zero_or_more: function(node, context) { zero_or_more: function(node, context) {
let expressionCode = generate(node.expression, { let expressionCode = generate(node.expression, {
sp: context.sp + 1, sp: context.sp + 1,
env: objects.clone(context.env), env: cloneEnv(context.env),
action: null action: null
}); });
@ -492,7 +501,7 @@ function generateBytecode(ast) {
one_or_more: function(node, context) { one_or_more: function(node, context) {
let expressionCode = generate(node.expression, { let expressionCode = generate(node.expression, {
sp: context.sp + 1, sp: context.sp + 1,
env: objects.clone(context.env), env: cloneEnv(context.env),
action: null action: null
}); });
@ -510,7 +519,7 @@ function generateBytecode(ast) {
group: function(node, context) { group: function(node, context) {
return generate(node.expression, { return generate(node.expression, {
sp: context.sp, sp: context.sp,
env: objects.clone(context.env), env: cloneEnv(context.env),
action: null action: null
}); });
}, },

Loading…
Cancel
Save