breakout initialdecimal state to improve binary matching
This commit is contained in:
parent
30108f5872
commit
8cf3a9d144
1 changed files with 10 additions and 6 deletions
|
@ -762,21 +762,25 @@ zero(Bin, Handler, Acc, Stack, Config) ->
|
||||||
integer(<<S, Rest/binary>>, Handler, Acc, Stack, Config) when S =:= ?zero; ?is_nonzero(S) ->
|
integer(<<S, Rest/binary>>, Handler, Acc, Stack, Config) when S =:= ?zero; ?is_nonzero(S) ->
|
||||||
integer(Rest, Handler, acc_seq(Acc, S), Stack, Config);
|
integer(Rest, Handler, acc_seq(Acc, S), Stack, Config);
|
||||||
integer(<<?decimalpoint, Rest/binary>>, Handler, Acc, Stack, Config) ->
|
integer(<<?decimalpoint, Rest/binary>>, Handler, Acc, Stack, Config) ->
|
||||||
decimal(Rest, Handler, acc_seq(Acc, ?decimalpoint), Stack, Config);
|
initialdecimal(Rest, Handler, acc_seq(Acc, ?decimalpoint), Stack, Config);
|
||||||
integer(<<S, Rest/binary>>, Handler, Acc, Stack, Config) when S =:= $e; S =:= $E ->
|
integer(<<S, Rest/binary>>, Handler, Acc, Stack, Config) when S =:= $e; S =:= $E ->
|
||||||
e(Rest, Handler, acc_seq(Acc, ".0e"), Stack, Config);
|
e(Rest, Handler, acc_seq(Acc, ".0e"), Stack, Config);
|
||||||
integer(Bin, Handler, Acc, Stack, Config) ->
|
integer(Bin, Handler, Acc, Stack, Config) ->
|
||||||
finish_number(Bin, Handler, {integer, Acc}, Stack, Config).
|
finish_number(Bin, Handler, {integer, Acc}, Stack, Config).
|
||||||
|
|
||||||
|
|
||||||
|
initialdecimal(<<S, Rest/binary>>, Handler, Acc, Stack, Config) when S =:= ?zero; ?is_nonzero(S) ->
|
||||||
|
decimal(Rest, Handler, acc_seq(Acc, S), Stack, Config);
|
||||||
|
initialdecimal(<<>>, Handler, [?decimalpoint|Acc], Stack, Config) ->
|
||||||
|
incomplete(integer, <<?decimalpoint>>, Handler, Acc, Stack, Config);
|
||||||
|
initialdecimal(Bin, Handler, Acc, Stack, Config) ->
|
||||||
|
?error(decimal, Bin, Handler, Acc, Stack, Config).
|
||||||
|
|
||||||
|
|
||||||
decimal(<<S, Rest/binary>>, Handler, Acc, Stack, Config) when S =:= ?zero; ?is_nonzero(S) ->
|
decimal(<<S, Rest/binary>>, Handler, Acc, Stack, Config) when S =:= ?zero; ?is_nonzero(S) ->
|
||||||
decimal(Rest, Handler, acc_seq(Acc, S), Stack, Config);
|
decimal(Rest, Handler, acc_seq(Acc, S), Stack, Config);
|
||||||
%% guard against the insidious `1.e1` error
|
|
||||||
decimal(<<S, Rest/binary>>, Handler, Acc, Stack, Config) when S =:= $e; S =:= $E ->
|
decimal(<<S, Rest/binary>>, Handler, Acc, Stack, Config) when S =:= $e; S =:= $E ->
|
||||||
case Acc of
|
e(Rest, Handler, acc_seq(Acc, $e), 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) ->
|
decimal(Bin, Handler, Acc, Stack, Config) ->
|
||||||
finish_number(Bin, Handler, {decimal, Acc}, Stack, Config).
|
finish_number(Bin, Handler, {decimal, Acc}, Stack, Config).
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue