anchor.diff:      L = length(FSubStr),
       L==length(ASubStr) andalso L>=1 andalso L=<2.
      
  -
  -    
  -%% farity_list({cons,_Lc,{op,_Lo,'/',{atom,_La,A},{integer,_Li,I}},Tail}) ->
  -%%     [{A,I}|farity_list(Tail)];
  -%% farity_list({nil,_Ln}) -> [];
  -%% farity_list(Other) ->
  -%%     ret_err(?line(Other), "bad function arity").
  -
   record_tuple({tuple,_Lt,Fields}) ->
       record_fields(Fields);
   record_tuple(Other) ->
  
positive.code: 
  error_bad_decl(L, S) ->
      ret_err(L, io_lib:format("bad ~w declaration", [S])).
  
  
  farity_list({cons,_Lc,{op,_Lo,'/',{atom,La,A},{integer,Li,I}},Tail}) ->
      [{{atom, La,A},{integer, Li, I}}|farity_list(Tail)];     %% Modified by Huiqing Li.
  
negative.code: %% These really suck and are only here until Calle gets multiple
  %% entry points working.
  
  -spec parse_form(Tokens) -> {ok, AbsForm} | {error, ErrorInfo} when
        Tokens :: [token()],
        AbsForm :: abstract_form(),
        ErrorInfo :: error_info().
  parse_form([{'-',L1},{atom,L2,spec}|Tokens]) ->
      parse([{'-',L1},{'spec',L2}|Tokens]);
  parse_form(Tokens) ->
      parse(Tokens).
  
  -spec parse_exprs(Tokens) -> {ok, ExprList} | {error, ErrorInfo} when
        Tokens :: [token()],
        ExprList :: [abstract_expr()],
        ErrorInfo :: error_info().
  parse_exprs(Tokens) ->
      case parse([{atom,0,f},{'(',0},{')',0},{'->',0}|Tokens]) of
  	{ok,{function,_Lf,f,0,[{clause,_Lc,[],[],Exprs}]}} ->
  