From 9bf0ca50e9cf44dcbbd6f43c83590a295681d054 Mon Sep 17 00:00:00 2001 From: alisdair sullivan Date: Tue, 26 Feb 2013 18:41:53 -0800 Subject: [PATCH] nestable /* */ style comments --- src/jsx_decoder.erl | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/jsx_decoder.erl b/src/jsx_decoder.erl index 5205b7d..06443eb 100644 --- a/src/jsx_decoder.erl +++ b/src/jsx_decoder.erl @@ -888,6 +888,11 @@ comment(<>, Handler, Stack, Config) -> single_comment(Rest, Handler, Stack, Config); comment(<>, Handler, Stack, Config) -> multi_comment(Rest, Handler, Stack, Config); +%% nested /**/ comments +comment(<<_/utf8, Rest/binary>>, Handler, [comment|Stack], Config) -> + multi_comment(Rest, Handler, Stack, Config); +comment(<<_, Rest/binary>>, Handler, [comment|Stack], Config=#config{replaced_bad_utf8=true}) -> + multi_comment(Rest, Handler, Stack, Config); comment(<<>>, Handler, [Resume|Stack], Config) -> ?incomplete(comment, <<>>, Handler, Resume, Stack, Config); comment(Bin, Handler, Stack, Config) -> @@ -910,6 +915,8 @@ single_comment(Bin, Handler, Stack, Config) -> multi_comment(<>, Handler, Stack, Config) -> end_multi_comment(Rest, Handler, Stack, Config); +multi_comment(<>, Handler, Stack, Config) -> + comment(Rest, Handler, [comment|Stack], Config); multi_comment(<<_S/utf8, Rest/binary>>, Handler, Stack, Config) -> multi_comment(Rest, Handler, Stack, Config); multi_comment(<<_, Rest/binary>>, Handler, Stack, Config=#config{replaced_bad_utf8=true}) -> @@ -939,6 +946,7 @@ end_comment(Rest, Handler, [Resume|Stack], Config) -> ; key -> key(Rest, Handler, Stack, Config) ; maybe_done -> maybe_done(Rest, Handler, Stack, Config) ; done -> done(Rest, Handler, Stack, Config) + ; comment -> multi_comment(Rest, Handler, Stack, Config) end. @@ -1245,6 +1253,10 @@ comments_test_() -> [start_array, {literal, true}, end_array, end_json], decode(<<"[// comment", ?newline, "// comment", ?newline, "true]">>, [comments]) )}, + {"/**/ comment inside /**/ comment", ?_assertEqual( + [start_array, {literal, true}, end_array, end_json], + decode(<<"[ /* /* comment */ */ true ]">>, [comments]) + )}, {"// comment with badutf", ?_assertEqual( [start_array, {literal, true}, end_array, end_json], decode(<<"[ // comment ", 16#00c0, " ", ?newline, "true]">>, [comments, replaced_bad_utf8])