X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=blobdiff_plain;f=intrin.h;h=4b4c9478afa3cb760b1c7ed216ebe86377a3d22f;hp=d66cc3c1f9ee191460231f442c4b5fb87d561653;hb=ef565adaa5a4fc05efee86fb96df25fbd03d978e;hpb=a798859a7a214c0a3488ed61f22e5821cf608ba8 diff --git a/intrin.h b/intrin.h index d66cc3c..4b4c947 100644 --- a/intrin.h +++ b/intrin.h @@ -44,10 +44,6 @@ ht intrin_intrinsics() { return intrinsics; } -void intrin_intrinsics_destroy() { - util_htdel(intrin_intrinsics()); -} - #define INTRIN_VAL(VALUE, NAME, FUNC, STYPE, VTYPE) \ do { \ (VALUE) = ast_value_new ( \ @@ -91,7 +87,7 @@ ast_expression *intrin_pow(parser_t *parser) { * local *= x; * } * return local; - * } + * } */ static ast_value *value = NULL; @@ -230,7 +226,7 @@ ast_expression *intrin_mod(parser_t *parser) { * float mod(float x, float y) { * return x - y * floor(x / y); * } - */ + */ static ast_value *value = NULL; if (!value) { @@ -325,8 +321,8 @@ ast_expression *intrin_isnan(parser_t *parser) { * local = x; * * return (x != local); - * } - */ + * } + */ static ast_value *value = NULL; if (!value) { @@ -334,7 +330,7 @@ ast_expression *intrin_isnan(parser_t *parser) { ast_value *local = ast_value_new (parser_ctx(parser), "local", TYPE_FLOAT); ast_block *body = ast_block_new (parser_ctx(parser)); ast_function *func = NULL; - + INTRIN_VAL(value, "isnan", func, "", TYPE_FLOAT); vec_push(body->locals, local); @@ -376,6 +372,17 @@ static intrin_t intrinsics[] = { {&intrin_isnan, "__builtin_isnan", "isnan"} }; +void intrin_intrinsics_destroy(parser_t *parser) { + /*size_t i;*/ + (void)parser; + util_htdel(intrin_intrinsics()); +#if 0 + for (i = 0; i < sizeof(intrinsics)/sizeof(intrin_t); i++) + ast_value_delete( (ast_value*) intrinsics[i].intrin(parser)); +#endif +} + + ast_expression *intrin_func(parser_t *parser, const char *name) { static bool init = false; size_t i = 0; @@ -392,8 +399,8 @@ ast_expression *intrin_func(parser_t *parser, const char *name) { /* * jesus fucking christ, Blub design something less fucking * impossible to use, like a ast_is_builtin(ast_expression *), also - * use a hashtable :P - */ + * use a hashtable :P + */ if ((find = (void*)parser_find_global(parser, name)) && ((ast_value*)find)->expression.vtype == TYPE_FUNCTION) for (i = 0; i < vec_size(parser->functions); ++i) if (((ast_value*)find)->name && !strcmp(parser->functions[i]->name, ((ast_value*)find)->name) && parser->functions[i]->builtin < 0) @@ -402,7 +409,7 @@ ast_expression *intrin_func(parser_t *parser, const char *name) { if ((find = util_htget(intrin_intrinsics(), name))) { /* intrinsic is in table. This will "generate the function" so * to speak (if it's not already generated). - */ + */ return ((intrin_t*)find)->intrin(parser); }