mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 07:48:11 +00:00
LibGUI: Parse #include statements separately
This commit is contained in:
parent
b13417ddb4
commit
d8a73dd979
3 changed files with 36 additions and 0 deletions
|
@ -345,8 +345,40 @@ Vector<CppToken> CppLexer::lex()
|
|||
}
|
||||
if (ch == '#') {
|
||||
begin_token();
|
||||
consume();
|
||||
|
||||
if (is_valid_first_character_of_identifier(peek()))
|
||||
while (peek() && is_valid_nonfirst_character_of_identifier(peek()))
|
||||
consume();
|
||||
|
||||
auto directive = StringView(m_input.characters_without_null_termination() + token_start_index, m_index - token_start_index);
|
||||
if (directive == "#include") {
|
||||
commit_token(CppToken::Type::IncludeStatement);
|
||||
|
||||
begin_token();
|
||||
while (isspace(peek()))
|
||||
consume();
|
||||
commit_token(CppToken::Type::Whitespace);
|
||||
|
||||
begin_token();
|
||||
if (peek() == '<' || peek() == '"') {
|
||||
char closing = consume() == '<' ? '>' : '"';
|
||||
while (peek() != closing && peek() != '\n')
|
||||
consume();
|
||||
|
||||
if (consume() == '\n') {
|
||||
commit_token(CppToken::Type::IncludePath);
|
||||
continue;
|
||||
} else {
|
||||
commit_token(CppToken::Type::IncludePath);
|
||||
begin_token();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
while (peek() && peek() != '\n')
|
||||
consume();
|
||||
|
||||
commit_token(CppToken::Type::PreprocessorStatement);
|
||||
continue;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue