code: function(environment, options, context, asObject) {
        this.environment = environment;
        this.options = options || {};
  
        this.name = this.environment.name;
        this.isChild = !!context;
        this.context = context || {
          programs: [],
          aliases: { self: 'this' },
          registers: {list: []}
        };
  
        this.preamble();
  
        this.stackSlot = 0;
        this.stackVars = [];
  
        this.compileChildren(environment, options);
  
        var opcodes = environment.opcodes, opcode;
  
        this.i = 0;
  
        for(l=opcodes.length; this.i<l; this.i++) {
          opcode = this.nextOpcode(0);
  
          if(opcode[0] === 'DECLARE') {
            this.i = this.i + 2;
            this[opcode[1]] = opcode[2];
          } else {
            this.i = this.i + opcode[1].length;
            this[opcode[0]].apply(this, opcode[1]);
          }
        }
  
        return this.createFunctionContext(asObject);
      }
docs: END PUBLIC API