diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2011-09-19 10:27:23 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2011-09-19 10:27:23 +0200 |
commit | 0603db21d2622588ab35389d3ddcaac7410c9f11 (patch) | |
tree | 4f97b4445fe53d17005550b9f5a1c2dd7cd80952 /odb/pragma.cxx | |
parent | c9ff2aaaf3cadcd1a80455cba426ffb12e62ce7b (diff) |
Recognize C++ keywords when parsing C++ expressions in pragmas
Diffstat (limited to 'odb/pragma.cxx')
-rw-r--r-- | odb/pragma.cxx | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/odb/pragma.cxx b/odb/pragma.cxx index 66c026a..76e2968 100644 --- a/odb/pragma.cxx +++ b/odb/pragma.cxx @@ -51,11 +51,14 @@ parse_expression (tree& t, string const& prag) { // Keep reading tokens until we see a matching ')' while keeping track - // of their balance. + // of their balance. Also switch to the pragma lexer so that we detect + // C++ keywords (this is a C++ expression). // size_t balance (0); + cxx_pragma_lexer lex; + lex.start (t, tt); - for (; tt != CPP_EOF; tt = pragma_lex (&t)) + for (; tt != CPP_EOF; tt = lex.next (t)) { bool done (false); cxx_token ct; @@ -81,6 +84,7 @@ parse_expression (tree& t, break; } case CPP_NAME: + //case CPP_KEYWORD: see default: { ct.literal = IDENTIFIER_POINTER (t); break; @@ -161,6 +165,11 @@ parse_expression (tree& t, } default: { + // CPP_KEYWORD is not in the cpp_ttype enumeration. + // + if (tt == CPP_KEYWORD) + ct.literal = IDENTIFIER_POINTER (t); + break; } } |