]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - ast.c
Make ** RIGHT associative
[xonotic/gmqcc.git] / ast.c
diff --git a/ast.c b/ast.c
index 4eb250fad19c360756aae26a362d5cc063bdbe3f..c0c92fbe3ab122f7c15fa0b0a588b54f7f549c0a 100644 (file)
--- a/ast.c
+++ b/ast.c
@@ -406,13 +406,17 @@ ast_binary* ast_binary_new(lex_ctx ctx, int op,
     else
         self->expression.vtype = left->expression.vtype;
 
+    /* references all */
+    self->refs = AST_REF_ALL;
+
     return self;
 }
 
 void ast_binary_delete(ast_binary *self)
 {
-    ast_unref(self->left);
-    ast_unref(self->right);
+    if (self->refs & AST_REF_LEFT)  ast_unref(self->left);
+    if (self->refs & AST_REF_RIGHT) ast_unref(self->right);
+
     ast_expression_delete((ast_expression*)self);
     mem_d(self);
 }
@@ -2183,9 +2187,11 @@ bool ast_array_index_codegen(ast_array_index *self, ast_function *func, bool lva
 
     if (!lvalue && self->expression.outr) {
         *out = self->expression.outr;
+        return true;
     }
     if (lvalue && self->expression.outl) {
         *out = self->expression.outl;
+        return true;
     }
 
     if (!ast_istype(self->array, ast_value)) {