]> de.git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - parser.c
Remove old tempalloc code; disable -Olocaltemps for now
[xonotic/gmqcc.git] / parser.c
index 5129962c768c216f8a1e16d15e78b4a8e4026d8c..128fa4f79c2d2210f47a1e88eb5fb95b2be97788 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -903,12 +903,13 @@ static bool parser_sy_apply_operator(parser_t *parser, shunt *sy)
                                 return false;
                             }
                             out = (ast_expression*)ast_unary_new(ctx, type_not_instr[exprs[i]->expression.vtype], exprs[i]);
-                            if (!out)
-                                break;
+                            if (!out) break;
+                            out = (ast_expression*)ast_unary_new(ctx, INSTR_NOT_F, out);
+                            if (!out) break;
                             exprs[i] = out; out = NULL;
+                            if (OPTS_FLAG(PERL_LOGIC)) {
+                            }
                         }
-                        if (OPTS_FLAG(PERL_LOGIC))
-                            break;
                     }
                 }
                 out = (ast_expression*)ast_binary_new(ctx, generated_op, exprs[0], exprs[1]);
@@ -1910,8 +1911,10 @@ static ast_expression* process_condition(parser_t *parser, ast_expression *cond,
         }
         ifnot = !ifnot;
     }
-    else if (OPTS_FLAG(CORRECT_LOGIC)) {
-        /* everything must use a NOT_ */
+    if (OPTS_FLAG(CORRECT_LOGIC) &&
+        !(cond->expression.vtype == TYPE_STRING && OPTS_FLAG(TRUE_EMPTY_STRINGS)))
+    {
+        /* non-floats need to use NOT; except for strings on -ftrue-empty-strings */
         unary = (ast_unary*)cond;
         if (!ast_istype(cond, ast_unary) || unary->op < INSTR_NOT_F || unary->op > INSTR_NOT_FNC)
         {
@@ -2255,9 +2258,11 @@ static bool parse_for(parser_t *parser, ast_block *block, ast_expression **out)
     if (!parse_statement_or_block(parser, &ontrue))
         goto onerr;
 
-    cond = process_condition(parser, cond, &ifnot);
-    if (!cond)
-        goto onerr;
+    if (cond) {
+        cond = process_condition(parser, cond, &ifnot);
+        if (!cond)
+            goto onerr;
+    }
     aloop = ast_loop_new(ctx, initexpr, cond, ifnot, NULL, false, increment, ontrue);
     *out = (ast_expression*)aloop;