|  | @@ -43,17 +43,23 @@ smalltalk.parser = (function(){
 | 
	
		
			
				|  |  |          "identifier": parse_identifier,
 | 
	
		
			
				|  |  |          "varIdentifier": parse_varIdentifier,
 | 
	
		
			
				|  |  |          "keyword": parse_keyword,
 | 
	
		
			
				|  |  | +        "selector": parse_selector,
 | 
	
		
			
				|  |  |          "className": parse_className,
 | 
	
		
			
				|  |  |          "string": parse_string,
 | 
	
		
			
				|  |  |          "symbol": parse_symbol,
 | 
	
		
			
				|  |  | +        "bareSymbol": parse_bareSymbol,
 | 
	
		
			
				|  |  |          "number": parse_number,
 | 
	
		
			
				|  |  |          "hex": parse_hex,
 | 
	
		
			
				|  |  |          "float": parse_float,
 | 
	
		
			
				|  |  |          "integer": parse_integer,
 | 
	
		
			
				|  |  |          "literalArray": parse_literalArray,
 | 
	
		
			
				|  |  | +        "bareLiteralArray": parse_bareLiteralArray,
 | 
	
		
			
				|  |  | +        "literalArrayRest": parse_literalArrayRest,
 | 
	
		
			
				|  |  |          "dynamicArray": parse_dynamicArray,
 | 
	
		
			
				|  |  |          "dynamicDictionary": parse_dynamicDictionary,
 | 
	
		
			
				|  |  |          "pseudoVariable": parse_pseudoVariable,
 | 
	
		
			
				|  |  | +        "parseTimeLiteral": parse_parseTimeLiteral,
 | 
	
		
			
				|  |  | +        "runtimeLiteral": parse_runtimeLiteral,
 | 
	
		
			
				|  |  |          "literal": parse_literal,
 | 
	
		
			
				|  |  |          "variable": parse_variable,
 | 
	
		
			
				|  |  |          "classReference": parse_classReference,
 | 
	
	
		
			
				|  | @@ -575,6 +581,75 @@ smalltalk.parser = (function(){
 | 
	
		
			
				|  |  |          return result0;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        
 | 
	
		
			
				|  |  | +      function parse_selector() {
 | 
	
		
			
				|  |  | +        var cacheKey = "selector@" + pos.offset;
 | 
	
		
			
				|  |  | +        var cachedResult = cache[cacheKey];
 | 
	
		
			
				|  |  | +        if (cachedResult) {
 | 
	
		
			
				|  |  | +          pos = clone(cachedResult.nextPos);
 | 
	
		
			
				|  |  | +          return cachedResult.result;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        var result0, result1, result2;
 | 
	
		
			
				|  |  | +        var pos0, pos1;
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        pos0 = clone(pos);
 | 
	
		
			
				|  |  | +        pos1 = clone(pos);
 | 
	
		
			
				|  |  | +        if (/^[a-zA-Z]/.test(input.charAt(pos.offset))) {
 | 
	
		
			
				|  |  | +          result0 = input.charAt(pos.offset);
 | 
	
		
			
				|  |  | +          advance(pos, 1);
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          result0 = null;
 | 
	
		
			
				|  |  | +          if (reportFailures === 0) {
 | 
	
		
			
				|  |  | +            matchFailed("[a-zA-Z]");
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (result0 !== null) {
 | 
	
		
			
				|  |  | +          result1 = [];
 | 
	
		
			
				|  |  | +          if (/^[a-zA-Z0-9:]/.test(input.charAt(pos.offset))) {
 | 
	
		
			
				|  |  | +            result2 = input.charAt(pos.offset);
 | 
	
		
			
				|  |  | +            advance(pos, 1);
 | 
	
		
			
				|  |  | +          } else {
 | 
	
		
			
				|  |  | +            result2 = null;
 | 
	
		
			
				|  |  | +            if (reportFailures === 0) {
 | 
	
		
			
				|  |  | +              matchFailed("[a-zA-Z0-9:]");
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          while (result2 !== null) {
 | 
	
		
			
				|  |  | +            result1.push(result2);
 | 
	
		
			
				|  |  | +            if (/^[a-zA-Z0-9:]/.test(input.charAt(pos.offset))) {
 | 
	
		
			
				|  |  | +              result2 = input.charAt(pos.offset);
 | 
	
		
			
				|  |  | +              advance(pos, 1);
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +              result2 = null;
 | 
	
		
			
				|  |  | +              if (reportFailures === 0) {
 | 
	
		
			
				|  |  | +                matchFailed("[a-zA-Z0-9:]");
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          if (result1 !== null) {
 | 
	
		
			
				|  |  | +            result0 = [result0, result1];
 | 
	
		
			
				|  |  | +          } else {
 | 
	
		
			
				|  |  | +            result0 = null;
 | 
	
		
			
				|  |  | +            pos = clone(pos1);
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          result0 = null;
 | 
	
		
			
				|  |  | +          pos = clone(pos1);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (result0 !== null) {
 | 
	
		
			
				|  |  | +          result0 = (function(offset, line, column, first, others) {return first + others.join("")})(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (result0 === null) {
 | 
	
		
			
				|  |  | +          pos = clone(pos0);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        cache[cacheKey] = {
 | 
	
		
			
				|  |  | +          nextPos: clone(pos),
 | 
	
		
			
				|  |  | +          result:  result0
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +        return result0;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      
 | 
	
		
			
				|  |  |        function parse_className() {
 | 
	
		
			
				|  |  |          var cacheKey = "className@" + pos.offset;
 | 
	
		
			
				|  |  |          var cachedResult = cache[cacheKey];
 | 
	
	
		
			
				|  | @@ -774,8 +849,8 @@ smalltalk.parser = (function(){
 | 
	
		
			
				|  |  |            return cachedResult.result;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          
 | 
	
		
			
				|  |  | -        var result0, result1, result2, result3;
 | 
	
		
			
				|  |  | -        var pos0, pos1, pos2;
 | 
	
		
			
				|  |  | +        var result0, result1;
 | 
	
		
			
				|  |  | +        var pos0, pos1;
 | 
	
		
			
				|  |  |          
 | 
	
		
			
				|  |  |          pos0 = clone(pos);
 | 
	
		
			
				|  |  |          pos1 = clone(pos);
 | 
	
	
		
			
				|  | @@ -789,96 +864,7 @@ smalltalk.parser = (function(){
 | 
	
		
			
				|  |  |            }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (result0 !== null) {
 | 
	
		
			
				|  |  | -          result1 = [];
 | 
	
		
			
				|  |  | -          pos2 = clone(pos);
 | 
	
		
			
				|  |  | -          if (/^[a-zA-Z0-9:]/.test(input.charAt(pos.offset))) {
 | 
	
		
			
				|  |  | -            result3 = input.charAt(pos.offset);
 | 
	
		
			
				|  |  | -            advance(pos, 1);
 | 
	
		
			
				|  |  | -          } else {
 | 
	
		
			
				|  |  | -            result3 = null;
 | 
	
		
			
				|  |  | -            if (reportFailures === 0) {
 | 
	
		
			
				|  |  | -              matchFailed("[a-zA-Z0-9:]");
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | -          if (result3 !== null) {
 | 
	
		
			
				|  |  | -            result2 = [];
 | 
	
		
			
				|  |  | -            while (result3 !== null) {
 | 
	
		
			
				|  |  | -              result2.push(result3);
 | 
	
		
			
				|  |  | -              if (/^[a-zA-Z0-9:]/.test(input.charAt(pos.offset))) {
 | 
	
		
			
				|  |  | -                result3 = input.charAt(pos.offset);
 | 
	
		
			
				|  |  | -                advance(pos, 1);
 | 
	
		
			
				|  |  | -              } else {
 | 
	
		
			
				|  |  | -                result3 = null;
 | 
	
		
			
				|  |  | -                if (reportFailures === 0) {
 | 
	
		
			
				|  |  | -                  matchFailed("[a-zA-Z0-9:]");
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -              }
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -          } else {
 | 
	
		
			
				|  |  | -            result2 = null;
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | -          if (result2 !== null) {
 | 
	
		
			
				|  |  | -            result2 = (function(offset, line, column, digits) {return digits.join("")})(pos2.offset, pos2.line, pos2.column, result2);
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | -          if (result2 === null) {
 | 
	
		
			
				|  |  | -            pos = clone(pos2);
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | -          if (result2 === null) {
 | 
	
		
			
				|  |  | -            pos2 = clone(pos);
 | 
	
		
			
				|  |  | -            result2 = parse_string();
 | 
	
		
			
				|  |  | -            if (result2 !== null) {
 | 
	
		
			
				|  |  | -              result2 = (function(offset, line, column, node) {return node._value()})(pos2.offset, pos2.line, pos2.column, result2);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            if (result2 === null) {
 | 
	
		
			
				|  |  | -              pos = clone(pos2);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | -          while (result2 !== null) {
 | 
	
		
			
				|  |  | -            result1.push(result2);
 | 
	
		
			
				|  |  | -            pos2 = clone(pos);
 | 
	
		
			
				|  |  | -            if (/^[a-zA-Z0-9:]/.test(input.charAt(pos.offset))) {
 | 
	
		
			
				|  |  | -              result3 = input.charAt(pos.offset);
 | 
	
		
			
				|  |  | -              advance(pos, 1);
 | 
	
		
			
				|  |  | -            } else {
 | 
	
		
			
				|  |  | -              result3 = null;
 | 
	
		
			
				|  |  | -              if (reportFailures === 0) {
 | 
	
		
			
				|  |  | -                matchFailed("[a-zA-Z0-9:]");
 | 
	
		
			
				|  |  | -              }
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            if (result3 !== null) {
 | 
	
		
			
				|  |  | -              result2 = [];
 | 
	
		
			
				|  |  | -              while (result3 !== null) {
 | 
	
		
			
				|  |  | -                result2.push(result3);
 | 
	
		
			
				|  |  | -                if (/^[a-zA-Z0-9:]/.test(input.charAt(pos.offset))) {
 | 
	
		
			
				|  |  | -                  result3 = input.charAt(pos.offset);
 | 
	
		
			
				|  |  | -                  advance(pos, 1);
 | 
	
		
			
				|  |  | -                } else {
 | 
	
		
			
				|  |  | -                  result3 = null;
 | 
	
		
			
				|  |  | -                  if (reportFailures === 0) {
 | 
	
		
			
				|  |  | -                    matchFailed("[a-zA-Z0-9:]");
 | 
	
		
			
				|  |  | -                  }
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -              }
 | 
	
		
			
				|  |  | -            } else {
 | 
	
		
			
				|  |  | -              result2 = null;
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            if (result2 !== null) {
 | 
	
		
			
				|  |  | -              result2 = (function(offset, line, column, digits) {return digits.join("")})(pos2.offset, pos2.line, pos2.column, result2);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            if (result2 === null) {
 | 
	
		
			
				|  |  | -              pos = clone(pos2);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            if (result2 === null) {
 | 
	
		
			
				|  |  | -              pos2 = clone(pos);
 | 
	
		
			
				|  |  | -              result2 = parse_string();
 | 
	
		
			
				|  |  | -              if (result2 !== null) {
 | 
	
		
			
				|  |  | -                result2 = (function(offset, line, column, node) {return node._value()})(pos2.offset, pos2.line, pos2.column, result2);
 | 
	
		
			
				|  |  | -              }
 | 
	
		
			
				|  |  | -              if (result2 === null) {
 | 
	
		
			
				|  |  | -                pos = clone(pos2);
 | 
	
		
			
				|  |  | -              }
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | +          result1 = parse_bareSymbol();
 | 
	
		
			
				|  |  |            if (result1 !== null) {
 | 
	
		
			
				|  |  |              result0 = [result0, result1];
 | 
	
		
			
				|  |  |            } else {
 | 
	
	
		
			
				|  | @@ -889,11 +875,51 @@ smalltalk.parser = (function(){
 | 
	
		
			
				|  |  |            result0 = null;
 | 
	
		
			
				|  |  |            pos = clone(pos1);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +        if (result0 !== null) {
 | 
	
		
			
				|  |  | +          result0 = (function(offset, line, column, rest) {return rest})(pos0.offset, pos0.line, pos0.column, result0[1]);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (result0 === null) {
 | 
	
		
			
				|  |  | +          pos = clone(pos0);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        cache[cacheKey] = {
 | 
	
		
			
				|  |  | +          nextPos: clone(pos),
 | 
	
		
			
				|  |  | +          result:  result0
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +        return result0;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      
 | 
	
		
			
				|  |  | +      function parse_bareSymbol() {
 | 
	
		
			
				|  |  | +        var cacheKey = "bareSymbol@" + pos.offset;
 | 
	
		
			
				|  |  | +        var cachedResult = cache[cacheKey];
 | 
	
		
			
				|  |  | +        if (cachedResult) {
 | 
	
		
			
				|  |  | +          pos = clone(cachedResult.nextPos);
 | 
	
		
			
				|  |  | +          return cachedResult.result;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        var result0;
 | 
	
		
			
				|  |  | +        var pos0, pos1;
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        pos0 = clone(pos);
 | 
	
		
			
				|  |  | +        result0 = parse_selector();
 | 
	
		
			
				|  |  | +        if (result0 === null) {
 | 
	
		
			
				|  |  | +          result0 = parse_binarySelector();
 | 
	
		
			
				|  |  | +          if (result0 === null) {
 | 
	
		
			
				|  |  | +            pos1 = clone(pos);
 | 
	
		
			
				|  |  | +            result0 = parse_string();
 | 
	
		
			
				|  |  | +            if (result0 !== null) {
 | 
	
		
			
				|  |  | +              result0 = (function(offset, line, column, node) {return node._value()})(pos1.offset, pos1.line, pos1.column, result0);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if (result0 === null) {
 | 
	
		
			
				|  |  | +              pos = clone(pos1);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |          if (result0 !== null) {
 | 
	
		
			
				|  |  |            result0 = (function(offset, line, column, val) {
 | 
	
		
			
				|  |  |                                return smalltalk.ValueNode._new()
 | 
	
		
			
				|  |  | -                                     ._value_(val.join("").replace(/\"/ig, '"'))
 | 
	
		
			
				|  |  | -                          })(pos0.offset, pos0.line, pos0.column, result0[1]);
 | 
	
		
			
				|  |  | +                                     ._value_(val)
 | 
	
		
			
				|  |  | +                          })(pos0.offset, pos0.line, pos0.column, result0);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (result0 === null) {
 | 
	
		
			
				|  |  |            pos = clone(pos0);
 | 
	
	
		
			
				|  | @@ -1231,8 +1257,8 @@ smalltalk.parser = (function(){
 | 
	
		
			
				|  |  |            return cachedResult.result;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          
 | 
	
		
			
				|  |  | -        var result0, result1, result2, result3, result4;
 | 
	
		
			
				|  |  | -        var pos0, pos1, pos2, pos3;
 | 
	
		
			
				|  |  | +        var result0, result1;
 | 
	
		
			
				|  |  | +        var pos0, pos1;
 | 
	
		
			
				|  |  |          
 | 
	
		
			
				|  |  |          pos0 = clone(pos);
 | 
	
		
			
				|  |  |          pos1 = clone(pos);
 | 
	
	
		
			
				|  | @@ -1246,72 +1272,166 @@ smalltalk.parser = (function(){
 | 
	
		
			
				|  |  |            }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (result0 !== null) {
 | 
	
		
			
				|  |  | -          result1 = parse_ws();
 | 
	
		
			
				|  |  | +          result1 = parse_literalArrayRest();
 | 
	
		
			
				|  |  | +          if (result1 !== null) {
 | 
	
		
			
				|  |  | +            result0 = [result0, result1];
 | 
	
		
			
				|  |  | +          } else {
 | 
	
		
			
				|  |  | +            result0 = null;
 | 
	
		
			
				|  |  | +            pos = clone(pos1);
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          result0 = null;
 | 
	
		
			
				|  |  | +          pos = clone(pos1);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (result0 !== null) {
 | 
	
		
			
				|  |  | +          result0 = (function(offset, line, column, rest) {return rest})(pos0.offset, pos0.line, pos0.column, result0[1]);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (result0 === null) {
 | 
	
		
			
				|  |  | +          pos = clone(pos0);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        cache[cacheKey] = {
 | 
	
		
			
				|  |  | +          nextPos: clone(pos),
 | 
	
		
			
				|  |  | +          result:  result0
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +        return result0;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      
 | 
	
		
			
				|  |  | +      function parse_bareLiteralArray() {
 | 
	
		
			
				|  |  | +        var cacheKey = "bareLiteralArray@" + pos.offset;
 | 
	
		
			
				|  |  | +        var cachedResult = cache[cacheKey];
 | 
	
		
			
				|  |  | +        if (cachedResult) {
 | 
	
		
			
				|  |  | +          pos = clone(cachedResult.nextPos);
 | 
	
		
			
				|  |  | +          return cachedResult.result;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        var result0, result1;
 | 
	
		
			
				|  |  | +        var pos0, pos1;
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        pos0 = clone(pos);
 | 
	
		
			
				|  |  | +        pos1 = clone(pos);
 | 
	
		
			
				|  |  | +        if (input.charCodeAt(pos.offset) === 40) {
 | 
	
		
			
				|  |  | +          result0 = "(";
 | 
	
		
			
				|  |  | +          advance(pos, 1);
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          result0 = null;
 | 
	
		
			
				|  |  | +          if (reportFailures === 0) {
 | 
	
		
			
				|  |  | +            matchFailed("\"(\"");
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (result0 !== null) {
 | 
	
		
			
				|  |  | +          result1 = parse_literalArrayRest();
 | 
	
		
			
				|  |  |            if (result1 !== null) {
 | 
	
		
			
				|  |  | -            result2 = [];
 | 
	
		
			
				|  |  | +            result0 = [result0, result1];
 | 
	
		
			
				|  |  | +          } else {
 | 
	
		
			
				|  |  | +            result0 = null;
 | 
	
		
			
				|  |  | +            pos = clone(pos1);
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          result0 = null;
 | 
	
		
			
				|  |  | +          pos = clone(pos1);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (result0 !== null) {
 | 
	
		
			
				|  |  | +          result0 = (function(offset, line, column, rest) {return rest})(pos0.offset, pos0.line, pos0.column, result0[1]);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (result0 === null) {
 | 
	
		
			
				|  |  | +          pos = clone(pos0);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        cache[cacheKey] = {
 | 
	
		
			
				|  |  | +          nextPos: clone(pos),
 | 
	
		
			
				|  |  | +          result:  result0
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +        return result0;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      
 | 
	
		
			
				|  |  | +      function parse_literalArrayRest() {
 | 
	
		
			
				|  |  | +        var cacheKey = "literalArrayRest@" + pos.offset;
 | 
	
		
			
				|  |  | +        var cachedResult = cache[cacheKey];
 | 
	
		
			
				|  |  | +        if (cachedResult) {
 | 
	
		
			
				|  |  | +          pos = clone(cachedResult.nextPos);
 | 
	
		
			
				|  |  | +          return cachedResult.result;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        var result0, result1, result2, result3;
 | 
	
		
			
				|  |  | +        var pos0, pos1, pos2, pos3;
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        pos0 = clone(pos);
 | 
	
		
			
				|  |  | +        pos1 = clone(pos);
 | 
	
		
			
				|  |  | +        result0 = parse_ws();
 | 
	
		
			
				|  |  | +        if (result0 !== null) {
 | 
	
		
			
				|  |  | +          result1 = [];
 | 
	
		
			
				|  |  | +          pos2 = clone(pos);
 | 
	
		
			
				|  |  | +          pos3 = clone(pos);
 | 
	
		
			
				|  |  | +          result2 = parse_parseTimeLiteral();
 | 
	
		
			
				|  |  | +          if (result2 === null) {
 | 
	
		
			
				|  |  | +            result2 = parse_bareLiteralArray();
 | 
	
		
			
				|  |  | +            if (result2 === null) {
 | 
	
		
			
				|  |  | +              result2 = parse_bareSymbol();
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          if (result2 !== null) {
 | 
	
		
			
				|  |  | +            result3 = parse_ws();
 | 
	
		
			
				|  |  | +            if (result3 !== null) {
 | 
	
		
			
				|  |  | +              result2 = [result2, result3];
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +              result2 = null;
 | 
	
		
			
				|  |  | +              pos = clone(pos3);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          } else {
 | 
	
		
			
				|  |  | +            result2 = null;
 | 
	
		
			
				|  |  | +            pos = clone(pos3);
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          if (result2 !== null) {
 | 
	
		
			
				|  |  | +            result2 = (function(offset, line, column, lit) {return lit._value()})(pos2.offset, pos2.line, pos2.column, result2[0]);
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          if (result2 === null) {
 | 
	
		
			
				|  |  | +            pos = clone(pos2);
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          while (result2 !== null) {
 | 
	
		
			
				|  |  | +            result1.push(result2);
 | 
	
		
			
				|  |  |              pos2 = clone(pos);
 | 
	
		
			
				|  |  |              pos3 = clone(pos);
 | 
	
		
			
				|  |  | -            result3 = parse_literal();
 | 
	
		
			
				|  |  | -            if (result3 !== null) {
 | 
	
		
			
				|  |  | -              result4 = parse_ws();
 | 
	
		
			
				|  |  | -              if (result4 !== null) {
 | 
	
		
			
				|  |  | -                result3 = [result3, result4];
 | 
	
		
			
				|  |  | +            result2 = parse_parseTimeLiteral();
 | 
	
		
			
				|  |  | +            if (result2 === null) {
 | 
	
		
			
				|  |  | +              result2 = parse_bareLiteralArray();
 | 
	
		
			
				|  |  | +              if (result2 === null) {
 | 
	
		
			
				|  |  | +                result2 = parse_bareSymbol();
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if (result2 !== null) {
 | 
	
		
			
				|  |  | +              result3 = parse_ws();
 | 
	
		
			
				|  |  | +              if (result3 !== null) {
 | 
	
		
			
				|  |  | +                result2 = [result2, result3];
 | 
	
		
			
				|  |  |                } else {
 | 
	
		
			
				|  |  | -                result3 = null;
 | 
	
		
			
				|  |  | +                result2 = null;
 | 
	
		
			
				|  |  |                  pos = clone(pos3);
 | 
	
		
			
				|  |  |                }
 | 
	
		
			
				|  |  |              } else {
 | 
	
		
			
				|  |  | -              result3 = null;
 | 
	
		
			
				|  |  | +              result2 = null;
 | 
	
		
			
				|  |  |                pos = clone(pos3);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            if (result3 !== null) {
 | 
	
		
			
				|  |  | -              result3 = (function(offset, line, column, lit) {return lit._value()})(pos2.offset, pos2.line, pos2.column, result3[0]);
 | 
	
		
			
				|  |  | +            if (result2 !== null) {
 | 
	
		
			
				|  |  | +              result2 = (function(offset, line, column, lit) {return lit._value()})(pos2.offset, pos2.line, pos2.column, result2[0]);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            if (result3 === null) {
 | 
	
		
			
				|  |  | +            if (result2 === null) {
 | 
	
		
			
				|  |  |                pos = clone(pos2);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            while (result3 !== null) {
 | 
	
		
			
				|  |  | -              result2.push(result3);
 | 
	
		
			
				|  |  | -              pos2 = clone(pos);
 | 
	
		
			
				|  |  | -              pos3 = clone(pos);
 | 
	
		
			
				|  |  | -              result3 = parse_literal();
 | 
	
		
			
				|  |  | -              if (result3 !== null) {
 | 
	
		
			
				|  |  | -                result4 = parse_ws();
 | 
	
		
			
				|  |  | -                if (result4 !== null) {
 | 
	
		
			
				|  |  | -                  result3 = [result3, result4];
 | 
	
		
			
				|  |  | -                } else {
 | 
	
		
			
				|  |  | -                  result3 = null;
 | 
	
		
			
				|  |  | -                  pos = clone(pos3);
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          if (result1 !== null) {
 | 
	
		
			
				|  |  | +            result2 = parse_ws();
 | 
	
		
			
				|  |  | +            if (result2 !== null) {
 | 
	
		
			
				|  |  | +              if (input.charCodeAt(pos.offset) === 41) {
 | 
	
		
			
				|  |  | +                result3 = ")";
 | 
	
		
			
				|  |  | +                advance(pos, 1);
 | 
	
		
			
				|  |  |                } else {
 | 
	
		
			
				|  |  |                  result3 = null;
 | 
	
		
			
				|  |  | -                pos = clone(pos3);
 | 
	
		
			
				|  |  | -              }
 | 
	
		
			
				|  |  | -              if (result3 !== null) {
 | 
	
		
			
				|  |  | -                result3 = (function(offset, line, column, lit) {return lit._value()})(pos2.offset, pos2.line, pos2.column, result3[0]);
 | 
	
		
			
				|  |  | -              }
 | 
	
		
			
				|  |  | -              if (result3 === null) {
 | 
	
		
			
				|  |  | -                pos = clone(pos2);
 | 
	
		
			
				|  |  | +                if (reportFailures === 0) {
 | 
	
		
			
				|  |  | +                  matchFailed("\")\"");
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |                }
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            if (result2 !== null) {
 | 
	
		
			
				|  |  | -              result3 = parse_ws();
 | 
	
		
			
				|  |  |                if (result3 !== null) {
 | 
	
		
			
				|  |  | -                if (input.charCodeAt(pos.offset) === 41) {
 | 
	
		
			
				|  |  | -                  result4 = ")";
 | 
	
		
			
				|  |  | -                  advance(pos, 1);
 | 
	
		
			
				|  |  | -                } else {
 | 
	
		
			
				|  |  | -                  result4 = null;
 | 
	
		
			
				|  |  | -                  if (reportFailures === 0) {
 | 
	
		
			
				|  |  | -                    matchFailed("\")\"");
 | 
	
		
			
				|  |  | -                  }
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -                if (result4 !== null) {
 | 
	
		
			
				|  |  | -                  result0 = [result0, result1, result2, result3, result4];
 | 
	
		
			
				|  |  | -                } else {
 | 
	
		
			
				|  |  | -                  result0 = null;
 | 
	
		
			
				|  |  | -                  pos = clone(pos1);
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | +                result0 = [result0, result1, result2, result3];
 | 
	
		
			
				|  |  |                } else {
 | 
	
		
			
				|  |  |                  result0 = null;
 | 
	
		
			
				|  |  |                  pos = clone(pos1);
 | 
	
	
		
			
				|  | @@ -1332,7 +1452,7 @@ smalltalk.parser = (function(){
 | 
	
		
			
				|  |  |            result0 = (function(offset, line, column, lits) {
 | 
	
		
			
				|  |  |                               return smalltalk.ValueNode._new()
 | 
	
		
			
				|  |  |                                      ._value_(lits)
 | 
	
		
			
				|  |  | -                         })(pos0.offset, pos0.line, pos0.column, result0[2]);
 | 
	
		
			
				|  |  | +                         })(pos0.offset, pos0.line, pos0.column, result0[1]);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (result0 === null) {
 | 
	
		
			
				|  |  |            pos = clone(pos0);
 | 
	
	
		
			
				|  | @@ -1597,8 +1717,8 @@ smalltalk.parser = (function(){
 | 
	
		
			
				|  |  |          return result0;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        
 | 
	
		
			
				|  |  | -      function parse_literal() {
 | 
	
		
			
				|  |  | -        var cacheKey = "literal@" + pos.offset;
 | 
	
		
			
				|  |  | +      function parse_parseTimeLiteral() {
 | 
	
		
			
				|  |  | +        var cacheKey = "parseTimeLiteral@" + pos.offset;
 | 
	
		
			
				|  |  |          var cachedResult = cache[cacheKey];
 | 
	
		
			
				|  |  |          if (cachedResult) {
 | 
	
		
			
				|  |  |            pos = clone(cachedResult.nextPos);
 | 
	
	
		
			
				|  | @@ -1613,18 +1733,9 @@ smalltalk.parser = (function(){
 | 
	
		
			
				|  |  |            if (result0 === null) {
 | 
	
		
			
				|  |  |              result0 = parse_literalArray();
 | 
	
		
			
				|  |  |              if (result0 === null) {
 | 
	
		
			
				|  |  | -              result0 = parse_dynamicDictionary();
 | 
	
		
			
				|  |  | +              result0 = parse_string();
 | 
	
		
			
				|  |  |                if (result0 === null) {
 | 
	
		
			
				|  |  | -                result0 = parse_dynamicArray();
 | 
	
		
			
				|  |  | -                if (result0 === null) {
 | 
	
		
			
				|  |  | -                  result0 = parse_string();
 | 
	
		
			
				|  |  | -                  if (result0 === null) {
 | 
	
		
			
				|  |  | -                    result0 = parse_symbol();
 | 
	
		
			
				|  |  | -                    if (result0 === null) {
 | 
	
		
			
				|  |  | -                      result0 = parse_block();
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                  }
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | +                result0 = parse_symbol();
 | 
	
		
			
				|  |  |                }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |            }
 | 
	
	
		
			
				|  | @@ -1637,6 +1748,53 @@ smalltalk.parser = (function(){
 | 
	
		
			
				|  |  |          return result0;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        
 | 
	
		
			
				|  |  | +      function parse_runtimeLiteral() {
 | 
	
		
			
				|  |  | +        var cacheKey = "runtimeLiteral@" + pos.offset;
 | 
	
		
			
				|  |  | +        var cachedResult = cache[cacheKey];
 | 
	
		
			
				|  |  | +        if (cachedResult) {
 | 
	
		
			
				|  |  | +          pos = clone(cachedResult.nextPos);
 | 
	
		
			
				|  |  | +          return cachedResult.result;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        var result0;
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        result0 = parse_dynamicDictionary();
 | 
	
		
			
				|  |  | +        if (result0 === null) {
 | 
	
		
			
				|  |  | +          result0 = parse_dynamicArray();
 | 
	
		
			
				|  |  | +          if (result0 === null) {
 | 
	
		
			
				|  |  | +            result0 = parse_block();
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        cache[cacheKey] = {
 | 
	
		
			
				|  |  | +          nextPos: clone(pos),
 | 
	
		
			
				|  |  | +          result:  result0
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +        return result0;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      
 | 
	
		
			
				|  |  | +      function parse_literal() {
 | 
	
		
			
				|  |  | +        var cacheKey = "literal@" + pos.offset;
 | 
	
		
			
				|  |  | +        var cachedResult = cache[cacheKey];
 | 
	
		
			
				|  |  | +        if (cachedResult) {
 | 
	
		
			
				|  |  | +          pos = clone(cachedResult.nextPos);
 | 
	
		
			
				|  |  | +          return cachedResult.result;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        var result0;
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        result0 = parse_runtimeLiteral();
 | 
	
		
			
				|  |  | +        if (result0 === null) {
 | 
	
		
			
				|  |  | +          result0 = parse_parseTimeLiteral();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        cache[cacheKey] = {
 | 
	
		
			
				|  |  | +          nextPos: clone(pos),
 | 
	
		
			
				|  |  | +          result:  result0
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +        return result0;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      
 | 
	
		
			
				|  |  |        function parse_variable() {
 | 
	
		
			
				|  |  |          var cacheKey = "variable@" + pos.offset;
 | 
	
		
			
				|  |  |          var cachedResult = cache[cacheKey];
 |