| 
					
				 | 
			
			
				@@ -1,17 +1,17 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 start = method 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 separator      = [ \t\v\f\u00A0\uFEFF\n\r\u2028\u2029]+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-comments       = (["][^"]*["])+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+comments       = ('"' [^"]* '"')+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ws             = (separator / comments)* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 identifier     = first:[a-zA-Z] others:[a-zA-Z0-9]* {return first + others.join("");} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-keyword        = first:identifier last:[:] {return first + last;} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+keyword        = first:identifier last:":" {return first + last;} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 selector      = first:[a-zA-Z] others:[a-zA-Z0-9\:]* {return first + others.join("");} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 className      = first:[A-Z] others:[a-zA-Z0-9]* {return first + others.join("");} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-string         = ['] val:(("''" {return "'";} / [^'])*) ['] { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+string         = "'" val:(("''" {return "'";} / [^'])*) "'" { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      return globals.ValueNode._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._position_((line()).__at(column())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._source_(text()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            ._value_(val.join("").replace(/\"/ig, '"')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            ._value_(val.join("")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 character      = "$" char:.  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -35,13 +35,13 @@ number         = n:(numberExp / hex / float / integer) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._value_(n); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 numberExp      = n:((float / integer) "e" integer) {return parseFloat(n.join(""));} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-hex            = neg:[-]? "16r" num:[0-9a-fA-F]+ {return parseInt(((neg || '') + num.join("")), 16);} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-float          = neg:[-]?digits:[0-9]+ "." dec:[0-9]+ {return parseFloat(((neg || '') + digits.join("") + "." + dec.join("")), 10);} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-integer        = neg:[-]?digits:[0-9]+ {return (parseInt((neg || '') +digits.join(""), 10));} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+hex            = neg:"-"? "16r" num:[0-9a-fA-F]+ {return parseInt(((neg || '') + num.join("")), 16);} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+float          = neg:"-"? digits:[0-9]+ "." dec:[0-9]+ {return parseFloat(((neg || '') + digits.join("") + "." + dec.join("")), 10);} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+integer        = neg:"-"? digits:[0-9]+ {return (parseInt((neg || '') + digits.join(""), 10));} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 literalArray   = "#(" rest:literalArrayRest {return rest;} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 bareLiteralArray   = "(" rest:literalArrayRest {return rest;} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-literalArrayRest   = ws lits:(lit:(parseTimeLiteral / bareLiteralArray / bareSymbol) ws {return lit._value();})* ws ")" { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+literalArrayRest   = lits:(ws lit:(parseTimeLiteral / bareLiteralArray / bareSymbol) {return lit._value();})* ws ")" { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      return globals.ValueNode._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._position_((line()).__at(column())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._source_(text()) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -53,7 +53,7 @@ dynamicArray   = "{" ws expressions:expressions? ws "."? "}" { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._source_(text()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._nodes_(expressions || []); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-dynamicDictionary = "#{" ws expressions: associations? ws "}" { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+dynamicDictionary = "#{" ws expressions:associations? ws "}" { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         return globals.DynamicDictionaryNode._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                ._position_((line()).__at(column())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                ._source_(text()) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -82,12 +82,12 @@ variable       = identifier:identifier { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 reference      = variable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-keywordPair    = key:keyword ws arg:binarySend ws {return {key:key, arg: arg};} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+keywordPair    = ws key:keyword ws arg:binarySend {return {key:key, arg:arg};} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 binarySelector = bin:[\\+*/=><,@%~|&-]+ {return bin.join("");} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 unarySelector  = identifier 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-keywordPattern = pairs:(ws key:keyword ws arg:identifier {return {key:key, arg: arg};})+ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+keywordPattern = pairs:(ws key:keyword ws arg:identifier {return {key:key, arg:arg};})+ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      var keywords = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      var params = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      var i = 0; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -122,19 +122,19 @@ ret            = '^' ws expression:expression ws '.'? { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._nodes_([expression]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-temps          = "|" vars:(ws variable:identifier ws {return variable;})* "|" {return vars;} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+temps          = "|" vars:(ws variable:identifier {return variable;})* ws "|" {return vars;} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 blockParamList = params:((ws ":" ws param:identifier {return param;})+) ws "|" {return params;} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 subexpression  = '(' ws expression:expression ws ')' {return expression;} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-statements     = ret:ret [.]* {return [ret];} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                 / exps:expressions ws [.]+ ws ret:ret [.]* { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+statements     = ret:ret "."* {return [ret];} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                 / exps:expressions ws "."+ ws ret:ret "."* { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        var expressions = exps; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        expressions.push(ret); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        return expressions; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                 / expressions:expressions? [.]* { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                 / expressions:expressions? "."* { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        return expressions || []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -150,7 +150,7 @@ stSequence     = temps:temps? ws statements:statements? ws { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 jsSequence     = jsStatement 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-block          = '[' ws params:blockParamList? ws sequence:sequence? ws ']' { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+block          = '[' params:blockParamList? ws sequence:sequence? ws ']' { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      return globals.BlockNode._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._position_((line()).__at(column())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._source_(text()) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -162,7 +162,7 @@ operand        = literal / reference / subexpression 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-unaryMessage   = ws selector:unarySelector ![:] { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+unaryMessage   = ws selector:unarySelector !":" { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      return globals.SendNode._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._position_((line()).__at(column())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._source_(text()) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -214,7 +214,7 @@ binarySend     = receiver:unarySend tail:binaryTail? { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-keywordMessage = ws pairs:(pair:keywordPair ws {return pair;})+ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+keywordMessage = pairs:keywordPair+ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      var selector = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      var args = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                       for(var i = 0; i < pairs.length; i++) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -234,7 +234,7 @@ keywordSend    = receiver:binarySend tail:keywordMessage { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 message        = binaryMessage / unaryMessage / keywordMessage 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-cascade        = ws send:(keywordSend / binarySend) messages:(ws ";" ws mess:message ws {return mess;})+ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+cascade        = ws send:(keywordSend / binarySend) messages:(ws ";" ws mess:message {return mess;})+ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      var cascade = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      cascade.push(send); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      for(var i = 0; i < messages.length; i++) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -254,7 +254,7 @@ jsStatement    = "<" val:((">>" {return ">";} / [^>])*) ">" { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-method         = ws pattern:(keywordPattern / binaryPattern / unaryPattern) ws sequence:sequence? ws { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+method         = pattern:(keywordPattern / binaryPattern / unaryPattern) ws sequence:sequence? ws { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                       return globals.MethodNode._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                              ._position_((line()).__at(column())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                              ._source_(text()) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -268,4 +268,3 @@ associationSend     = send:binarySend & { return send._selector() === "->" } { r 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 associationList = ws "." ws expression:associationSend {return expression;} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 associations    = first:associationSend others:associationList* { return first.concat.apply(first, others); } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 |