From d1c8c171a1661a397e80014b00b21470c5ddbea9 Mon Sep 17 00:00:00 2001 From: Felix Krause Date: Wed, 16 Mar 2016 19:30:51 +0100 Subject: [PATCH] Properly handle comments in flow mode --- private/fastparse.nim | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/private/fastparse.nim b/private/fastparse.nim index 533185d..d8c8b79 100644 --- a/private/fastparse.nim +++ b/private/fastparse.nim @@ -376,18 +376,19 @@ template skipWhitespace(lexer: BaseLexer) = debug("lex: skipWhitespace") while lexer.buf[lexer.bufpos] in space: lexer.bufpos.inc() -template skipWhitespaceAndNewlines(lexer: BaseLexer) = - debug("lex: skipWhitespaceAndNewLines") - while true: - case lexer.buf[lexer.bufpos] - of space: - lexer.bufpos.inc() - of '\l': - lexer.bufpos = lexer.handleLF(lexer.bufpos) - of '\c': - lexer.bufpos = lexer.handleCR(lexer.bufpos) - else: - break +template skipWhitespaceCommentsAndNewlines(lexer: BaseLexer) = + debug("lex: skipWhitespaceCommentsAndNewlines") + if lexer.buf[lexer.bufpos] != '#': + while true: + case lexer.buf[lexer.bufpos] + of space: lexer.bufpos.inc() + of '\l': lexer.bufpos = lexer.handleLF(lexer.bufpos) + of '\c': lexer.bufpos = lexer.handleCR(lexer.bufpos) + of '#': # also skip comments + lexer.bufpos.inc() + while lexer.buf[lexer.bufpos] notin {'\l', '\c', EndOfFile}: + lexer.bufpos.inc() + else: break template skipIndentation(lexer: BaseLexer) = debug("lex: skipIndentation") @@ -1439,7 +1440,7 @@ proc parse*(p: YamlParser, s: Stream): YamlStream = parserError("Unexpected content (expected document end)") of fpFlow: debug("state: flow") - p.lexer.skipWhitespaceAndNewlines() + p.lexer.skipWhitespaceCommentsAndNewlines() case p.lexer.buf[p.lexer.bufpos] of '{': handleObjectStart(yamlStartMap) @@ -1570,7 +1571,7 @@ proc parse*(p: YamlParser, s: Stream): YamlStream = handleFlowPlainScalar() of fpFlowAfterObject: debug("state: flowAfterObject") - p.lexer.skipWhitespaceAndNewlines() + p.lexer.skipWhitespaceCommentsAndNewlines() case p.lexer.buf[p.lexer.bufpos] of ']': case level.kind