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 line_comment = false;
|
||||||
bool block_comment = false;
|
bool block_comment = false;
|
||||||
bool str = false;
|
bool str = false;
|
||||||
|
bool pp = false;
|
||||||
|
|
||||||
size_t pos = 0;
|
size_t pos = 0;
|
||||||
size_t len = 1024;
|
size_t len = 1024;
|
||||||
|
@ -272,7 +273,7 @@ int lex_t::lex_block(parser_value_t *value) {
|
||||||
char cur = current();
|
char cur = current();
|
||||||
|
|
||||||
if (line_comment) {
|
if (line_comment) {
|
||||||
if (cur == '\n' || cur == '\r')
|
if (cur == '\n')
|
||||||
line_comment = false;
|
line_comment = false;
|
||||||
}
|
}
|
||||||
else if (block_comment) {
|
else if (block_comment) {
|
||||||
|
@ -283,6 +284,10 @@ int lex_t::lex_block(parser_value_t *value) {
|
||||||
if (prev != '\\' && cur == '"')
|
if (prev != '\\' && cur == '"')
|
||||||
str = false;
|
str = false;
|
||||||
}
|
}
|
||||||
|
else if (pp) {
|
||||||
|
if (prev != '\\' && cur == '\n')
|
||||||
|
pp = false;
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
if (cur == '{') {
|
if (cur == '{') {
|
||||||
parens++;
|
parens++;
|
||||||
|
@ -296,6 +301,9 @@ int lex_t::lex_block(parser_value_t *value) {
|
||||||
else if (cur == '"') {
|
else if (cur == '"') {
|
||||||
str = true;
|
str = true;
|
||||||
}
|
}
|
||||||
|
else if (cur == '#') {
|
||||||
|
pp = true;
|
||||||
|
}
|
||||||
else if (prev == '/' && cur == '/') {
|
else if (prev == '/' && cur == '/') {
|
||||||
line_comment = true;
|
line_comment = true;
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue