A templating language that looks like Lisp and compiles to HTML
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

env.js 1016B

123456789101112131415161718192021222324252627282930313233
  1. const AST = require('../src/ast')
  2. module.exports = class Env {
  3. constructor(parent = null) {
  4. if (parent) {
  5. this.data = parent.data
  6. } else {
  7. this.data = {
  8. '+': (a, b) => new AST.Number({ value: a.value + b.value }),
  9. '-': (a, b) => new AST.Number({ value: a.value - b.value }),
  10. '*': (a, b) => new AST.Number({ value: a.value * b.value }),
  11. '/': (a, b) => new AST.Number({ value: a.value / b.value }),
  12. '=': (a, b) => new AST.Boolean({ value: a.value === b.value }),
  13. '>': (a, b) => new AST.Boolean({ value: a.value > b.value }),
  14. '<': (a, b) => new AST.Boolean({ value: a.value < b.value }),
  15. '>=': (a, b) => new AST.Boolean({ value: a.value >= b.value }),
  16. '<=': (a, b) => new AST.Boolean({ value: a.value <= b.value }),
  17. }
  18. }
  19. }
  20. get(symbol) {
  21. if (this.data[symbol]) {
  22. return this.data[symbol]
  23. }
  24. throw `Symbol ${symbol} is not bound`
  25. }
  26. set(symbol, value) {
  27. this.data[symbol] = value
  28. }
  29. }