anchor.diff:  
   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.
  
positive.code: has_undefined(_) ->
      false.
  
  term(Expr) ->
      try normalise(Expr)
      catch _:_R -> ret_err(?line(Expr), "bad attribute")
  
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}]}} ->
  