const AST = require('../src/ast') module.exports = class Env { constructor(parent = null) { if (parent) { this.data = parent.data } else { this.data = { '+': (a, b) => new AST.Number({ value: a + b }), '-': (a, b) => new AST.Number({ value: a - b }), '*': (a, b) => new AST.Number({ value: a * b }), '/': (a, b) => new AST.Number({ value: a / b }), '=': (a, b) => new AST.Boolean({ value: a === b }), '>': (a, b) => new AST.Boolean({ value: a > b }), '<': (a, b) => new AST.Boolean({ value: a < b }), '>=': (a, b) => new AST.Boolean({ value: a >= b }), '<=': (a, b) => new AST.Boolean({ value: a <= b }), } } } get(symbol) { if (this.data[symbol]) { return this.data[symbol] } throw `Symbol ${symbol} is not bound` } set(symbol, value) { this.data[symbol] = value } }