# HG changeset patch # User lost # Date 1232176325 0 # Node ID 81fc353d4d69d6970c32440be5e8993515347318 # Parent 2e8dda44027c5c3b82ea1eae5f1c928e7842bfc9 Cleaned up old lwasm_expr_result() function and unused EXPR_* flags diff -r 2e8dda44027c -r 81fc353d4d69 src/insn_gen.c --- a/src/insn_gen.c Sat Jan 17 07:09:15 2009 +0000 +++ b/src/insn_gen.c Sat Jan 17 07:12:05 2009 +0000 @@ -140,7 +140,7 @@ { lwasm_emitop(as, l, instab[opnum].ops[3]); (*p)++; - r = lwasm_expr_result2(as, l, p, EXPR_PASS2CONST | EXPR_BYTE, &rval, 0); + r = lwasm_expr_result2(as, l, p, 0, &rval, 0); if (r != 0) rval = 0; if (r == 1 && as -> passnum == 2) @@ -212,7 +212,7 @@ lwasm_emitop(as, l, instab[opnum].ops[0]); (*p)++; - r = lwasm_expr_result2(as, l, p, EXPR_PASS2CONST | EXPR_BYTE, &rval, 0); + r = lwasm_expr_result2(as, l, p, 0, &rval, 0); if (r != 0) rval = 0; if (r == 1 && as -> passnum == 2) diff -r 2e8dda44027c -r 81fc353d4d69 src/insn_rel.c --- a/src/insn_rel.c Sat Jan 17 07:09:15 2009 +0000 +++ b/src/insn_rel.c Sat Jan 17 07:12:05 2009 +0000 @@ -38,7 +38,7 @@ lwasm_emitop(as, l, instab[opnum].ops[0]); - if ((r = lwasm_expr_result2(as, l, p, EXPR_PASS2CONST | EXPR_NOINTERSECT, &v, 0)) < 0) + if ((r = lwasm_expr_result2(as, l, p, 0, &v, 0)) < 0) v = 0; else { @@ -81,7 +81,7 @@ lwasm_emitop(as, l, instab[opnum].ops[0]); - r = lwasm_expr_result2(as, l, p, EXPR_PASS2CONST, &v, 0); + r = lwasm_expr_result2(as, l, p, 0, &v, 0); if (r < 0) v = 0; else diff -r 2e8dda44027c -r 81fc353d4d69 src/lwasm.c --- a/src/lwasm.c Sat Jan 17 07:09:15 2009 +0000 +++ b/src/lwasm.c Sat Jan 17 07:12:05 2009 +0000 @@ -315,82 +315,6 @@ Evaluate an expression according to the flag value. Return 0 if a constant result was obtained, 1 if an incomplete result was obtained, and -1 if an error was flagged. -Symbol resolution will be modified for the object target as follows: -- a symbol which is not defined within a section will evaluate as a constant -- a symbol which is defined within the same section will evaluate as a constant -- a symbol defined in another section will remain unresolved -- external references will also remain unresolved - -EXPR_PASS2PASS will cause the result from pass 1 along with the offset to -the end of the expression to be stored in the line data. There can only be -one such expression per source line. In this case, the expression is parsed -and evaluated on pass 1 but the intermediate representation is re-evaluated -on pass 2. -*/ -/* -int lwasm_expr_result(asmstate_t *as, lwasm_line_t *l, char **inp, int flag, int *val) -{ - lwasm_expr_stack_t *s; - const char *ep; - int rval; - - s = lwasm_evaluate_expr(as, l, *inp, &ep); - if (!s) - { - register_error(as, l, 1, "Bad expression"); - *val = 0; - return -1; - } - *inp = (char *)ep; - - if (flag & EXPR_PASS1CONST && as -> passnum == 1 && !lwasm_expr_result_ckconst(as, s)) - { - register_error(as, l, 1, "Undefined reference (pass 1)"); - *val = 0; - lwasm_expr_stack_free(s); - return -1; - } - if (flag & EXPR_PASS2CONST && as -> passnum == 2 && !lwasm_expr_result_ckconst(as, s)) - { - register_error(as, l, 2, "Undefined reference (pass 2)"); - *val = 0; - lwasm_expr_stack_free(s); - return -1; - } - if (flag & EXPR_NOINTERSECT && !lwasm_expr_is_constant(s)) - { - register_error(as, l, 2, "Invalid inter-section reference"); - } - *val = lwasm_expr_get_value(s); - if (l -> expr) - { - lwasm_expr_stack_free(l -> expr); - l -> expr = NULL; - } - if (lwasm_is_constant(s)) - { - // fully resolved value here - lwasm_expr_stack_free(s); - } - else - { - // incomplete reference here - l -> expr = s; - } - - if (flag & EXPR_BYTE && as -> passnum == 2 && (*val < -128 || *val > 255)) - { - register_error(as, l, 2, "Byte overflow"); - *val &= 0xff; - return -1; - } - if (flag & EXPR_BYTE) - { - *val &= 0xff; - } - - return 0; -} */ int lwasm_expr_result2(asmstate_t *as, lwasm_line_t *l, char **inp, int flag, int *val, int slot) { diff -r 2e8dda44027c -r 81fc353d4d69 src/lwasm.h --- a/src/lwasm.h Sat Jan 17 07:09:15 2009 +0000 +++ b/src/lwasm.h Sat Jan 17 07:12:05 2009 +0000 @@ -206,10 +206,6 @@ // return 0 on ok, -1 on error, 1 if a complex expression was returned #define EXPR_NOFLAG 0 #define EXPR_PASS1CONST 1 // no forward references on pass 1 -#define EXPR_PASS2CONST 2 // no undefined references on pass 2 -#define EXPR_BYTE 4 // the result must fit within 8 bits -#define EXPR_COMPLEX 8 // a non-constant result is permitted (stored in l -> expr) -#define EXPR_NOINTERSECT 16 // only allow intra-section values (pass 2) __lwasm_E__ int lwasm_expr_result(asmstate_t *as, lwasm_line_t *l, char **inp, int flag, int *val); __lwasm_E__ int lwasm_expr_result2(asmstate_t *as, lwasm_line_t *l, char **inp, int flag, int *val, int slot);