|  | @@ -1706,7 +1706,7 @@ $globals.SmalltalkParser = (function() {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      function peg$parsedynamicArray() {
 | 
	
		
			
				|  |  | -      var s0, s1, s2, s3, s4, s5;
 | 
	
		
			
				|  |  | +      var s0, s1, s2, s3, s4;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        var key    = peg$currPos * 61 + 22,
 | 
	
		
			
				|  |  |            cached = peg$resultsCache[key];
 | 
	
	
		
			
				|  | @@ -1726,30 +1726,24 @@ $globals.SmalltalkParser = (function() {
 | 
	
		
			
				|  |  |          if (peg$silentFails === 0) { peg$fail(peg$c61); }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        if (s1 !== peg$FAILED) {
 | 
	
		
			
				|  |  | -        s2 = peg$parsews();
 | 
	
		
			
				|  |  | +        s2 = peg$parsewsExpressions();
 | 
	
		
			
				|  |  | +        if (s2 === peg$FAILED) {
 | 
	
		
			
				|  |  | +          s2 = null;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |          if (s2 !== peg$FAILED) {
 | 
	
		
			
				|  |  | -          s3 = peg$parseexpressions();
 | 
	
		
			
				|  |  | -          if (s3 === peg$FAILED) {
 | 
	
		
			
				|  |  | -            s3 = null;
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | +          s3 = peg$parsemaybeDotsWs();
 | 
	
		
			
				|  |  |            if (s3 !== peg$FAILED) {
 | 
	
		
			
				|  |  | -            s4 = peg$parsemaybeDotsWs();
 | 
	
		
			
				|  |  | +            if (input.charCodeAt(peg$currPos) === 125) {
 | 
	
		
			
				|  |  | +              s4 = peg$c62;
 | 
	
		
			
				|  |  | +              peg$currPos++;
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +              s4 = peg$FAILED;
 | 
	
		
			
				|  |  | +              if (peg$silentFails === 0) { peg$fail(peg$c63); }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |              if (s4 !== peg$FAILED) {
 | 
	
		
			
				|  |  | -              if (input.charCodeAt(peg$currPos) === 125) {
 | 
	
		
			
				|  |  | -                s5 = peg$c62;
 | 
	
		
			
				|  |  | -                peg$currPos++;
 | 
	
		
			
				|  |  | -              } else {
 | 
	
		
			
				|  |  | -                s5 = peg$FAILED;
 | 
	
		
			
				|  |  | -                if (peg$silentFails === 0) { peg$fail(peg$c63); }
 | 
	
		
			
				|  |  | -              }
 | 
	
		
			
				|  |  | -              if (s5 !== peg$FAILED) {
 | 
	
		
			
				|  |  | -                peg$savedPos = s0;
 | 
	
		
			
				|  |  | -                s1 = peg$c64(s3);
 | 
	
		
			
				|  |  | -                s0 = s1;
 | 
	
		
			
				|  |  | -              } else {
 | 
	
		
			
				|  |  | -                peg$currPos = s0;
 | 
	
		
			
				|  |  | -                s0 = peg$FAILED;
 | 
	
		
			
				|  |  | -              }
 | 
	
		
			
				|  |  | +              peg$savedPos = s0;
 | 
	
		
			
				|  |  | +              s1 = peg$c64(s2);
 | 
	
		
			
				|  |  | +              s0 = s1;
 | 
	
		
			
				|  |  |              } else {
 | 
	
		
			
				|  |  |                peg$currPos = s0;
 | 
	
		
			
				|  |  |                s0 = peg$FAILED;
 | 
	
	
		
			
				|  | @@ -1773,7 +1767,7 @@ $globals.SmalltalkParser = (function() {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      function peg$parsedynamicDictionary() {
 | 
	
		
			
				|  |  | -      var s0, s1, s2, s3, s4, s5;
 | 
	
		
			
				|  |  | +      var s0, s1, s2, s3, s4;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        var key    = peg$currPos * 61 + 23,
 | 
	
		
			
				|  |  |            cached = peg$resultsCache[key];
 | 
	
	
		
			
				|  | @@ -1793,30 +1787,24 @@ $globals.SmalltalkParser = (function() {
 | 
	
		
			
				|  |  |          if (peg$silentFails === 0) { peg$fail(peg$c66); }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        if (s1 !== peg$FAILED) {
 | 
	
		
			
				|  |  | -        s2 = peg$parsews();
 | 
	
		
			
				|  |  | +        s2 = peg$parsewsAssociations();
 | 
	
		
			
				|  |  | +        if (s2 === peg$FAILED) {
 | 
	
		
			
				|  |  | +          s2 = null;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |          if (s2 !== peg$FAILED) {
 | 
	
		
			
				|  |  | -          s3 = peg$parseassociations();
 | 
	
		
			
				|  |  | -          if (s3 === peg$FAILED) {
 | 
	
		
			
				|  |  | -            s3 = null;
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | +          s3 = peg$parsemaybeDotsWs();
 | 
	
		
			
				|  |  |            if (s3 !== peg$FAILED) {
 | 
	
		
			
				|  |  | -            s4 = peg$parsemaybeDotsWs();
 | 
	
		
			
				|  |  | +            if (input.charCodeAt(peg$currPos) === 125) {
 | 
	
		
			
				|  |  | +              s4 = peg$c62;
 | 
	
		
			
				|  |  | +              peg$currPos++;
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +              s4 = peg$FAILED;
 | 
	
		
			
				|  |  | +              if (peg$silentFails === 0) { peg$fail(peg$c63); }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |              if (s4 !== peg$FAILED) {
 | 
	
		
			
				|  |  | -              if (input.charCodeAt(peg$currPos) === 125) {
 | 
	
		
			
				|  |  | -                s5 = peg$c62;
 | 
	
		
			
				|  |  | -                peg$currPos++;
 | 
	
		
			
				|  |  | -              } else {
 | 
	
		
			
				|  |  | -                s5 = peg$FAILED;
 | 
	
		
			
				|  |  | -                if (peg$silentFails === 0) { peg$fail(peg$c63); }
 | 
	
		
			
				|  |  | -              }
 | 
	
		
			
				|  |  | -              if (s5 !== peg$FAILED) {
 | 
	
		
			
				|  |  | -                peg$savedPos = s0;
 | 
	
		
			
				|  |  | -                s1 = peg$c67(s3);
 | 
	
		
			
				|  |  | -                s0 = s1;
 | 
	
		
			
				|  |  | -              } else {
 | 
	
		
			
				|  |  | -                peg$currPos = s0;
 | 
	
		
			
				|  |  | -                s0 = peg$FAILED;
 | 
	
		
			
				|  |  | -              }
 | 
	
		
			
				|  |  | +              peg$savedPos = s0;
 | 
	
		
			
				|  |  | +              s1 = peg$c67(s2);
 | 
	
		
			
				|  |  | +              s0 = s1;
 | 
	
		
			
				|  |  |              } else {
 | 
	
		
			
				|  |  |                peg$currPos = s0;
 | 
	
		
			
				|  |  |                s0 = peg$FAILED;
 | 
	
	
		
			
				|  | @@ -2303,8 +2291,8 @@ $globals.SmalltalkParser = (function() {
 | 
	
		
			
				|  |  |        return s0;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    function peg$parseexpressions() {
 | 
	
		
			
				|  |  | -      var s0, s1, s2, s3;
 | 
	
		
			
				|  |  | +    function peg$parsewsExpressions() {
 | 
	
		
			
				|  |  | +      var s0, s1, s2, s3, s4;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        var key    = peg$currPos * 61 + 35,
 | 
	
		
			
				|  |  |            cached = peg$resultsCache[key];
 | 
	
	
		
			
				|  | @@ -2316,18 +2304,24 @@ $globals.SmalltalkParser = (function() {
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        s0 = peg$currPos;
 | 
	
		
			
				|  |  | -      s1 = peg$parseexpression();
 | 
	
		
			
				|  |  | +      s1 = peg$parsemaybeDotsWs();
 | 
	
		
			
				|  |  |        if (s1 !== peg$FAILED) {
 | 
	
		
			
				|  |  | -        s2 = [];
 | 
	
		
			
				|  |  | -        s3 = peg$parsewsExpressionsRest();
 | 
	
		
			
				|  |  | -        while (s3 !== peg$FAILED) {
 | 
	
		
			
				|  |  | -          s2.push(s3);
 | 
	
		
			
				|  |  | -          s3 = peg$parsewsExpressionsRest();
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +        s2 = peg$parseexpression();
 | 
	
		
			
				|  |  |          if (s2 !== peg$FAILED) {
 | 
	
		
			
				|  |  | -          peg$savedPos = s0;
 | 
	
		
			
				|  |  | -          s1 = peg$c87(s1, s2);
 | 
	
		
			
				|  |  | -          s0 = s1;
 | 
	
		
			
				|  |  | +          s3 = [];
 | 
	
		
			
				|  |  | +          s4 = peg$parsewsExpressionsRest();
 | 
	
		
			
				|  |  | +          while (s4 !== peg$FAILED) {
 | 
	
		
			
				|  |  | +            s3.push(s4);
 | 
	
		
			
				|  |  | +            s4 = peg$parsewsExpressionsRest();
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          if (s3 !== peg$FAILED) {
 | 
	
		
			
				|  |  | +            peg$savedPos = s0;
 | 
	
		
			
				|  |  | +            s1 = peg$c87(s2, s3);
 | 
	
		
			
				|  |  | +            s0 = s1;
 | 
	
		
			
				|  |  | +          } else {
 | 
	
		
			
				|  |  | +            peg$currPos = s0;
 | 
	
		
			
				|  |  | +            s0 = peg$FAILED;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  |          } else {
 | 
	
		
			
				|  |  |            peg$currPos = s0;
 | 
	
		
			
				|  |  |            s0 = peg$FAILED;
 | 
	
	
		
			
				|  | @@ -2724,7 +2718,7 @@ $globals.SmalltalkParser = (function() {
 | 
	
		
			
				|  |  |        return s0;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    function peg$parsestatementsWs() {
 | 
	
		
			
				|  |  | +    function peg$parsewsStatementsWs() {
 | 
	
		
			
				|  |  |        var s0, s1, s2, s3, s4, s5, s6;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        var key    = peg$currPos * 61 + 41,
 | 
	
	
		
			
				|  | @@ -2737,13 +2731,19 @@ $globals.SmalltalkParser = (function() {
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        s0 = peg$currPos;
 | 
	
		
			
				|  |  | -      s1 = peg$parseret();
 | 
	
		
			
				|  |  | +      s1 = peg$parsemaybeDotsWs();
 | 
	
		
			
				|  |  |        if (s1 !== peg$FAILED) {
 | 
	
		
			
				|  |  | -        s2 = peg$parsemaybeDotsWs();
 | 
	
		
			
				|  |  | +        s2 = peg$parseret();
 | 
	
		
			
				|  |  |          if (s2 !== peg$FAILED) {
 | 
	
		
			
				|  |  | -          peg$savedPos = s0;
 | 
	
		
			
				|  |  | -          s1 = peg$c100(s1);
 | 
	
		
			
				|  |  | -          s0 = s1;
 | 
	
		
			
				|  |  | +          s3 = peg$parsemaybeDotsWs();
 | 
	
		
			
				|  |  | +          if (s3 !== peg$FAILED) {
 | 
	
		
			
				|  |  | +            peg$savedPos = s0;
 | 
	
		
			
				|  |  | +            s1 = peg$c100(s2);
 | 
	
		
			
				|  |  | +            s0 = s1;
 | 
	
		
			
				|  |  | +          } else {
 | 
	
		
			
				|  |  | +            peg$currPos = s0;
 | 
	
		
			
				|  |  | +            s0 = peg$FAILED;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  |          } else {
 | 
	
		
			
				|  |  |            peg$currPos = s0;
 | 
	
		
			
				|  |  |            s0 = peg$FAILED;
 | 
	
	
		
			
				|  | @@ -2754,7 +2754,7 @@ $globals.SmalltalkParser = (function() {
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        if (s0 === peg$FAILED) {
 | 
	
		
			
				|  |  |          s0 = peg$currPos;
 | 
	
		
			
				|  |  | -        s1 = peg$parseexpressions();
 | 
	
		
			
				|  |  | +        s1 = peg$parsewsExpressions();
 | 
	
		
			
				|  |  |          if (s1 !== peg$FAILED) {
 | 
	
		
			
				|  |  |            s2 = peg$parsews();
 | 
	
		
			
				|  |  |            if (s2 !== peg$FAILED) {
 | 
	
	
		
			
				|  | @@ -2801,7 +2801,7 @@ $globals.SmalltalkParser = (function() {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (s0 === peg$FAILED) {
 | 
	
		
			
				|  |  |            s0 = peg$currPos;
 | 
	
		
			
				|  |  | -          s1 = peg$parseexpressions();
 | 
	
		
			
				|  |  | +          s1 = peg$parsewsExpressions();
 | 
	
		
			
				|  |  |            if (s1 === peg$FAILED) {
 | 
	
		
			
				|  |  |              s1 = null;
 | 
	
		
			
				|  |  |            }
 | 
	
	
		
			
				|  | @@ -2871,7 +2871,7 @@ $globals.SmalltalkParser = (function() {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      function peg$parsewsStSequenceWs() {
 | 
	
		
			
				|  |  | -      var s0, s1, s2, s3, s4;
 | 
	
		
			
				|  |  | +      var s0, s1, s2, s3;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        var key    = peg$currPos * 61 + 43,
 | 
	
		
			
				|  |  |            cached = peg$resultsCache[key];
 | 
	
	
		
			
				|  | @@ -2890,20 +2890,14 @@ $globals.SmalltalkParser = (function() {
 | 
	
		
			
				|  |  |            s2 = null;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (s2 !== peg$FAILED) {
 | 
	
		
			
				|  |  | -          s3 = peg$parsemaybeDotsWs();
 | 
	
		
			
				|  |  | +          s3 = peg$parsewsStatementsWs();
 | 
	
		
			
				|  |  | +          if (s3 === peg$FAILED) {
 | 
	
		
			
				|  |  | +            s3 = null;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  |            if (s3 !== peg$FAILED) {
 | 
	
		
			
				|  |  | -            s4 = peg$parsestatementsWs();
 | 
	
		
			
				|  |  | -            if (s4 === peg$FAILED) {
 | 
	
		
			
				|  |  | -              s4 = null;
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            if (s4 !== peg$FAILED) {
 | 
	
		
			
				|  |  | -              peg$savedPos = s0;
 | 
	
		
			
				|  |  | -              s1 = peg$c104(s2, s4);
 | 
	
		
			
				|  |  | -              s0 = s1;
 | 
	
		
			
				|  |  | -            } else {
 | 
	
		
			
				|  |  | -              peg$currPos = s0;
 | 
	
		
			
				|  |  | -              s0 = peg$FAILED;
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            peg$savedPos = s0;
 | 
	
		
			
				|  |  | +            s1 = peg$c104(s2, s3);
 | 
	
		
			
				|  |  | +            s0 = s1;
 | 
	
		
			
				|  |  |            } else {
 | 
	
		
			
				|  |  |              peg$currPos = s0;
 | 
	
		
			
				|  |  |              s0 = peg$FAILED;
 | 
	
	
		
			
				|  | @@ -3799,8 +3793,8 @@ $globals.SmalltalkParser = (function() {
 | 
	
		
			
				|  |  |        return s0;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    function peg$parseassociations() {
 | 
	
		
			
				|  |  | -      var s0, s1, s2, s3;
 | 
	
		
			
				|  |  | +    function peg$parsewsAssociations() {
 | 
	
		
			
				|  |  | +      var s0, s1, s2, s3, s4;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        var key    = peg$currPos * 61 + 60,
 | 
	
		
			
				|  |  |            cached = peg$resultsCache[key];
 | 
	
	
		
			
				|  | @@ -3812,18 +3806,24 @@ $globals.SmalltalkParser = (function() {
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        s0 = peg$currPos;
 | 
	
		
			
				|  |  | -      s1 = peg$parseassociationSend();
 | 
	
		
			
				|  |  | +      s1 = peg$parsemaybeDotsWs();
 | 
	
		
			
				|  |  |        if (s1 !== peg$FAILED) {
 | 
	
		
			
				|  |  | -        s2 = [];
 | 
	
		
			
				|  |  | -        s3 = peg$parsewsAssociationsRest();
 | 
	
		
			
				|  |  | -        while (s3 !== peg$FAILED) {
 | 
	
		
			
				|  |  | -          s2.push(s3);
 | 
	
		
			
				|  |  | -          s3 = peg$parsewsAssociationsRest();
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +        s2 = peg$parseassociationSend();
 | 
	
		
			
				|  |  |          if (s2 !== peg$FAILED) {
 | 
	
		
			
				|  |  | -          peg$savedPos = s0;
 | 
	
		
			
				|  |  | -          s1 = peg$c137(s1, s2);
 | 
	
		
			
				|  |  | -          s0 = s1;
 | 
	
		
			
				|  |  | +          s3 = [];
 | 
	
		
			
				|  |  | +          s4 = peg$parsewsAssociationsRest();
 | 
	
		
			
				|  |  | +          while (s4 !== peg$FAILED) {
 | 
	
		
			
				|  |  | +            s3.push(s4);
 | 
	
		
			
				|  |  | +            s4 = peg$parsewsAssociationsRest();
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          if (s3 !== peg$FAILED) {
 | 
	
		
			
				|  |  | +            peg$savedPos = s0;
 | 
	
		
			
				|  |  | +            s1 = peg$c137(s2, s3);
 | 
	
		
			
				|  |  | +            s0 = s1;
 | 
	
		
			
				|  |  | +          } else {
 | 
	
		
			
				|  |  | +            peg$currPos = s0;
 | 
	
		
			
				|  |  | +            s0 = peg$FAILED;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  |          } else {
 | 
	
		
			
				|  |  |            peg$currPos = s0;
 | 
	
		
			
				|  |  |            s0 = peg$FAILED;
 |