revert change from strings/keys being presented as binaries to being presented as lists of characters. ~30% speedup

This commit is contained in:
alisdair sullivan 2011-07-31 19:05:30 -07:00
parent 20f9e0368d
commit b3eb058463
23 changed files with 57 additions and 57 deletions

View file

@ -282,10 +282,10 @@ multi_test_result() ->
[{literal, false}], [{literal, false}],
[{literal, null}], [{literal, null}],
[start_object, end_object], [start_object, end_object],
[start_object, {key, <<"key">>}, {string, <<"value">>}, end_object], [start_object, {key, "key"}, {string, "value"}, end_object],
[start_array, end_array], [start_array, end_array],
[start_array, {integer, 1}, {integer, 2}, {integer, 3}, end_array], [start_array, {integer, 1}, {integer, 2}, {integer, 3}, end_array],
[{string, <<"hope this works">>}] [{string, "hope this works"}]
]. ].

View file

@ -50,8 +50,8 @@
| start_array | start_array
| end_array | end_array
| end_json | end_json
| {key, binary()} | {key, list()}
| {string, binary()} | {string, list()}
| {integer, integer()} | {integer, integer()}
| {float, float()} | {float, float()}
| {literal, true} | {literal, true}

View file

@ -357,11 +357,11 @@ key(Bin, Stack, Opts) ->
string(Bin, Stack, Opts) -> string(Bin, Stack, Opts, []). string(Bin, Stack, Opts) -> string(Bin, Stack, Opts, []).
string(<<?quote/?utfx, Rest/binary>>, [key|_] = Stack, Opts, Acc) -> string(<<?quote/?utfx, Rest/binary>>, [key|_] = Stack, Opts, Acc) ->
{jsx, {key, unicode:characters_to_binary(lists:reverse(Acc))}, fun() -> {jsx, {key, lists:reverse(Acc)}, fun() ->
colon(Rest, Stack, Opts) colon(Rest, Stack, Opts)
end}; end};
string(<<?quote/?utfx, Rest/binary>>, Stack, Opts, Acc) -> string(<<?quote/?utfx, Rest/binary>>, Stack, Opts, Acc) ->
{jsx, {string, unicode:characters_to_binary(lists:reverse(Acc))}, fun() -> {jsx, {string, lists:reverse(Acc)}, fun() ->
maybe_done(Rest, Stack, Opts) maybe_done(Rest, Stack, Opts)
end}; end};
string(<<?rsolidus/?utfx, Rest/binary>>, Stack, Opts, Acc) -> string(<<?rsolidus/?utfx, Rest/binary>>, Stack, Opts, Acc) ->
@ -1228,7 +1228,7 @@ check_bad(List) ->
). ).
check_replaced(List) -> check_replaced(List) ->
lists:dropwhile(fun({_, [{string, <<16#fffd/utf8>>}|_]}) -> lists:dropwhile(fun({_, [{string, [16#fffd]}|_]}) ->
true true
; (_) -> ; (_) ->
false false

View file

@ -163,8 +163,8 @@ collect(_, _, _) -> erlang:error(badarg).
%% helper functions for converting jsx events to term format %% helper functions for converting jsx events to term format
event({string, String}, _Opts) -> String; event({string, String}, _Opts) -> unicode:characters_to_binary(String);
event({key, Key}, _Opts) -> Key; event({key, Key}, _Opts) -> unicode:characters_to_binary(Key);
event({integer, Integer}, _Opts) -> Integer; event({integer, Integer}, _Opts) -> Integer;
event({float, Float}, _Opts) -> Float; event({float, Float}, _Opts) -> Float;
event({literal, Literal}, _Opts) -> Literal. event({literal, Literal}, _Opts) -> Literal.

View file

@ -1,8 +1,8 @@
{name, "array"}. {name, "array"}.
{jsx, [start_array, {jsx, [start_array,
{string,<<"foo">>}, {string,"foo"},
{string,<<"bar">>}, {string,"bar"},
{string,<<"baz">>}, {string,"baz"},
start_array, start_array,
{literal,true}, {literal,true},
end_array,start_array, end_array,start_array,
@ -15,14 +15,14 @@
{literal,null}, {literal,null},
{float,0.7}, {float,0.7},
start_object, start_object,
{key,<<"key">>}, {key,"key"},
{string,<<"value">>}, {string,"value"},
end_object,start_array,start_object,end_object, end_object,start_array,start_object,end_object,
{literal,null}, {literal,null},
{literal,null}, {literal,null},
{literal,null}, {literal,null},
start_array,end_array,end_array, start_array,end_array,end_array,
{string,<<"\n\r\\">>}, {string,"\n\r\\"},
start_array, start_array,
{integer,-1}, {integer,-1},
end_array,end_array,end_json]}. end_array,end_array,end_json]}.

View file

@ -1,3 +1,3 @@
{name, "encoded_surrogates"}. {name, "encoded_surrogates"}.
{jsx, [start_array,{string,<<66560/utf8>>},end_array,end_json]}. {jsx, [start_array,{string,66560]},end_array,end_json]}.
{json, "encoded_surrogates.json"}. {json, "encoded_surrogates.json"}.

View file

@ -1,4 +1,4 @@
{name, "escaped noncharacter (extended)"}. {name, "escaped noncharacter (extended)"}.
{jsx, [{string, <<16#fffd/utf8>>}, end_json]}. {jsx, [{string, [16#fffd]}, end_json]}.
{json, "escaped_noncharacter_ext.json"}. {json, "escaped_noncharacter_ext.json"}.
{jsx_flags, [loose_unicode]}. {jsx_flags, [loose_unicode]}.

View file

@ -1,4 +1,4 @@
{name, "escaped noncharacter replacement"}. {name, "escaped noncharacter replacement"}.
{jsx, [{string,<<16#fffd/utf8>>},end_json]}. {jsx, [{string,[16#fffd]},end_json]}.
{json, "escaped_noncharacter_replaced.json"}. {json, "escaped_noncharacter_replaced.json"}.
{jsx_flags, [loose_unicode]}. {jsx_flags, [loose_unicode]}.

View file

@ -1,4 +1,4 @@
{name, "escaped nullbyte replaced"}. {name, "escaped nullbyte replaced"}.
{jsx, [{string,<<16#fffd/utf8>>},end_json]}. {jsx, [{string,[16#fffd]},end_json]}.
{json, "escaped_nullbyte_replaced.json"}. {json, "escaped_nullbyte_replaced.json"}.
{jsx_flags, [loose_unicode]}. {jsx_flags, [loose_unicode]}.

View file

@ -4,9 +4,9 @@
end_array, end_array,
{float,2.0e7}, {float,2.0e7},
start_object, start_object,
{key,<<"key">>}, {key,"key"},
{float,2.0e7}, {float,2.0e7},
{key,<<"another key">>}, {key,"another key"},
{float,2.0e7}, {float,2.0e7},
end_object, end_object,
{float,4.2e70}, {float,4.2e70},

View file

@ -4,14 +4,14 @@
end_array, end_array,
{float,2.0}, {float,2.0},
start_object, start_object,
{key,<<"key">>}, {key,"key"},
{float,2.0e7}, {float,2.0e7},
{key,<<"another key">>}, {key,"another key"},
{float,2.0e7}, {float,2.0e7},
end_object,start_object, end_object,start_object,
{key,<<"key">>}, {key,"key"},
{float,2.0}, {float,2.0},
{key,<<"another key">>}, {key,"another key"},
{float,2.0}, {float,2.0},
end_object, end_object,
{float,4.321}, {float,4.321},

View file

@ -4,9 +4,9 @@
end_array, end_array,
{integer,20}, {integer,20},
start_object, start_object,
{key,<<"key">>}, {key,"key"},
{integer,20}, {integer,20},
{key,<<"another key">>}, {key,"another key"},
{integer,20}, {integer,20},
end_object, end_object,
{integer,42}, {integer,42},

View file

@ -1,3 +1,3 @@
{name, "multibyte_utf"}. {name, "multibyte_utf"}.
{jsx, [start_array,{string,<<32,119070/utf8,32>>},end_array,end_json]}. {jsx, [start_array,{string,[32,119070,32]},end_array,end_json]}.
{json, "multibyte_utf.json"}. {json, "multibyte_utf.json"}.

View file

@ -1,3 +1,3 @@
{name, "naked_string"}. {name, "naked_string"}.
{jsx, [{string,<<"this is a naked string">>},end_json]}. {jsx, [{string,"this is a naked string"},end_json]}.
{json, "naked_string.json"}. {json, "naked_string.json"}.

View file

@ -4,9 +4,9 @@
end_array, end_array,
{integer,0}, {integer,0},
start_object, start_object,
{key,<<"key">>}, {key,"key"},
{integer,0}, {integer,0},
{key,<<"another key">>}, {key,"another key"},
{integer,0}, {integer,0},
end_object, end_object,
{integer,0}, {integer,0},

View file

@ -1,4 +1,4 @@
{name, "noncharacter replaced"}. {name, "noncharacter replaced"}.
{jsx, [{string,<<16#fffd/utf8>>},end_json]}. {jsx, [{string,[16#fffd/utf8]},end_json]}.
{json, "noncharacter_replaced.json"}. {json, "noncharacter_replaced.json"}.
{jsx_flags, [loose_unicode]}. {jsx_flags, [loose_unicode]}.

View file

@ -1,4 +1,4 @@
{name, "nullbyte replaced"}. {name, "nullbyte replaced"}.
{jsx, [{string,<<16#fffd/utf8>>},end_json]}. {jsx, [{string,[16#fffd]},end_json]}.
{json, "nullbyte_replaced.json"}. {json, "nullbyte_replaced.json"}.
{jsx_flags, [loose_unicode]}. {jsx_flags, [loose_unicode]}.

View file

@ -1,22 +1,22 @@
{name, "object"}. {name, "object"}.
{jsx, [start_object, {jsx, [start_object,
{key,<<"foo">>}, {key,"foo"},
{string,<<"bar">>}, {string,"bar"},
{key,<<"baz">>}, {key,"baz"},
{literal,true}, {literal,true},
{key,<<"false">>}, {key,"false"},
{literal,null}, {literal,null},
{key,<<"object">>}, {key,"object"},
start_object, start_object,
{key,<<"key">>}, {key,"key"},
{string,<<"value">>}, {string,"value"},
end_object, end_object,
{key,<<"list">>}, {key,"list"},
start_array, start_array,
{literal,null}, {literal,null},
{literal,null}, {literal,null},
{literal,null}, {literal,null},
start_array,end_array, start_array,end_array,
{string,<<"\n\r\\">>}, {string,"\n\r\\"},
end_array,end_object,end_json]}. end_array,end_object,end_json]}.
{json, "object.json"}. {json, "object.json"}.

View file

@ -1,5 +1,5 @@
{name, "string"}. {name, "string"}.
{jsx, [start_array, {jsx, [start_array,
{string,<<"this is a random string with \n embedded escapes in it">>}, {string,"this is a random string with \n embedded escapes in it"},
end_array,end_json]}. end_array,end_json]}.
{json, "string.json"}. {json, "string.json"}.

View file

@ -1,12 +1,12 @@
{name, "string_escapes"}. {name, "string_escapes"}.
{jsx, [start_array, {jsx, [start_array,
{string,<<"\"">>}, {string,"\""},
{string,<<"\\">>}, {string,"\\"},
{string,<<"/">>}, {string,"/"},
{string,<<"\b">>}, {string,"\b"},
{string,<<"\f">>}, {string,"\f"},
{string,<<"\n">>}, {string,"\n"},
{string,<<"\r">>}, {string,"\r"},
{string,<<"\t">>}, {string,"\t"},
end_array,end_json]}. end_array,end_json]}.
{json, "string_escapes.json"}. {json, "string_escapes.json"}.

View file

@ -1,6 +1,6 @@
{name, "unicode_to_codepoint"}. {name, "unicode_to_codepoint"}.
{jsx, [start_array, {jsx, [start_array,
{string,<<"arabic letter alef: ">>}, {string,"arabic letter alef: "},
{string,<<1575/utf8>>}, {string,[1575]},
end_array,end_json]}. end_array,end_json]}.
{json, "unicode_to_codepoint.json"}. {json, "unicode_to_codepoint.json"}.

View file

@ -1,4 +1,4 @@
{name, "unpaired surrogate replaced"}. {name, "unpaired surrogate replaced"}.
{jsx, [start_array,{string,<<16#fffd/utf8, "blah">>},end_array,end_json]}. {jsx, [start_array,{string,16#fffd/utf8 ++ "blah"},end_array,end_json]}.
{json, "unpaired_surrogate_replaced.json"}. {json, "unpaired_surrogate_replaced.json"}.
{jsx_flags, [loose_unicode]}. {jsx_flags, [loose_unicode]}.

View file

@ -4,9 +4,9 @@
end_array, end_array,
{integer,0}, {integer,0},
start_object, start_object,
{key,<<"key">>}, {key,"key"},
{integer,0}, {integer,0},
{key,<<"another key">>}, {key,"another key"},
{integer,0}, {integer,0},
end_object, end_object,
{integer,0}, {integer,0},