token_match_pound
This commit is contained in:
12
lexing.cpp
12
lexing.cpp
@@ -139,7 +139,6 @@ lex_parse_ident(Intern_Table *table, Lex_Stream *s, Token *t){
|
||||
while(lex_is_alphanumeric(lexc(s)) || lexc(s) == '_')
|
||||
lex_advance(s);
|
||||
lex_set_len(s,t);
|
||||
t->intern_val = intern_string(table, t->string);
|
||||
}
|
||||
|
||||
#define CASE2(op, OpName, Assign) \
|
||||
@@ -353,11 +352,12 @@ lex__stream(Lexer *lexer){
|
||||
CASE3('|', TK_BitOr, TK_OrAssign, TK_Or);
|
||||
|
||||
case '#': {
|
||||
t.kind = TK_Pound;
|
||||
lex_parse_ident(table, s, &t);
|
||||
if(t.intern_val.str == intern_foreign.str){
|
||||
t.kind = TK_FOREIGN;
|
||||
}
|
||||
else token_error(&t, "Unrecognized #note"_s);
|
||||
t.str += 1;
|
||||
t.len -= 1;
|
||||
t.intern_val = intern_string(table, t.string);
|
||||
if(t.len == 0) token_error(&t, "Macro token without content"_s);
|
||||
}break;
|
||||
|
||||
case '.': {
|
||||
@@ -509,6 +509,7 @@ lex__stream(Lexer *lexer){
|
||||
case 'x':case 'Z':case 'z':case 'Y':case 'y':case '_': {
|
||||
t.kind = TK_Identifier;
|
||||
lex_parse_ident(table, s, &t);
|
||||
t.intern_val = intern_string(table, t.string);
|
||||
if(lex_is_keyword(table, t.intern_val)){
|
||||
t.kind = TK_Keyword;
|
||||
}
|
||||
@@ -625,7 +626,6 @@ name(Token_Kind kind){
|
||||
case TK_Float: return "Float";
|
||||
case TK_Integer: return "int";
|
||||
case TK_Keyword: return "Keyword";
|
||||
case TK_FOREIGN: return "#foreign";
|
||||
case CLOSE_SCOPE: return "Close_Scope";
|
||||
case OPEN_SCOPE: return "Open_Scope";
|
||||
case SAME_SCOPE: return "Same_Scope";
|
||||
|
||||
Reference in New Issue
Block a user