lex: handle preprocesser directives embedded into code blocks
This commit is contained in:
parent
a4c2f94f8b
commit
696d94d796
1 changed files with 9 additions and 1 deletions
10
src/lex.cpp
10
src/lex.cpp
|
@ -256,6 +256,7 @@ int lex_t::lex_block(parser_value_t *value) {
|
|||
bool line_comment = false;
|
||||
bool block_comment = false;
|
||||
bool str = false;
|
||||
bool pp = false;
|
||||
|
||||
size_t pos = 0;
|
||||
size_t len = 1024;
|
||||
|
@ -272,7 +273,7 @@ int lex_t::lex_block(parser_value_t *value) {
|
|||
char cur = current();
|
||||
|
||||
if (line_comment) {
|
||||
if (cur == '\n' || cur == '\r')
|
||||
if (cur == '\n')
|
||||
line_comment = false;
|
||||
}
|
||||
else if (block_comment) {
|
||||
|
@ -283,6 +284,10 @@ int lex_t::lex_block(parser_value_t *value) {
|
|||
if (prev != '\\' && cur == '"')
|
||||
str = false;
|
||||
}
|
||||
else if (pp) {
|
||||
if (prev != '\\' && cur == '\n')
|
||||
pp = false;
|
||||
}
|
||||
else {
|
||||
if (cur == '{') {
|
||||
parens++;
|
||||
|
@ -296,6 +301,9 @@ int lex_t::lex_block(parser_value_t *value) {
|
|||
else if (cur == '"') {
|
||||
str = true;
|
||||
}
|
||||
else if (cur == '#') {
|
||||
pp = true;
|
||||
}
|
||||
else if (prev == '/' && cur == '/') {
|
||||
line_comment = true;
|
||||
}
|
||||
|
|
Reference in a new issue