]> granicus.if.org Git - yasm/commitdiff
Fix bug in expr_level_op(). Discovered when adding on-the-fly expr leveling.
authorPeter Johnson <peter@tortall.net>
Fri, 18 Jul 2008 05:52:01 +0000 (05:52 -0000)
committerPeter Johnson <peter@tortall.net>
Fri, 18 Jul 2008 05:52:01 +0000 (05:52 -0000)
svn path=/trunk/yasm/; revision=2117

libyasm/expr.c

index fe7cb9a9de45a257633679553b58a78279a69c86..14a52264d56bb84e7c14f1e22529dc5461873755 100644 (file)
@@ -43,6 +43,9 @@
 #include "arch.h"
 
 
+static /*@only@*/ yasm_expr *expr_level_op
+    (/*@returned@*/ /*@only@*/ yasm_expr *e, int fold_const,
+     int simplify_ident, int simplify_reg_mul);
 static int expr_traverse_nodes_post(/*@null@*/ yasm_expr *e,
                                     /*@null@*/ void *d,
                                     int (*func) (/*@null@*/ yasm_expr *e,
@@ -116,7 +119,7 @@ yasm_expr_create(yasm_expr_op op, yasm_expr__item *left,
 
     ptr->line = line;
 
-    return ptr;
+    return expr_level_op(ptr, 1, 1, 0);
 }
 /*@=compmempass@*/
 
@@ -779,7 +782,8 @@ expr_level_op(/*@returned@*/ /*@only@*/ yasm_expr *e, int fold_const,
             if (i == first_int_term)
                 first_int_term = o;
             o--;
-        }
+        } else
+            o--;
     }
 
     /* Simplify identities, make IDENT if possible, and save to e->numterms. */