X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=blobdiff_plain;f=parser.h;h=f9f0ab56e74c63f9ef8c994450c523c1ab8827b0;hp=49c76c9b8061ce02435897957241f5b17ea34ddc;hb=7e0e041527e812a112635fe511fb1ad566b6c7fe;hpb=b5d8b445038f20c2cedc05ee8585a36692650abc diff --git a/parser.h b/parser.h index 49c76c9..f9f0ab5 100644 --- a/parser.h +++ b/parser.h @@ -3,36 +3,24 @@ #include "gmqcc.h" #include "lexer.h" #include "ast.h" +#include "intrin.h" struct parser_t; -struct intrin_t; struct fold_t { parser_t *parser; - ast_value **imm_float; /* vector */ - ast_value **imm_vector; /* vector */ - ast_value **imm_string; /* vector */ + std::vector imm_float; + std::vector imm_vector; + std::vector imm_string; hash_table_t *imm_string_untranslate; /* map */ hash_table_t *imm_string_dotranslate; /* map */ }; -struct intrin_func_t { - ast_expression *(*intrin)(intrin_t *); - const char *name; - const char *alias; - size_t args; -}; - -struct intrin_t { - intrin_func_t *intrinsics; /* vector */ - ast_expression **generated; /* vector */ - parser_t *parser; - fold_t *fold; -}; - #define parser_ctx(p) ((p)->lex->tok.ctx) struct parser_t { + parser_t() { } + lex_file *lex; int tok; @@ -89,7 +77,7 @@ struct parser_t { size_t max_param_count; fold_t *fold; - intrin_t *intrin; + intrin m_intrin; }; @@ -111,11 +99,4 @@ ast_expression *fold_binary (lex_ctx_t ctx, int, ast_expression *, ast_e int fold_cond_ifthen (ir_value *, ast_function *, ast_ifthen *); int fold_cond_ternary (ir_value *, ast_function *, ast_ternary *); -/* intrin.c */ -intrin_t *intrin_init (parser_t *parser); -void intrin_cleanup (intrin_t *intrin); -ast_expression *intrin_fold (intrin_t *intrin, ast_value *, ast_expression **); -ast_expression *intrin_func (intrin_t *intrin, const char *name); -ast_expression *intrin_debug_typestring(intrin_t *intrin); - #endif