From b07e1f81a68e3079a8038f49ed2b54238f68bb72 Mon Sep 17 00:00:00 2001 From: Dustin Spicuzza Date: Sun, 23 Jul 2023 17:00:35 -0400 Subject: [PATCH] Discard line continuations - Fixes #54 --- cxxheaderparser/lexer.py | 7 ++++++- tests/test_enum.py | 3 --- tests/test_misc.py | 27 +++++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/cxxheaderparser/lexer.py b/cxxheaderparser/lexer.py index fab8311..2b91892 100644 --- a/cxxheaderparser/lexer.py +++ b/cxxheaderparser/lexer.py @@ -659,7 +659,12 @@ class LexerTokenStream(TokenStream): tokbuf.append(tok) if tok.type == "NEWLINE": - break + # detect/remove line continuations + if len(tokbuf) > 2 and tokbuf[-2].type == "\\": + tokbuf.pop() + tokbuf.pop() + else: + break # detect/combine user defined literals if tok.type in udl_start: diff --git a/tests/test_enum.py b/tests/test_enum.py index b2fa002..015475a 100644 --- a/tests/test_enum.py +++ b/tests/test_enum.py @@ -116,17 +116,14 @@ def test_enum_w_multiline_expr() -> None: Token(value="<<"), Token(value="24"), Token(value="|"), - Token(value="\\"), Token(value="'A'"), Token(value="<<"), Token(value="16"), Token(value="|"), - Token(value="\\"), Token(value="'S'"), Token(value="<<"), Token(value="8"), Token(value="|"), - Token(value="\\"), Token(value="'H'"), Token(value=")"), ] diff --git a/tests/test_misc.py b/tests/test_misc.py index 81d4a0e..355854a 100644 --- a/tests/test_misc.py +++ b/tests/test_misc.py @@ -267,3 +267,30 @@ def test_user_defined_literal() -> None: ] ) ) + + +# +# Line continuation +# + + +def test_line_continuation() -> None: + content = """ + static int \ + variable; + """ + data = parse_string(content, cleandoc=True) + + assert data == ParsedData( + namespace=NamespaceScope( + variables=[ + Variable( + name=PQName(segments=[NameSpecifier(name="variable")]), + type=Type( + typename=PQName(segments=[FundamentalSpecifier(name="int")]) + ), + static=True, + ) + ] + ) + )