anchor.diff:            throw "Unexpected next character $index $ch";
           }
         }
  -      if (index == lastIndex) {
  -        throw "Lex loop must advance: $index";
  -      }
  -    }
  -
  -    while (index < textLength) {
  +    }
  +
  +    whileChars(() {
         try {
           oneLexLoop();
         } catch (e, s) {
           throw "index: $index $e\nORIG STACK:\n" + s.toString();
         }
  -
  -    }
  +    });
       return tokens;
   
     }
   
   
   
  -}+}
  
positive.code:       int lastDot = -1, peekIndex = -1;
        String methodName;
  
        while (index < textLength) {
          ch = text[index];
          if (ch == '.' || isIdent() || isNumber()) {
            if (ch == '.') {
              lastDot = index;
            }
            ident += ch;
          } else {
            break;
          }
          index++;
        }
  
        // The identifier had a . in the identifier
        if (lastDot != -1) {
  
negative.code:               number[number.length - 1] == 'e') {
              throw "Invalid exponent";
            } else {
              breakWhile();
            }
          }
          index++;
        });
        tokens.add(new Token(start, number)..withFn((_,_1,_2) => int.parse(number)));
      }
      readIdent() {
  