anchor.diff:  
   -spec read_token(state()) -> {binary(), state()}.
   read_token(State) ->
  +  read_token(State, -1).
  +
  +-spec read_token(state(), integer()) -> {binary(), state()}.
  +read_token(State, Length) ->
     Fun = fun(Char) ->
               (not is_whitespace(Char))
                 andalso (not is_macro_terminating(Char))
           end,
  -  consume(State, Fun).
  +  consume(State, Fun, Length).
  +
   
   -spec read_until(char(), state()) -> state().
   read_until(Delim, State) ->
  
positive.code:   Size = size(RestToken),
    case unicode_char(State, 8, Size, true) of
      {Ch, _} when Ch > 8#377 ->
        clj_utils:error(<<"Octal escape sequence must be in range [0, 377]">>
                       , location(State)
                       );
      {Ch, _} -> Ch
  
negative.code: -spec unicode_char(state(), integer(), integer(), Exact :: boolean()) ->
    {binary(), state()}.
  unicode_char(State, Base, Length, IsExact) ->
    {Number, State1} = read_token(State, Length),
    Size = case IsExact of
             true -> size(Number);
             false -> Length
           end,
  
    clj_utils:error_when( Size =/= Length
                        , [ <<"Invalid character length: ">>, Size
                          , <<", should be: ">>, Length
                          ]
                        , location(State)
                        ),
    Invalid      = fun(C) -> not is_char_valid(C, Base) end,
    Chars        = unicode:characters_to_list(Number),
    InvalidChars = lists:filter(Invalid, Chars),
    InvalidChar  = case InvalidChars of
                     [] -> undefined;
                     [C | _] -> <<C/utf8>>
                   end,
    clj_utils:error_when( InvalidChars =/= []
                        , [ <<"Invalid digit: ">>, InvalidChar]
                        , location(State)
                        ),
  
    {binary_to_integer(Number, Base), State1}.
  
  -spec is_char_valid(integer(), integer()) -> boolean().
  is_char_valid(C, Base) when C >= $0, C =< $9 -> C - $0 + 1  =< Base;
  is_char_valid(C, Base) when C >= $a, C =< $z -> C - $a + 11 =< Base;
  is_char_valid(C, Base) when C >= $A, C =< $Z -> C - $A + 11 =< Base;
  is_char_valid(_, _) -> false.
  
  
  %%------------------------------------------------------------------------------
  %% Keyword
  