code: function(termination) {
  					var ch_i, args = [], node, closed = false;
  					var separator_count = 0;
  					while(index < length) {
  						gobbleSpaces();
  						ch_i = exprICode(index);
  						if(ch_i === termination) { // done parsing
  							closed = true;
  							index++;
  							if(termination === CPAREN_CODE && separator_count && separator_count >= args.length){
  								throwError('Unexpected token ' + String.fromCharCode(termination), index);
  							}
  							break;
  						} else if (ch_i === COMMA_CODE) { // between expressions
  							index++;
  							separator_count++;
  							if(separator_count !== args.length) { // missing argument
  								if(termination === CPAREN_CODE) {
  									throwError('Unexpected token ,', index);
  								}
  								else if(termination === CBRACK_CODE) {
  									for(var arg = args.length; arg< separator_count; arg++) {
  										args.push(null);
  									}
  								}
  							}
  						} else {
  							node = gobbleExpression();
  							if(!node || node.type === COMPOUND) {
  								throwError('Expected comma', index);
  							}
  							args.push(node);
  						}
  					}
  					if (!closed) {
  						throwError('Expected ' + String.fromCharCode(termination), index);
  					}
  					return args;
  				}
docs: `index` stores the character number we are currently at while `length` is a constant All of the gobbles below will modify `index` as we move along