code: function(paramSize, params) {
        var options = [], contexts = [], param, inverse, program;
  
        options.push("hash:" + this.popStack());
  
        inverse = this.popStack();
        program = this.popStack();
  
        // Avoid setting fn and inverse if neither are set. This allows
        // helpers to do a check for `if (options.fn)`
        if (program || inverse) {
          if (!program) {
            this.context.aliases.self = "this";
            program = "self.noop";
          }
  
          if (!inverse) {
           this.context.aliases.self = "this";
            inverse = "self.noop";
          }
  
          options.push("inverse:" + inverse);
          options.push("fn:" + program);
        }
  
        for(var i=0; i<paramSize; i++) {
          param = this.popStack();
          params.push(param);
  
          if(this.options.stringParams) {
            contexts.push(this.popStack());
          }
        }
  
        if (this.options.stringParams) {
          options.push("contexts:[" + contexts.join(",") + "]");
        }
  
        if(this.options.data) {
          options.push("data:data");
        }
  
        params.push("{" + options.join(",") + "}");
        return params.join(", ");
      }
docs: the params and contexts arguments are passed in arrays to fill in