X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=lexer.h;h=45b4ad214c04c7e8e3347eb82bac3ca698d46475;hb=890ca3c782c7c8dfc666e84b0898b8766de6f1dc;hp=e419794eda9f867e150e9f26064cd3ef849c9ec6;hpb=95865035eb9e9e1e51ab345a272d06cceacb3102;p=xonotic%2Fgmqcc.git diff --git a/lexer.h b/lexer.h index e419794..45b4ad2 100644 --- a/lexer.h +++ b/lexer.h @@ -28,23 +28,23 @@ typedef struct token_s token; #include "ast.h" struct token_s { - int ttype; + int ttype; - char *value; + char *value; - union { - vector v; - int i; - double f; - int t; /* type */ - } constval; + union { + vector v; + int i; + double f; + int t; /* type */ + } constval; #if 0 - struct token_s *next; - struct token_s *prev; + struct token_s *next; + struct token_s *prev; #endif - lex_ctx ctx; + lex_ctx ctx; }; #if 0 @@ -73,6 +73,9 @@ enum { TOKEN_DOTS, /* 3 dots, ... */ + TOKEN_ATTRIBUTE_OPEN, /* [[ */ + TOKEN_ATTRIBUTE_CLOSE, /* ]] */ + TOKEN_STRINGCONST, /* not the typename but an actual "string" */ TOKEN_CHARCONST, TOKEN_VECTORCONST, @@ -97,34 +100,34 @@ typedef struct { } frame_macro; typedef struct { - FILE *file; - const char *open_string; - size_t open_string_length; - size_t open_string_pos; + FILE *file; + const char *open_string; + size_t open_string_length; + size_t open_string_pos; - char *name; - size_t line; - size_t sline; /* line at the start of a token */ + char *name; + size_t line; + size_t sline; /* line at the start of a token */ - char peek[256]; - size_t peekpos; + char peek[256]; + size_t peekpos; - bool eof; + bool eof; - token tok; /* not a pointer anymore */ + token tok; /* not a pointer anymore */ - struct { - bool noops; - bool nodigraphs; /* used when lexing string constants */ - bool preprocessing; /* whitespace and EOLs become actual tokens */ - bool mergelines; /* backslash at the end of a line escapes the newline */ - } flags; + struct { + bool noops; + bool nodigraphs; /* used when lexing string constants */ + bool preprocessing; /* whitespace and EOLs become actual tokens */ + bool mergelines; /* backslash at the end of a line escapes the newline */ + } flags; int framevalue; - frame_macro *frames; - char *modelname; + frame_macro *frames; + char *modelname; - size_t push_line; + size_t push_line; } lex_file; lex_file* lex_open (const char *file);