]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - intrin.h
gitignore: add gmqcc, gmqpak, qmcvm, testsuite, pak.
[xonotic/gmqcc.git] / intrin.h
index d66cc3c1f9ee191460231f442c4b5fb87d561653..4f672dd9c04e349d68cad54e7fd42e5a449352aa 100644 (file)
--- 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, "<float>", 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,17 +399,17 @@ 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)
-                return find;
+                return (ast_expression*)find;
 
     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);
     }