alter error macro in prep for custom error handlers

This commit is contained in:
alisdair sullivan 2013-03-02 16:31:58 -08:00
parent 588b5bcd2e
commit 530e2ff73e

View file

@ -99,8 +99,11 @@ decoder(Handler, State, Config) ->
%% error, incomplete and event macros
-ifndef(error).
-define(error(Args),
erlang:error(badarg, Args)
-define(error(Bin, Handler, Stack, Config),
erlang:error(badarg)
).
-define(error(Bin, Handler, Acc, Stack, Config),
erlang:error(badarg)
).
-endif.
@ -114,7 +117,7 @@ decoder(Handler, State, Config) ->
Handler,
Stack,
Config#config{explicit_end=false}) of
{incomplete, _} -> ?error([Rest, Handler, Stack, Config])
{incomplete, _} -> ?error(Rest, Handler, Stack, Config)
; Events -> Events
end
end
@ -129,7 +132,7 @@ decoder(Handler, State, Config) ->
Acc,
Stack,
Config#config{explicit_end=false}) of
{incomplete, _} -> ?error([Rest, Handler, Acc, Stack, Config])
{incomplete, _} -> ?error(Rest, Handler, Acc, Stack, Config)
; Events -> Events
end
end
@ -167,7 +170,7 @@ maybe_bom(<<16#bb, Rest/binary>>, Handler, Stack, Config) ->
maybe_bom(<<>>, Handler, Stack, Config) ->
?incomplete(maybe_bom, <<>>, Handler, Stack, Config);
maybe_bom(Bin, Handler, Stack, Config) ->
?error([Bin, Handler, Stack, Config]).
?error(Bin, Handler, Stack, Config).
definitely_bom(<<16#bf, Rest/binary>>, Handler, Stack, Config) ->
@ -175,7 +178,7 @@ definitely_bom(<<16#bf, Rest/binary>>, Handler, Stack, Config) ->
definitely_bom(<<>>, Handler, Stack, Config) ->
?incomplete(definitely_bom, <<>>, Handler, Stack, Config);
definitely_bom(Bin, Handler, Stack, Config) ->
?error([Bin, Handler, Stack, Config]).
?error(Bin, Handler, Stack, Config).
value(<<?doublequote, Rest/binary>>, Handler, Stack, Config) ->
@ -205,7 +208,7 @@ value(<<?solidus, Rest/binary>>, Handler, Stack, Config=#config{comments=true})
value(<<>>, Handler, Stack, Config) ->
?incomplete(value, <<>>, Handler, Stack, Config);
value(Bin, Handler, Stack, Config) ->
?error([Bin, Handler, Stack, Config]).
?error(Bin, Handler, Stack, Config).
object(<<?doublequote, Rest/binary>>, Handler, Stack, Config) ->
@ -221,7 +224,7 @@ object(<<?solidus, Rest/binary>>, Handler, Stack, Config=#config{comments=true})
object(<<>>, Handler, Stack, Config) ->
?incomplete(object, <<>>, Handler, Stack, Config);
object(Bin, Handler, Stack, Config) ->
?error([Bin, Handler, Stack, Config]).
?error(Bin, Handler, Stack, Config).
array(<<?end_array, Rest/binary>>, Handler, [array|Stack], Config) ->
@ -245,7 +248,7 @@ colon(<<?solidus, Rest/binary>>, Handler, Stack, Config=#config{comments=true})
colon(<<>>, Handler, Stack, Config) ->
?incomplete(colon, <<>>, Handler, Stack, Config);
colon(Bin, Handler, Stack, Config) ->
?error([Bin, Handler, Stack, Config]).
?error(Bin, Handler, Stack, Config).
key(<<?doublequote, Rest/binary>>, Handler, Stack, Config) ->
@ -259,7 +262,7 @@ key(<<?solidus, Rest/binary>>, Handler, Stack, Config=#config{comments=true}) ->
key(<<>>, Handler, Stack, Config) ->
?incomplete(key, <<>>, Handler, Stack, Config);
key(Bin, Handler, Stack, Config) ->
?error([Bin, Handler, Stack, Config]).
?error(Bin, Handler, Stack, Config).
%% explicitly whitelist ascii set for better efficiency (seriously, it's worth
@ -541,7 +544,7 @@ string(<<C, Rest/binary>>, Handler, Acc, Stack, #config{replaced_bad_utf8=true}
string(Bin, Handler, Acc, Stack, Config) ->
case partial_utf(Bin) of
true -> ?incomplete(string, Bin, Handler, Acc, Stack, Config);
false -> ?error([Bin, Handler, Acc, Stack, Config])
false -> ?error(Bin, Handler, Acc, Stack, Config)
end.
@ -623,7 +626,7 @@ unescape(<<$u, $d, A, B, C, ?rsolidus, Rest/binary>>, Handler, Acc, Stack, Confi
true -> ?incomplete(string, <<?rsolidus, $u, $d, A, B, C, ?rsolidus, Rest/binary>>, Handler, Acc, Stack, Config);
false when Config#config.replaced_bad_utf8 ->
string(<<?rsolidus, Rest/binary>>, Handler, acc_seq(Acc, 16#fffd), Stack, Config);
false -> ?error([<<$u, $d, A, B, C, ?rsolidus, Rest/binary>>, Handler, Acc, Stack, Config])
false -> ?error(<<$u, $d, A, B, C, ?rsolidus, Rest/binary>>, Handler, Acc, Stack, Config)
end;
unescape(<<$u, $d, A, B, C>>, Handler, Acc, Stack, Config)
when (A == $8 orelse A == $9 orelse A == $a orelse A == $b) andalso
@ -637,14 +640,14 @@ unescape(<<$u, A, B, C, D, Rest/binary>>, Handler, Acc, Stack, Config)
string(Rest, Handler, acc_seq(Acc, maybe_replace(Codepoint, Config)), Stack, Config);
_ when Config#config.replaced_bad_utf8 ->
string(Rest, Handler, acc_seq(Acc, 16#fffd), Stack, Config);
_ -> ?error([<<$u, A, B, C, D, Rest/binary>>, Handler, Acc, Stack, Config])
_ -> ?error(<<$u, A, B, C, D, Rest/binary>>, Handler, Acc, Stack, Config)
end;
unescape(Bin, Handler, Acc, Stack, Config=#config{ignored_bad_escapes=true}) ->
string(Bin, Handler, acc_seq(Acc, ?rsolidus), Stack, Config);
unescape(Bin, Handler, Acc, Stack, Config) ->
case is_partial_escape(Bin) of
true -> ?incomplete(string, <<?rsolidus/utf8, Bin/binary>>, Handler, Acc, Stack, Config);
false -> ?error([Bin, Handler, Acc, Stack, Config])
false -> ?error(Bin, Handler, Acc, Stack, Config)
end.
@ -693,7 +696,7 @@ negative(<<S, Rest/binary>>, Handler, Acc, Stack, Config) when ?is_nonzero(S) ->
negative(<<>>, Handler, "-", Stack, Config) ->
?incomplete(value, <<"-">>, Handler, Stack, Config);
negative(Bin, Handler, Acc, Stack, Config) ->
?error([Bin, Handler, Acc, Stack, Config]).
?error(Bin, Handler, Acc, Stack, Config).
zero(<<?decimalpoint, Rest/binary>>, Handler, Acc, Stack, Config) ->
@ -722,7 +725,7 @@ decimal(<<S, Rest/binary>>, Handler, Acc, Stack, Config) when S=:= ?zero; ?is_no
decimal(Rest, Handler, acc_seq(Acc, S), Stack, Config);
decimal(<<S, Rest/binary>>, Handler, Acc, Stack, Config) when S =:= $e; S =:= $E ->
case Acc of
[?decimalpoint|_] -> ?error([<<S, Rest/binary>>, Handler, Acc, Stack, Config]);
[?decimalpoint|_] -> ?error(<<S, Rest/binary>>, Handler, Acc, Stack, Config);
_ -> e(Rest, Handler, acc_seq(Acc, $e), Stack, Config)
end;
decimal(Bin, Handler, Acc, Stack, Config) ->
@ -736,7 +739,7 @@ e(<<S, Rest/binary>>, Handler, Acc, Stack, Config) when S =:= ?positive; S =:= ?
e(<<>>, Handler, [$e|Acc], Stack, Config) ->
?incomplete(decimal, <<$e>>, Handler, Acc, Stack, Config);
e(Bin, Handler, Acc, Stack, Config) ->
?error([Bin, Handler, Acc, Stack, Config]).
?error(Bin, Handler, Acc, Stack, Config).
ex(<<S, Rest/binary>>, Handler, Acc, Stack, Config) when S =:= ?zero; ?is_nonzero(S) ->
@ -744,7 +747,7 @@ ex(<<S, Rest/binary>>, Handler, Acc, Stack, Config) when S =:= ?zero; ?is_nonzer
ex(<<>>, Handler, [S, $e|Acc], Stack, Config) ->
?incomplete(decimal, <<$e, S/utf8>>, Handler, Acc, Stack, Config);
ex(Bin, Handler, Acc, Stack, Config) ->
?error([Bin, Handler, Acc, Stack, Config]).
?error(Bin, Handler, Acc, Stack, Config).
exp(<<S, Rest/binary>>, Handler, Acc, Stack, Config) when S =:= ?zero; ?is_nonzero(S) ->
@ -775,7 +778,7 @@ finish_number(<<>>, Handler, {NumType, Acc}, Stack, Config) ->
exp -> ?incomplete(exp, <<>>, Handler, Acc, Stack, Config)
end;
finish_number(Bin, Handler, Acc, Stack, Config) ->
?error([Bin, Handler, Acc, Stack, Config]).
?error(Bin, Handler, Acc, Stack, Config).
format_number({zero, Acc}) -> {integer, list_to_integer(lists:reverse(Acc))};
@ -793,7 +796,7 @@ true(<<$r>>, Handler, Stack, Config) ->
true(<<>>, Handler, Stack, Config) ->
?incomplete(true, <<>>, Handler, Stack, Config);
true(Bin, Handler, Stack, Config) ->
?error([Bin, Handler, Stack, Config]).
?error(Bin, Handler, Stack, Config).
false(<<$a, $l, $s, $e, Rest/binary>>, Handler, Stack, Config) ->
@ -807,7 +810,7 @@ false(<<$a>>, Handler, Stack, Config) ->
false(<<>>, Handler, Stack, Config) ->
?incomplete(false, <<>>, Handler, Stack, Config);
false(Bin, Handler, Stack, Config) ->
?error([Bin, Handler, Stack, Config]).
?error(Bin, Handler, Stack, Config).
null(<<$u, $l, $l, Rest/binary>>, Handler, Stack, Config) ->
@ -819,7 +822,7 @@ null(<<$u>>, Handler, Stack, Config) ->
null(<<>>, Handler, Stack, Config) ->
?incomplete(null, <<>>, Handler, Stack, Config);
null(Bin, Handler, Stack, Config) ->
?error([Bin, Handler, Stack, Config]).
?error(Bin, Handler, Stack, Config).
%% this just exists to bridge to when i can properly clean up comments
@ -838,7 +841,7 @@ comment(<<_, Rest/binary>>, Handler, [comment|Stack], Config=#config{replaced_ba
comment(<<>>, Handler, [Resume|Stack], Config) ->
?incomplete(comment, <<>>, Handler, Resume, Stack, Config);
comment(Bin, Handler, Stack, Config) ->
?error([Bin, Handler, Stack, Config]).
?error(Bin, Handler, Stack, Config).
single_comment(<<?newline, Rest/binary>>, Handler, Stack, Config) ->
@ -852,7 +855,7 @@ single_comment(<<>>, Handler, [done], Config=#config{explicit_end=false}) ->
single_comment(<<>>, Handler, [Resume|Stack], Config) ->
?incomplete(comment, <<?solidus>>, Handler, Resume, Stack, Config);
single_comment(Bin, Handler, Stack, Config) ->
?error([Bin, Handler, Stack, Config]).
?error(Bin, Handler, Stack, Config).
multi_comment(<<?star, Rest/binary>>, Handler, Stack, Config) ->
@ -866,7 +869,7 @@ multi_comment(<<_, Rest/binary>>, Handler, Stack, Config=#config{replaced_bad_ut
multi_comment(<<>>, Handler, [Resume|Stack], Config) ->
?incomplete(comment, <<?star>>, Handler, Resume, Stack, Config);
multi_comment(Bin, Handler, Stack, Config) ->
?error([Bin, Handler, Stack, Config]).
?error(Bin, Handler, Stack, Config).
end_multi_comment(<<?solidus, Rest/binary>>, Handler, Stack, Config) ->
@ -876,7 +879,7 @@ end_multi_comment(<<_S/utf8, Rest/binary>>, Handler, Stack, Config) ->
end_multi_comment(<<>>, Handler, [Resume|Stack], Config) ->
?incomplete(comment, <<?star, ?space, ?star>>, Handler, Resume, Stack, Config);
end_multi_comment(Bin, Handler, Stack, Config) ->
?error([Bin, Handler, Stack, Config]).
?error(Bin, Handler, Stack, Config).
end_comment(Rest, Handler, [Resume|Stack], Config) ->
@ -909,7 +912,7 @@ maybe_done(<<?solidus, Rest/binary>>, Handler, Stack, Config=#config{comments=tr
maybe_done(<<>>, Handler, Stack, Config) when length(Stack) > 0 ->
?incomplete(maybe_done, <<>>, Handler, Stack, Config);
maybe_done(Bin, Handler, Stack, Config) ->
?error([Bin, Handler, Stack, Config]).
?error(Bin, Handler, Stack, Config).
done(<<S, Rest/binary>>, Handler, [], Config) when ?is_whitespace(S) ->
@ -923,7 +926,7 @@ done(<<>>, {Handler, State}, [], Config = #config{explicit_end=true}) ->
end
};
done(<<>>, {_Handler, State}, [], _Config) -> State;
done(Bin, Handler, Stack, Config) -> ?error([Bin, Handler, Stack, Config]).
done(Bin, Handler, Stack, Config) -> ?error(Bin, Handler, Stack, Config).