From 30e6745f53ab89f42466829cd554fc02071c1c69 Mon Sep 17 00:00:00 2001 From: alisdair sullivan Date: Tue, 25 Oct 2011 20:52:39 -0700 Subject: [PATCH] decoder returns values in favor of incomplete when possible, use opt 'explicit_end' to revert to prior behaviour --- src/jsx_decoder.erl | 8 ++++++++ src/jsx_format.erl | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/jsx_decoder.erl b/src/jsx_decoder.erl index aaa84db..3a47205 100644 --- a/src/jsx_decoder.erl +++ b/src/jsx_decoder.erl @@ -477,6 +477,8 @@ zero(<>, Out, [Acc|Stack], Opts) -> initial_decimal(Rest, Out, [{Acc, []}|Stack], Opts); zero(<>, Out, [Acc|Stack], Opts) when ?is_whitespace(S) -> ?event([format_number(Acc)], maybe_done, Rest, Out, Stack, Opts); +zero(<<>>, Out, [Acc|Stack], Opts = #opts{explicit_end=false}) -> + ?event([format_number(Acc)], maybe_done, <<>>, Out, Stack, Opts); zero(<<>>, Out, Stack, Opts) -> ?incomplete(zero, <<>>, Out, Stack, Opts); zero(Bin, Out, Stack, Opts) -> @@ -501,6 +503,8 @@ integer(<>, Out, [Acc|Stack], Opts) when S =:= $e; S =:= $E -> e(Rest, Out, [{Acc, [], []}|Stack], Opts); integer(<>, Out, [Acc|Stack], Opts) when ?is_whitespace(S) -> ?event([format_number(Acc)], maybe_done, Rest, Out, Stack, Opts); +integer(<<>>, Out, [Acc|Stack], Opts = #opts{explicit_end=false}) -> + ?event([format_number(Acc)], maybe_done, <<>>, Out, Stack, Opts); integer(<<>>, Out, Stack, Opts) -> ?incomplete(integer, <<>>, Out, Stack, Opts); integer(Bin, Out, Stack, Opts) -> @@ -532,6 +536,8 @@ decimal(<>, Out, [{Int, Frac}|Stack], Opts) e(Rest, Out, [{Int, Frac, []}|Stack], Opts); decimal(<>, Out, [Acc|Stack], Opts) when ?is_whitespace(S) -> ?event([format_number(Acc)], maybe_done, Rest, Out, Stack, Opts); +decimal(<<>>, Out, [Acc|Stack], Opts = #opts{explicit_end=false}) -> + ?event([format_number(Acc)], maybe_done, <<>>, Out, Stack, Opts); decimal(<<>>, Out, Stack, Opts) -> ?incomplete(decimal, <<>>, Out, Stack, Opts); decimal(Bin, Out, Stack, Opts) -> @@ -572,6 +578,8 @@ exp(<>, Out, [Acc, array|Stack], Opts) -> ?event([format_number(Acc)], value, Rest, Out, [array|Stack], Opts); exp(<>, Out, [Acc|Stack], Opts) when ?is_whitespace(S) -> ?event([format_number(Acc)], maybe_done, Rest, Out, Stack, Opts); +exp(<<>>, Out, [Acc|Stack], Opts = #opts{explicit_end=false}) -> + ?event([format_number(Acc)], maybe_done, <<>>, Out, Stack, Opts); exp(<<>>, Out, Stack, Opts) -> ?incomplete(exp, <<>>, Out, Stack, Opts); exp(Bin, Out, Stack, Opts) -> diff --git a/src/jsx_format.erl b/src/jsx_format.erl index e9d44ca..d3860be 100644 --- a/src/jsx_format.erl +++ b/src/jsx_format.erl @@ -155,8 +155,8 @@ basic_test_() -> [ {"empty object", ?_assert(format(<<"{}">>, []) =:= <<"{}">>)}, {"empty array", ?_assert(format(<<"[]">>, []) =:= <<"[]">>)}, - {"naked integer", ?_assert(format([{integer, 123}], []) =:= <<"123">>)}, - {"naked float", ?_assert(format([{float, 1.23}], []) =:= <<"1.23">>)}, + {"naked integer", ?_assert(format(<<"123">>, []) =:= <<"123">>)}, + {"naked float", ?_assert(format(<<"1.23">>, []) =:= <<"1.23">>)}, {"naked string", ?_assert(format(<<"\"hi\"">>, []) =:= <<"\"hi\"">>)}, {"naked literal", ?_assert(format(<<"true">>, []) =:= <<"true">>)}, {"simple object",