Mercurial > hg-old > index.cgi
comparison lwasm/pass1.c @ 383:848d3cca8078
Fixed imm8 to actually use expression and also fixed gen mode to respect > and <
author | lost@starbug |
---|---|
date | Sat, 15 May 2010 20:01:58 -0600 |
parents | eacdae8a1575 |
children | cf8c92d70eb1 |
comparison
equal
deleted
inserted
replaced
382:eacdae8a1575 | 383:848d3cca8078 |
---|---|
51 line_t *cl; | 51 line_t *cl; |
52 char *p1; | 52 char *p1; |
53 int stspace; | 53 int stspace; |
54 char *tok, *sym; | 54 char *tok, *sym; |
55 int opnum; | 55 int opnum; |
56 | 56 int lc = 1; |
57 for (;;) | 57 for (;;) |
58 { | 58 { |
59 sym = NULL; | 59 sym = NULL; |
60 line = input_readline(as); | 60 line = input_readline(as); |
61 if (!line) | 61 if (!line) |
72 if (!strcmp(line + 2, "SETCONTEXT")) | 72 if (!strcmp(line + 2, "SETCONTEXT")) |
73 { | 73 { |
74 as -> context = strtol(p1, NULL, 10); | 74 as -> context = strtol(p1, NULL, 10); |
75 } | 75 } |
76 lw_free(line); | 76 lw_free(line); |
77 lc = 1; | |
77 continue; | 78 continue; |
78 } | 79 } |
79 debug_message(as, 75, "Read line: %s", line); | 80 debug_message(as, 75, "Read line: %s", line); |
80 | 81 |
81 cl = lw_alloc(sizeof(line_t)); | 82 cl = lw_alloc(sizeof(line_t)); |
82 memset(cl, 0, sizeof(line_t)); | 83 memset(cl, 0, sizeof(line_t)); |
83 cl -> outputl = -1; | 84 cl -> outputl = -1; |
85 cl -> linespec = lw_strdup(input_curspec(as)); | |
84 cl -> prev = as -> line_tail; | 86 cl -> prev = as -> line_tail; |
85 cl -> insn = -1; | 87 cl -> insn = -1; |
86 cl -> as = as; | 88 cl -> as = as; |
87 cl -> inmod = as -> inmod; | 89 cl -> inmod = as -> inmod; |
88 cl -> csect = as -> csect; | 90 cl -> csect = as -> csect; |
96 } | 98 } |
97 else | 99 else |
98 { | 100 { |
99 lw_expr_t te; | 101 lw_expr_t te; |
100 | 102 |
103 cl -> lineno = as -> line_tail -> lineno + 1; | |
101 as -> line_tail -> next = cl; | 104 as -> line_tail -> next = cl; |
102 | 105 |
103 // set the line address | 106 // set the line address |
104 te = lw_expr_build(lw_expr_type_special, lwasm_expr_linelen, cl -> prev); | 107 te = lw_expr_build(lw_expr_type_special, lwasm_expr_linelen, cl -> prev); |
105 cl -> addr = lw_expr_build(lw_expr_type_oper, lw_expr_oper_plus, cl -> prev -> addr, te); | 108 cl -> addr = lw_expr_build(lw_expr_type_oper, lw_expr_oper_plus, cl -> prev -> addr, te); |
106 lw_expr_destroy(te); | 109 lw_expr_destroy(te); |
107 lw_expr_simplify(cl -> addr, as); | 110 lw_expr_simplify(cl -> addr, as); |
108 | 111 |
109 // carry DP value forward | 112 // carry DP value forward |
110 cl -> dpval = cl -> prev -> dpval; | 113 cl -> dpval = cl -> prev -> dpval; |
114 | |
115 } | |
116 if (!lc && strcmp(cl -> linespec, cl -> prev -> linespec)) | |
117 lc = 1; | |
118 if (lc) | |
119 { | |
120 cl -> lineno = 1; | |
121 lc = 0; | |
111 } | 122 } |
112 as -> line_tail = cl; | 123 as -> line_tail = cl; |
113 as -> cl = cl; | 124 as -> cl = cl; |
114 // blank lines don't count for anything | 125 // blank lines don't count for anything |
115 // except a local symbol context break | 126 // except a local symbol context break |