export default class Scope { context = {}; parent = null; constructor(parent) { this.parent = parent; } allocate(key, value) { this.context[key] = value; } get(key) { let walk = this; while (walk) { if (key in walk.context) { return walk.context[key]; } walk = walk.parent; } return undefined; } set(key, value) { let walk = this; while (walk) { if (key in walk.context) { walk.context[key] = value; return value; } if (!walk.parent) { walk.context[key] = value; return value; } walk = walk.parent; } } }