rename explicit_end to stream in prep for behavior change

This commit is contained in:
alisdair sullivan 2013-07-10 05:41:19 +00:00
parent d77f23ec9a
commit 6797bf3ed7
5 changed files with 27 additions and 27 deletions

View file

@ -231,7 +231,7 @@ consider the parsing complete if input is exhausted and the json text is not
unambiguously incomplete. this is mostly relevant when parsing bare numbers like unambiguously incomplete. this is mostly relevant when parsing bare numbers like
`<<"1234">>`. this could be a complete json integer or just the beginning of a `<<"1234">>`. this could be a complete json integer or just the beginning of a
json integer that is being parsed incrementally. jsx will treat it as a whole json integer that is being parsed incrementally. jsx will treat it as a whole
integer. calling jsx with the [option](#options) `explicit_end` reverses this integer. calling jsx with the [option](#options) `stream` reverses this
behavior and never considers parsing complete until the `incomplete` function is behavior and never considers parsing complete until the `incomplete` function is
called with the argument `end_stream` called with the argument `end_stream`
@ -308,7 +308,7 @@ option() = replaced_bad_utf8
| dirty_strings | dirty_strings
| ignored_bad_escapes | ignored_bad_escapes
| relax | relax
| explicit_end | stream
``` ```
jsx functions all take a common set of options. not all flags have meaning jsx functions all take a common set of options. not all flags have meaning
@ -384,7 +384,7 @@ additional options beyond these. see
string term. note that this overrides `ignored_bad_escapes`, string term. note that this overrides `ignored_bad_escapes`,
`unescaped_jsonp` and `escaped_strings` `unescaped_jsonp` and `escaped_strings`
- `explicit_end` - `stream`
see [incomplete input](#incomplete-input) see [incomplete input](#incomplete-input)

View file

@ -44,8 +44,8 @@ parse_config([replaced_bad_utf8|Rest], Config) ->
parse_config(Rest, Config#config{replaced_bad_utf8=true}); parse_config(Rest, Config#config{replaced_bad_utf8=true});
parse_config([escaped_forward_slashes|Rest], Config) -> parse_config([escaped_forward_slashes|Rest], Config) ->
parse_config(Rest, Config#config{escaped_forward_slashes=true}); parse_config(Rest, Config#config{escaped_forward_slashes=true});
parse_config([explicit_end|Rest], Config) -> parse_config([stream|Rest], Config) ->
parse_config(Rest, Config#config{explicit_end=true}); parse_config(Rest, Config#config{stream=true});
parse_config([single_quoted_strings|Rest], Config) -> parse_config([single_quoted_strings|Rest], Config) ->
parse_config(Rest, Config#config{single_quoted_strings=true}); parse_config(Rest, Config#config{single_quoted_strings=true});
parse_config([unescaped_jsonp|Rest], Config) -> parse_config([unescaped_jsonp|Rest], Config) ->
@ -115,7 +115,7 @@ valid_flags() ->
escaped_strings, escaped_strings,
dirty_strings, dirty_strings,
ignored_bad_escapes, ignored_bad_escapes,
explicit_end, stream,
relax, relax,
error_handler, error_handler,
incomplete_handler, incomplete_handler,
@ -157,7 +157,7 @@ config_test_() ->
#config{ #config{
replaced_bad_utf8=true, replaced_bad_utf8=true,
escaped_forward_slashes=true, escaped_forward_slashes=true,
explicit_end=true, stream=true,
single_quoted_strings=true, single_quoted_strings=true,
unescaped_jsonp=true, unescaped_jsonp=true,
comments=true, comments=true,
@ -167,7 +167,7 @@ config_test_() ->
parse_config([ parse_config([
replaced_bad_utf8, replaced_bad_utf8,
escaped_forward_slashes, escaped_forward_slashes,
explicit_end, stream,
single_quoted_strings, single_quoted_strings,
unescaped_jsonp, unescaped_jsonp,
comments, comments,
@ -246,13 +246,13 @@ config_to_list_test_() ->
comments, comments,
dirty_strings, dirty_strings,
ignored_bad_escapes, ignored_bad_escapes,
explicit_end stream
], ],
config_to_list( config_to_list(
#config{ #config{
replaced_bad_utf8=true, replaced_bad_utf8=true,
escaped_forward_slashes=true, escaped_forward_slashes=true,
explicit_end=true, stream=true,
single_quoted_strings=true, single_quoted_strings=true,
unescaped_jsonp=true, unescaped_jsonp=true,
comments=true, comments=true,

View file

@ -7,7 +7,7 @@
escaped_strings = false, escaped_strings = false,
dirty_strings = false, dirty_strings = false,
ignored_bad_escapes = false, ignored_bad_escapes = false,
explicit_end = false, stream = false,
error_handler = false, error_handler = false,
incomplete_handler = false incomplete_handler = false
}). }).

View file

@ -145,7 +145,7 @@ incomplete(State, Rest, Handler, Acc, Stack, Config=#config{incomplete_handler=f
{incomplete, fun(Stream) when is_binary(Stream) -> {incomplete, fun(Stream) when is_binary(Stream) ->
resume(<<Rest/binary, Stream/binary>>, State, Handler, Acc, Stack, Config); resume(<<Rest/binary, Stream/binary>>, State, Handler, Acc, Stack, Config);
(end_stream) -> (end_stream) ->
case resume(<<Rest/binary, ?space/utf8>>, State, Handler, Acc, Stack, Config#config{explicit_end=false}) of case resume(<<Rest/binary, ?space/utf8>>, State, Handler, Acc, Stack, Config#config{stream=false}) of
{incomplete, _} -> ?error(State, Rest, Handler, Acc, Stack, Config); {incomplete, _} -> ?error(State, Rest, Handler, Acc, Stack, Config);
Else -> Else Else -> Else
end end
@ -748,7 +748,7 @@ zero(<<?decimalpoint, Rest/binary>>, Handler, Acc, Stack, Config) ->
decimal(Rest, Handler, acc_seq(Acc, ?decimalpoint), Stack, Config); decimal(Rest, Handler, acc_seq(Acc, ?decimalpoint), Stack, Config);
zero(<<S, Rest/binary>>, Handler, Acc, Stack, Config) when S =:= $e; S =:= $E -> zero(<<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);
zero(<<>>, Handler, Acc, [], Config=#config{explicit_end=false}) -> zero(<<>>, Handler, Acc, [], Config=#config{stream=false}) ->
finish_number(<<>>, Handler, {zero, Acc}, [], Config); finish_number(<<>>, Handler, {zero, Acc}, [], Config);
zero(<<>>, Handler, Acc, Stack, Config) -> zero(<<>>, Handler, Acc, Stack, Config) ->
incomplete(value, (end_seq(Acc)), Handler, Stack, Config); incomplete(value, (end_seq(Acc)), Handler, Stack, Config);
@ -806,7 +806,7 @@ exp(Bin, Handler, Acc, Stack, Config) ->
finish_number(Bin, Handler, {exp, Acc}, Stack, Config). finish_number(Bin, Handler, {exp, Acc}, Stack, Config).
finish_number(Rest, Handler, Acc, [], Config=#config{explicit_end=false}) -> finish_number(Rest, Handler, Acc, [], Config=#config{stream=false}) ->
maybe_done(Rest, handle_event(format_number(Acc), Handler, Config), [], Config); maybe_done(Rest, handle_event(format_number(Acc), Handler, Config), [], Config);
finish_number(<<?end_object, Rest/binary>>, Handler, Acc, [object|Stack], Config) -> finish_number(<<?end_object, Rest/binary>>, Handler, Acc, [object|Stack], Config) ->
maybe_done(Rest, handle_event([format_number(Acc), end_object], Handler, Config), Stack, Config); maybe_done(Rest, handle_event([format_number(Acc), end_object], Handler, Config), Stack, Config);
@ -901,7 +901,7 @@ comment(<<_/utf8, Rest/binary>>, Handler, Resume, Stack, Config) ->
comment(Rest, Handler, Resume, Stack, Config); comment(Rest, Handler, Resume, Stack, Config);
comment(<<_, Rest/binary>>, Handler, Resume, Stack, Config=#config{replaced_bad_utf8=true}) -> comment(<<_, Rest/binary>>, Handler, Resume, Stack, Config=#config{replaced_bad_utf8=true}) ->
comment(Rest, Handler, Resume, Stack, Config); comment(Rest, Handler, Resume, Stack, Config);
comment(<<>>, Handler, done, [Comment], Config=#config{explicit_end=false}) comment(<<>>, Handler, done, [Comment], Config=#config{stream=false})
when Comment == comment; Comment == multicomment -> when Comment == comment; Comment == multicomment ->
resume(<<>>, done, Handler, unused, [], Config); resume(<<>>, done, Handler, unused, [], Config);
comment(<<>>, Handler, Resume, Stack, Config) -> comment(<<>>, Handler, Resume, Stack, Config) ->
@ -942,7 +942,7 @@ done(<<?solidus, ?star, Rest/binary>>, Handler, Stack, Config=#config{comments=t
comment(Rest, Handler, done, [multicomment|Stack], Config); comment(Rest, Handler, done, [multicomment|Stack], Config);
done(<<?solidus>>, Handler, Stack, Config=#config{comments=true}) -> done(<<?solidus>>, Handler, Stack, Config=#config{comments=true}) ->
incomplete(done, <<?solidus>>, Handler, Stack, Config); incomplete(done, <<?solidus>>, Handler, Stack, Config);
done(<<>>, {Handler, State}, [], Config=#config{explicit_end=true}) -> done(<<>>, {Handler, State}, [], Config=#config{stream=true}) ->
incomplete(done, <<>>, {Handler, State}, [], Config); incomplete(done, <<>>, {Handler, State}, [], Config);
done(<<>>, {_Handler, State}, [], _Config) -> State; done(<<>>, {_Handler, State}, [], _Config) -> State;
done(Bin, Handler, Stack, Config) -> ?error(done, Bin, Handler, Stack, Config). done(Bin, Handler, Stack, Config) -> ?error(done, Bin, Handler, Stack, Config).
@ -968,7 +968,7 @@ decode(JSON, Config) ->
Incremental = try Incremental = try
Final = lists:foldl( Final = lists:foldl(
fun(Byte, Decoder) -> {incomplete, F} = Decoder(Byte), F end, fun(Byte, Decoder) -> {incomplete, F} = Decoder(Byte), F end,
decoder(jsx, [], [explicit_end] ++ Config), decoder(jsx, [], [stream] ++ Config),
json_to_bytes(JSON) json_to_bytes(JSON)
), ),
Final(end_stream) Final(end_stream)
@ -1931,19 +1931,19 @@ error_test_() ->
)}, )},
{"zero error", ?_assertError( {"zero error", ?_assertError(
badarg, badarg,
Decode(<<"0"/utf8, 0>>, [explicit_end]) Decode(<<"0"/utf8, 0>>, [stream])
)}, )},
{"integer error", ?_assertError( {"integer error", ?_assertError(
badarg, badarg,
Decode(<<"1"/utf8, 0>>, [explicit_end]) Decode(<<"1"/utf8, 0>>, [stream])
)}, )},
{"decimal error", ?_assertError( {"decimal error", ?_assertError(
badarg, badarg,
Decode(<<"1.0"/utf8, 0>>, [explicit_end]) Decode(<<"1.0"/utf8, 0>>, [stream])
)}, )},
{"exp error", ?_assertError( {"exp error", ?_assertError(
badarg, badarg,
Decode(<<"1.0e1"/utf8, 0>>, [explicit_end]) Decode(<<"1.0e1"/utf8, 0>>, [stream])
)}, )},
{"e error", ?_assertError( {"e error", ?_assertError(
badarg, badarg,
@ -2026,19 +2026,19 @@ custom_error_handler_test_() ->
)}, )},
{"zero error", ?_assertEqual( {"zero error", ?_assertEqual(
{value, <<"0"/utf8, 0>>}, {value, <<"0"/utf8, 0>>},
Decode(<<"0"/utf8, 0>>, [explicit_end, {error_handler, Error}]) Decode(<<"0"/utf8, 0>>, [stream, {error_handler, Error}])
)}, )},
{"integer error", ?_assertEqual( {"integer error", ?_assertEqual(
{integer, <<0>>}, {integer, <<0>>},
Decode(<<"1"/utf8, 0>>, [explicit_end, {error_handler, Error}]) Decode(<<"1"/utf8, 0>>, [stream, {error_handler, Error}])
)}, )},
{"decimal error", ?_assertEqual( {"decimal error", ?_assertEqual(
{decimal, <<0>>}, {decimal, <<0>>},
Decode(<<"1.0"/utf8, 0>>, [explicit_end, {error_handler, Error}]) Decode(<<"1.0"/utf8, 0>>, [stream, {error_handler, Error}])
)}, )},
{"exp error", ?_assertEqual( {"exp error", ?_assertEqual(
{exp, <<0>>}, {exp, <<0>>},
Decode(<<"1.0e1"/utf8, 0>>, [explicit_end, {error_handler, Error}]) Decode(<<"1.0e1"/utf8, 0>>, [stream, {error_handler, Error}])
)}, )},
{"e error", ?_assertEqual( {"e error", ?_assertEqual(
{decimal, <<$e, 0>>}, {decimal, <<$e, 0>>},

View file

@ -169,7 +169,7 @@ maybe_done(BadTokens, Handler, Stack, Config) when is_list(BadTokens) ->
maybe_done(Token, Handler, Stack, Config) -> maybe_done(Token, Handler, Stack, Config) ->
maybe_done([Token], Handler, Stack, Config). maybe_done([Token], Handler, Stack, Config).
done([], Handler, [], Config=#config{explicit_end=true}) -> done([], Handler, [], Config=#config{stream=true}) ->
incomplete(done, Handler, [], Config); incomplete(done, Handler, [], Config);
done(Tokens, Handler, [], Config) when Tokens == [end_json]; Tokens == [] -> done(Tokens, Handler, [], Config) when Tokens == [end_json]; Tokens == [] ->
{_, State} = handle_event(end_json, Handler, Config), {_, State} = handle_event(end_json, Handler, Config),
@ -617,7 +617,7 @@ parse(Events, Config) ->
Incremental = try Incremental = try
Final = lists:foldl( Final = lists:foldl(
fun(Event, Parser) -> {incomplete, F} = Parser(Event), F end, fun(Event, Parser) -> {incomplete, F} = Parser(Event), F end,
parser(jsx, [], [explicit_end] ++ Config), parser(jsx, [], [stream] ++ Config),
lists:map(fun(X) -> [X] end, Events) lists:map(fun(X) -> [X] end, Events)
), ),
Final(end_stream) Final(end_stream)