diff --git a/include/nlohmann/detail/input/lexer.hpp b/include/nlohmann/detail/input/lexer.hpp index 98cc1b696..0219fb8d1 100644 --- a/include/nlohmann/detail/input/lexer.hpp +++ b/include/nlohmann/detail/input/lexer.hpp @@ -1185,12 +1185,46 @@ scan_number_done: token_type scan() { +#ifndef JSON_STRIP_COMMENTS // read next character and ignore whitespace do { get(); } while (current == ' ' or current == '\t' or current == '\n' or current == '\r'); +#else + // skip white space and comments if comment stripping enabled + while(true) { + // first skip any whitespace + do { + get(); + } + while (current == ' ' || current == '\t' || current == '\n' || current == '\r'); + + // next, skip any comment + if(current == '/') { + get(); + // really a comment? + if (current == '/') { + // skip to the end of line/file + do { + get(); + } while (! (current == '\n' || + current == '\r' || + current == std::char_traits::eof())); + } + else { + // not a comment, leave it up to the rest of the code to deal with the '/' + unget(); + break; + } + } + else { + // not a comment at all, break out of the loop + break; + } + } +#endif switch (current) {