lex: handle preprocesser directives embedded into code blocks

This commit is contained in:
Matthias Schiffer 2015-04-05 19:17:24 +02:00
parent a4c2f94f8b
commit 696d94d796

View file

@ -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;
} }