Mercurial > hg > index.cgi
diff lwasm/lwasm.c @ 142:697bc543368c
Implement distinction between . and * for OS9 modules
author | lost@l-w.ca |
---|---|
date | Fri, 19 Aug 2011 23:55:40 -0600 |
parents | 7e621e00b887 |
children | 8dead67ba607 |
line wrap: on
line diff
--- a/lwasm/lwasm.c Fri Aug 19 20:36:43 2011 -0600 +++ b/lwasm/lwasm.c Fri Aug 19 23:55:40 2011 -0600 @@ -104,7 +104,16 @@ return lw_expr_build(lw_expr_type_int, 0); return NULL; } - + + case lwasm_expr_linedlen: + { + line_t *cl = ptr; + if (cl -> dlen == -1) + return NULL; + return lw_expr_build(lw_expr_type_int, cl -> dlen); + } + break; + case lwasm_expr_linelen: { line_t *cl = ptr; @@ -114,6 +123,12 @@ } break; + case lwasm_expr_linedaddr: + { + line_t *cl = ptr; + return lw_expr_copy(cl -> daddr); + } + case lwasm_expr_lineaddr: { line_t *cl = ptr; @@ -284,14 +299,19 @@ if (!**p) return NULL; - if (**p == '*' || ( - **p == '.' + if (**p == '.' && !((*p)[1] >= 'A' && (*p)[1] <= 'Z') && !((*p)[1] >= 'a' && (*p)[1] <= 'z') && !((*p)[1] >= '0' && (*p)[1] <= '9') - )) + ) { - // special "symbol" for current line addr (*, .) + (*p)++; + return lw_expr_build(lw_expr_type_special, lwasm_expr_linedaddr, as -> cl); + } + + if (**p == '*') + { + // special "symbol" for current line addr (*) (*p)++; return lw_expr_build(lw_expr_type_special, lwasm_expr_lineaddr, as -> cl); }