Browse Source

fixed bugs where I forgot to use new with constructors

pull/1/head
nisstyre56 10 years ago
parent
commit
cb1af982ec
  1. 50
      environments.js

50
environments.js

@ -0,0 +1,50 @@
/*
* An environment is just an object that maps identifiers to JLambda expressions
* with a few built-in (a standard Prelude environment)
*/
// returns the new environment after mutating it
// values = [(identifier, JLambda expression)]
var errors = require("./errors.js");
var rep = require("./representation.js");
function extend(env, values) {
for (var i = 0; i < values.length; i++) {
env[values[i][0].val] = values[i][1];
}
return env;
}
// creates a new environment initialized with the pairs in values
function makeEnv(name, values) {
var env = {};
env.name = name;
for (var i = 0; i < values.length; i++) {
var name = values[i][0].val;
var val = values[i][1];
env[name] = val;
}
return env;
}
function lookup(name, env) {
var value = env[name];
if (!value) {
throw errors.UnboundError(name, env.name);
}
return value;
}
var prelude = makeEnv("prelude", [[new rep.Name("e"), new rep.FloatT(Math.E)],
[new rep.Name("pi"), new rep.FloatT(Math.PI)]]);
var prelude_types = makeEnv("prelude_types",
[[new rep.Name("e"), new rep.TypeOp("Float", [], false)],
[new rep.Name("pi"), new rep.TypeOp("Float", [], false)]]);
module.exports = { prelude : prelude,
prelude_types : prelude_types,
lookup : lookup,
extend : extend };
Loading…
Cancel
Save