From 60943446c047a6106051af50aa7cc8b4cebb3163 Mon Sep 17 00:00:00 2001 From: alisdair sullivan Date: Thu, 27 May 2010 16:15:45 -0700 Subject: [PATCH] now ethically opposed to special casing forced termination. users can just append whitespace --- src/jsx_decoder.erl | 22 ++++++---------------- test/jsx_test.erl | 12 +++--------- 2 files changed, 9 insertions(+), 25 deletions(-) diff --git a/src/jsx_decoder.erl b/src/jsx_decoder.erl index e4e8562..a2e30e1 100644 --- a/src/jsx_decoder.erl +++ b/src/jsx_decoder.erl @@ -59,10 +59,6 @@ start(<>, Stack, Callbacks, Opts) when ?is_nonzero(S) -> integer(Rest, Stack, Callbacks, Opts, [S]); start(<>, Stack, Callbacks, ?comments_true(Opts)) -> maybe_comment(Rest, fun(Resume) -> start(Resume, Stack, Callbacks, Opts) end); -start(<<>>, [], Callbacks, Opts) -> - fun(<<>>) -> {fold(completed_parse, Callbacks), <<>>} - ; (Stream) -> start(Stream, [], Callbacks, Opts) - end; start(<<>>, Stack, Callbacks, Opts) -> fun(Stream) -> start(Stream, Stack, Callbacks, Opts) end. @@ -278,9 +274,7 @@ zero(<>, Stack, Callbacks, Opts, Acc) when ?is_whitespace(S) -> zero(<>, Stack, Callbacks, ?comments_true(Opts), Acc) -> maybe_comment(Rest, fun(Resume) -> zero(Resume, Stack, Callbacks, Opts, Acc) end); zero(<<>>, Stack, Callbacks, Opts, Acc) -> - fun(<<>>) -> maybe_done(<<>>, Stack, fold({number, lists:reverse(Acc)}, Callbacks), Opts) - ; (Stream) -> zero(Stream, Stack, Callbacks, Opts, Acc) - end. + fun(Stream) -> zero(Stream, Stack, Callbacks, Opts, Acc) end. integer(<>, Stack, Callbacks, Opts, Acc) when ?is_nonzero(S) -> @@ -306,9 +300,7 @@ integer(<>, Stack, Callbacks, Opts, Acc) when ?is_whitespace(S) integer(<>, Stack, Callbacks, ?comments_true(Opts), Acc) -> maybe_comment(Rest, fun(Resume) -> integer(Resume, Stack, Callbacks, Opts, Acc) end); integer(<<>>, Stack, Callbacks, Opts, Acc) -> - fun(<<>>) -> maybe_done(<<>>, Stack, fold({number, lists:reverse(Acc)}, Callbacks), Opts) - ; (Stream) -> integer(Stream, Stack, Callbacks, Opts, Acc) - end. + fun(Stream) -> integer(Stream, Stack, Callbacks, Opts, Acc) end. fraction(<>, Stack, Callbacks, Opts, Acc) when ?is_nonzero(S) -> fraction(Rest, Stack, Callbacks, Opts, [S] ++ Acc); @@ -331,9 +323,7 @@ fraction(<>, Stack, Callbacks, Opts, Acc) when ?is_whitespace(S) fraction(<>, Stack, Callbacks, ?comments_true(Opts), Acc) -> maybe_comment(Rest, fun(Resume) -> fraction(Resume, Stack, Callbacks, Opts, Acc) end); fraction(<<>>, Stack, Callbacks, Opts, Acc) -> - fun(<<>>) -> maybe_done(<<>>, Stack, fold({number, lists:reverse(Acc)}, Callbacks), Opts) - ; (Stream) -> fraction(Stream, Stack, Callbacks, Opts, Acc) - end. + fun(Stream) -> fraction(Stream, Stack, Callbacks, Opts, Acc) end. e(<>, Stack, Callbacks, Opts, Acc) when S =:= ?zero; ?is_nonzero(S) -> @@ -367,9 +357,7 @@ exp(<>, Stack, Callbacks, ?comments_true(Opts), Acc) -> exp(<>, Stack, Callbacks, Opts, Acc) when ?is_whitespace(S) -> maybe_done(Rest, Stack, fold({number, lists:reverse(Acc)}, Callbacks), Opts); exp(<<>>, Stack, Callbacks, Opts, Acc) -> - fun(<<>>) -> maybe_done(<<>>, Stack, fold({number, lists:reverse(Acc)}, Callbacks), Opts) - ; (Stream) -> exp(Stream, Stack, Callbacks, Opts, Acc) - end. + fun(Stream) -> exp(Stream, Stack, Callbacks, Opts, Acc) end. tr(<<$r, Rest/binary>>, Stack, Callbacks, Opts) -> @@ -465,6 +453,8 @@ fold(completed_parse, {F, State}) -> F(completed_parse, State); fold(Event, {F, State}) when is_function(F) -> {F, F(Event, State)}. + + diff --git a/test/jsx_test.erl b/test/jsx_test.erl index a1b7b91..3b1b0bf 100644 --- a/test/jsx_test.erl +++ b/test/jsx_test.erl @@ -61,13 +61,8 @@ test_body(TestSpec, Dir) -> end. incremental_decode(F, <<>>) -> - case F(<<>>) of - G when is_function(G) -> - {Result, <<>>} = G(<<>>), - Result - ; {Result, Rest} -> - Result - end; + {Result, Rest} = F(<<" "/utf8>>), + Result; incremental_decode(F, <>) -> case F(<>) of G when is_function(G) -> @@ -79,10 +74,9 @@ incremental_decode(F, <>) -> decode(F, JSON) -> case F(JSON) of G when is_function(G) -> - {Result, <<>>} = G(<<>>), + {Result, <<>>} = G(<<" "/utf8>>), Result ; {Result, Rest} -> - {_, <<>>} = (F(Rest))(<<>>), Result end. \ No newline at end of file