minor refactoring in jsx_decoder

This commit is contained in:
alisdair sullivan 2012-04-01 17:27:55 -07:00
parent 3e56b7ff3d
commit 7b5f56a4be

View file

@ -464,52 +464,48 @@ string(<<127, Rest/binary>>, Handler, [Acc|Stack], Opts) ->
string(Rest, Handler, [?acc_seq(Acc, 127)|Stack], Opts); string(Rest, Handler, [?acc_seq(Acc, 127)|Stack], Opts);
string(<<X/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts) when X == 16#2028; X == 16#2029 -> string(<<X/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts) when X == 16#2028; X == 16#2029 ->
string(Rest, Handler, [?acc_seq(Acc, maybe_replace(X, Opts))|Stack], Opts); string(Rest, Handler, [?acc_seq(Acc, maybe_replace(X, Opts))|Stack], Opts);
string(<<S/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts) -> string(<<X/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts) when X >= 16#20, X < 16#d800 ->
case S of string(Rest, Handler, [?acc_seq(Acc, X)|Stack], Opts);
%% not strictly true, but exceptions are already taken care of in preceding clauses string(<<X/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts) when X > 16#dfff, X < 16#fdd0 ->
S when S >= 16#20, S < 16#d800 -> string(Rest, Handler, [?acc_seq(Acc, X)|Stack], Opts);
string(Rest, Handler, [?acc_seq(Acc, S)|Stack], Opts) string(<<X/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts) when X > 16#fdef, X < 16#fffe ->
; S when S > 16#dfff, S < 16#fdd0 -> string(Rest, Handler, [?acc_seq(Acc, X)|Stack], Opts);
string(Rest, Handler, [?acc_seq(Acc, S)|Stack], Opts) string(<<X/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts) when X >= 16#10000, X < 16#1fffe ->
; S when S > 16#fdef, S < 16#fffe -> string(Rest, Handler, [?acc_seq(Acc, X)|Stack], Opts);
string(Rest, Handler, [?acc_seq(Acc, S)|Stack], Opts) string(<<X/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts) when X >= 16#20000, X < 16#2fffe ->
; S when S >= 16#10000, S < 16#1fffe -> string(Rest, Handler, [?acc_seq(Acc, X)|Stack], Opts);
string(Rest, Handler, [?acc_seq(Acc, S)|Stack], Opts) string(<<X/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts) when X >= 16#30000, X < 16#3fffe ->
; S when S >= 16#20000, S < 16#2fffe -> string(Rest, Handler, [?acc_seq(Acc, X)|Stack], Opts);
string(Rest, Handler, [?acc_seq(Acc, S)|Stack], Opts) string(<<X/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts) when X >= 16#40000, X < 16#4fffe ->
; S when S >= 16#30000, S < 16#3fffe -> string(Rest, Handler, [?acc_seq(Acc, X)|Stack], Opts);
string(Rest, Handler, [?acc_seq(Acc, S)|Stack], Opts) string(<<X/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts) when X >= 16#50000, X < 16#5fffe ->
; S when S >= 16#40000, S < 16#4fffe -> string(Rest, Handler, [?acc_seq(Acc, X)|Stack], Opts);
string(Rest, Handler, [?acc_seq(Acc, S)|Stack], Opts) string(<<X/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts) when X >= 16#60000, X < 16#6fffe ->
; S when S >= 16#50000, S < 16#5fffe -> string(Rest, Handler, [?acc_seq(Acc, X)|Stack], Opts);
string(Rest, Handler, [?acc_seq(Acc, S)|Stack], Opts) string(<<X/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts) when X >= 16#70000, X < 16#7fffe ->
; S when S >= 16#60000, S < 16#6fffe -> string(Rest, Handler, [?acc_seq(Acc, X)|Stack], Opts);
string(Rest, Handler, [?acc_seq(Acc, S)|Stack], Opts) string(<<X/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts) when X >= 16#80000, X < 16#8fffe ->
; S when S >= 16#70000, S < 16#7fffe -> string(Rest, Handler, [?acc_seq(Acc, X)|Stack], Opts);
string(Rest, Handler, [?acc_seq(Acc, S)|Stack], Opts) string(<<X/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts) when X >= 16#90000, X < 16#9fffe ->
; S when S >= 16#80000, S < 16#8fffe -> string(Rest, Handler, [?acc_seq(Acc, X)|Stack], Opts);
string(Rest, Handler, [?acc_seq(Acc, S)|Stack], Opts) string(<<X/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts) when X >= 16#a0000, X < 16#afffe ->
; S when S >= 16#90000, S < 16#9fffe -> string(Rest, Handler, [?acc_seq(Acc, X)|Stack], Opts);
string(Rest, Handler, [?acc_seq(Acc, S)|Stack], Opts) string(<<X/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts) when X >= 16#b0000, X < 16#bfffe ->
; S when S >= 16#a0000, S < 16#afffe -> string(Rest, Handler, [?acc_seq(Acc, X)|Stack], Opts);
string(Rest, Handler, [?acc_seq(Acc, S)|Stack], Opts) string(<<X/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts) when X >= 16#c0000, X < 16#cfffe ->
; S when S >= 16#b0000, S < 16#bfffe -> string(Rest, Handler, [?acc_seq(Acc, X)|Stack], Opts);
string(Rest, Handler, [?acc_seq(Acc, S)|Stack], Opts) string(<<X/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts) when X >= 16#d0000, X < 16#dfffe ->
; S when S >= 16#c0000, S < 16#cfffe -> string(Rest, Handler, [?acc_seq(Acc, X)|Stack], Opts);
string(Rest, Handler, [?acc_seq(Acc, S)|Stack], Opts) string(<<X/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts) when X >= 16#e0000, X < 16#efffe ->
; S when S >= 16#d0000, S < 16#dfffe -> string(Rest, Handler, [?acc_seq(Acc, X)|Stack], Opts);
string(Rest, Handler, [?acc_seq(Acc, S)|Stack], Opts) string(<<X/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts) when X >= 16#f0000, X < 16#ffffe ->
; S when S >= 16#e0000, S < 16#efffe -> string(Rest, Handler, [?acc_seq(Acc, X)|Stack], Opts);
string(Rest, Handler, [?acc_seq(Acc, S)|Stack], Opts) string(<<X/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts) when X >= 16#100000, X < 16#10fffe ->
; S when S >= 16#f0000, S < 16#ffffe -> string(Rest, Handler, [?acc_seq(Acc, X)|Stack], Opts);
string(Rest, Handler, [?acc_seq(Acc, S)|Stack], Opts) string(<<X/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts) ->
; S when S >= 16#100000, S < 16#10fffe ->
string(Rest, Handler, [?acc_seq(Acc, S)|Stack], Opts)
; _ ->
case Opts#opts.replaced_bad_utf8 of case Opts#opts.replaced_bad_utf8 of
true -> noncharacter(<<S/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts) true -> noncharacter(<<X/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts)
; false -> ?error([<<S/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts]) ; false -> ?error([<<X/utf8, Rest/binary>>, Handler, [Acc|Stack], Opts])
end
end; end;
string(Bin, Handler, Stack, Opts) -> string(Bin, Handler, Stack, Opts) ->
case partial_utf(Bin) of case partial_utf(Bin) of