add state names to errors for future use
This commit is contained in:
parent
530e2ff73e
commit
ae7beffe73
1 changed files with 39 additions and 34 deletions
|
@ -99,10 +99,10 @@ decoder(Handler, State, Config) ->
|
|||
|
||||
%% error, incomplete and event macros
|
||||
-ifndef(error).
|
||||
-define(error(Bin, Handler, Stack, Config),
|
||||
-define(error(_State, _Bin, _Handler, _Stack, _Config),
|
||||
erlang:error(badarg)
|
||||
).
|
||||
-define(error(Bin, Handler, Acc, Stack, Config),
|
||||
-define(error(_State, _Bin, _Handler, _Acc, _Stack, _Config),
|
||||
erlang:error(badarg)
|
||||
).
|
||||
-endif.
|
||||
|
@ -117,7 +117,7 @@ decoder(Handler, State, Config) ->
|
|||
Handler,
|
||||
Stack,
|
||||
Config#config{explicit_end=false}) of
|
||||
{incomplete, _} -> ?error(Rest, Handler, Stack, Config)
|
||||
{incomplete, _} -> ?error(State, Rest, Handler, Stack, Config)
|
||||
; Events -> Events
|
||||
end
|
||||
end
|
||||
|
@ -132,7 +132,7 @@ decoder(Handler, State, Config) ->
|
|||
Acc,
|
||||
Stack,
|
||||
Config#config{explicit_end=false}) of
|
||||
{incomplete, _} -> ?error(Rest, Handler, Acc, Stack, Config)
|
||||
{incomplete, _} -> ?error(State, Rest, Handler, Acc, Stack, Config)
|
||||
; Events -> Events
|
||||
end
|
||||
end
|
||||
|
@ -168,17 +168,17 @@ start(Bin, Handler, Stack, Config) ->
|
|||
maybe_bom(<<16#bb, Rest/binary>>, Handler, Stack, Config) ->
|
||||
definitely_bom(Rest, Handler, Stack, Config);
|
||||
maybe_bom(<<>>, Handler, Stack, Config) ->
|
||||
?incomplete(maybe_bom, <<>>, Handler, Stack, Config);
|
||||
?incomplete(start, <<16#ef>>, Handler, Stack, Config);
|
||||
maybe_bom(Bin, Handler, Stack, Config) ->
|
||||
?error(Bin, Handler, Stack, Config).
|
||||
?error(start, <<16#ef>>, Handler, Stack, Config).
|
||||
|
||||
|
||||
definitely_bom(<<16#bf, Rest/binary>>, Handler, Stack, Config) ->
|
||||
value(Rest, Handler, Stack, Config);
|
||||
definitely_bom(<<>>, Handler, Stack, Config) ->
|
||||
?incomplete(definitely_bom, <<>>, Handler, Stack, Config);
|
||||
?incomplete(start, <<16#ef, 16#bb>>, Handler, Stack, Config);
|
||||
definitely_bom(Bin, Handler, Stack, Config) ->
|
||||
?error(Bin, Handler, Stack, Config).
|
||||
?error(start, <<16#ef, 16#bb>>, Handler, Stack, Config).
|
||||
|
||||
|
||||
value(<<?doublequote, Rest/binary>>, Handler, Stack, Config) ->
|
||||
|
@ -208,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(value, Bin, Handler, Stack, Config).
|
||||
|
||||
|
||||
object(<<?doublequote, Rest/binary>>, Handler, Stack, Config) ->
|
||||
|
@ -224,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(object, Bin, Handler, Stack, Config).
|
||||
|
||||
|
||||
array(<<?end_array, Rest/binary>>, Handler, [array|Stack], Config) ->
|
||||
|
@ -248,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(colon, Bin, Handler, Stack, Config).
|
||||
|
||||
|
||||
key(<<?doublequote, Rest/binary>>, Handler, Stack, Config) ->
|
||||
|
@ -262,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(key, Bin, Handler, Stack, Config).
|
||||
|
||||
|
||||
%% explicitly whitelist ascii set for better efficiency (seriously, it's worth
|
||||
|
@ -544,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(string, Bin, Handler, Acc, Stack, Config)
|
||||
end.
|
||||
|
||||
|
||||
|
@ -626,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(string, <<?rsolidus, $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
|
||||
|
@ -640,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(string, <<?rsolidus, $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(string, <<?rsolidus, Bin/binary>>, Handler, Acc, Stack, Config)
|
||||
end.
|
||||
|
||||
|
||||
|
@ -693,10 +693,10 @@ negative(<<$0, Rest/binary>>, Handler, Acc, Stack, Config) ->
|
|||
zero(Rest, Handler, acc_seq(Acc, $0), Stack, Config);
|
||||
negative(<<S, Rest/binary>>, Handler, Acc, Stack, Config) when ?is_nonzero(S) ->
|
||||
integer(Rest, Handler, acc_seq(Acc, S), Stack, Config);
|
||||
negative(<<>>, Handler, "-", Stack, Config) ->
|
||||
?incomplete(value, <<"-">>, Handler, Stack, Config);
|
||||
negative(<<>>, Handler, [?negative], Stack, Config) ->
|
||||
?incomplete(value, <<?negative>>, Handler, Stack, Config);
|
||||
negative(Bin, Handler, Acc, Stack, Config) ->
|
||||
?error(Bin, Handler, Acc, Stack, Config).
|
||||
?error(value, <<?negative, Bin/binary>>, Handler, Acc, Stack, Config).
|
||||
|
||||
|
||||
zero(<<?decimalpoint, Rest/binary>>, Handler, Acc, Stack, Config) ->
|
||||
|
@ -725,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(decimal, <<S, Rest/binary>>, Handler, Acc, Stack, Config);
|
||||
_ -> e(Rest, Handler, acc_seq(Acc, $e), Stack, Config)
|
||||
end;
|
||||
decimal(Bin, Handler, Acc, Stack, Config) ->
|
||||
|
@ -739,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(decimal, <<$e, Bin/binary>>, Handler, Acc, Stack, Config).
|
||||
|
||||
|
||||
ex(<<S, Rest/binary>>, Handler, Acc, Stack, Config) when S =:= ?zero; ?is_nonzero(S) ->
|
||||
|
@ -747,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(decimal, <<$e, Bin/binary>>, Handler, Acc, Stack, Config).
|
||||
|
||||
|
||||
exp(<<S, Rest/binary>>, Handler, Acc, Stack, Config) when S =:= ?zero; ?is_nonzero(S) ->
|
||||
|
@ -777,8 +777,13 @@ finish_number(<<>>, Handler, {NumType, Acc}, Stack, Config) ->
|
|||
decimal -> ?incomplete(decimal, <<>>, Handler, Acc, Stack, Config);
|
||||
exp -> ?incomplete(exp, <<>>, Handler, Acc, Stack, Config)
|
||||
end;
|
||||
finish_number(Bin, Handler, Acc, Stack, Config) ->
|
||||
?error(Bin, Handler, Acc, Stack, Config).
|
||||
finish_number(Bin, Handler, {NumType, Acc}, Stack, Config) ->
|
||||
case NumType of
|
||||
zero -> ?error(zero, <<>>, Handler, Acc, Stack, Config);
|
||||
integer -> ?error(integer, <<>>, Handler, Acc, Stack, Config);
|
||||
decimal -> ?error(decimal, <<>>, Handler, Acc, Stack, Config);
|
||||
exp -> ?error(exp, <<>>, Handler, Acc, Stack, Config)
|
||||
end.
|
||||
|
||||
|
||||
format_number({zero, Acc}) -> {integer, list_to_integer(lists:reverse(Acc))};
|
||||
|
@ -796,7 +801,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(true, Bin, Handler, Stack, Config).
|
||||
|
||||
|
||||
false(<<$a, $l, $s, $e, Rest/binary>>, Handler, Stack, Config) ->
|
||||
|
@ -810,7 +815,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(false, Bin, Handler, Stack, Config).
|
||||
|
||||
|
||||
null(<<$u, $l, $l, Rest/binary>>, Handler, Stack, Config) ->
|
||||
|
@ -822,7 +827,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(null, Bin, Handler, Stack, Config).
|
||||
|
||||
|
||||
%% this just exists to bridge to when i can properly clean up comments
|
||||
|
@ -841,7 +846,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(comment, Bin, Handler, Stack, Config).
|
||||
|
||||
|
||||
single_comment(<<?newline, Rest/binary>>, Handler, Stack, Config) ->
|
||||
|
@ -855,7 +860,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(comment, <<?solidus, Bin/binary>>, Handler, Stack, Config).
|
||||
|
||||
|
||||
multi_comment(<<?star, Rest/binary>>, Handler, Stack, Config) ->
|
||||
|
@ -869,7 +874,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(comment, <<?star, Bin/binary>>, Handler, Stack, Config).
|
||||
|
||||
|
||||
end_multi_comment(<<?solidus, Rest/binary>>, Handler, Stack, Config) ->
|
||||
|
@ -877,9 +882,9 @@ end_multi_comment(<<?solidus, Rest/binary>>, Handler, Stack, Config) ->
|
|||
end_multi_comment(<<_S/utf8, Rest/binary>>, Handler, Stack, Config) ->
|
||||
multi_comment(Rest, Handler, Stack, Config);
|
||||
end_multi_comment(<<>>, Handler, [Resume|Stack], Config) ->
|
||||
?incomplete(comment, <<?star, ?space, ?star>>, Handler, Resume, Stack, Config);
|
||||
?incomplete(comment, <<?star, ?star>>, Handler, Resume, Stack, Config);
|
||||
end_multi_comment(Bin, Handler, Stack, Config) ->
|
||||
?error(Bin, Handler, Stack, Config).
|
||||
?error(comment, <<?star, ?star, Bin/binary>>, Handler, Stack, Config).
|
||||
|
||||
|
||||
end_comment(Rest, Handler, [Resume|Stack], Config) ->
|
||||
|
@ -912,7 +917,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(maybe_done, Bin, Handler, Stack, Config).
|
||||
|
||||
|
||||
done(<<S, Rest/binary>>, Handler, [], Config) when ?is_whitespace(S) ->
|
||||
|
@ -926,7 +931,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(done, Bin, Handler, Stack, Config).
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue