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, + ) + ] + ) + )