소스 검색

Added compiler environment class.

master
Bryan Miller 5 년 전
부모
커밋
7e92c653b7
1개의 변경된 파일46개의 추가작업 그리고 0개의 파일을 삭제
  1. +46
    -0
      src/compiler/env.js

+ 46
- 0
src/compiler/env.js 파일 보기

@@ -0,0 +1,46 @@

// ALL Environments share the same program counter!
var PC = 0;


class Environment{
constructor(parent){
this.__parent = (parent instanceof Environment) ? parent : null;
this.__vars = {};
}

get PC(){return PC;}
set PC(val){
if (val < 0)
throw new RangeError("Program Counter value is out of bounds.");
PC = val;
}

hasVar(name){
if (name in Object.keys(this.__vars))
return true;
if (this.__parent !== null)
return this.__parent.hasVar(name);
return false;
}

getVarValue(name){
if (name in Object.keys(this.__vars))
return this.__vars[name];
if (this.__parent !== null)
return this.__parent.getVarValue(name);
throw new Error("No var '" + name + "' defined.");
}

setVarValue(name, val){
if (!(name in Object.keys(this.__vars))){
if (this.__parent.hasVar(name))
return this.__parent.setVarVal(name, val);
}
this.__vars[name] = val;
return this;
}
}


module.exports = Environment;

Loading…
취소
저장