Mercurial > hg > index.cgi
annotate lwasm/pseudo.c @ 583:000381ee2d5c default tip
Guard against single operand multiplication when detecting like terms
This *shouldn't* happen, but it apparently does in some pathological cases
so guard against a single operand multiplication to prevent a crash.
author | William Astle <lost@l-w.ca> |
---|---|
date | Mon, 04 Nov 2024 23:48:23 -0700 |
parents | 2ac2d447a2fa |
children |
rev | line source |
---|---|
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1 /* |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
2 pseudo.c |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
3 Copyright © 2010 William Astle |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
4 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
5 This file is part of LWASM. |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
6 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
7 LWASM is free software: you can redistribute it and/or modify it under the |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
8 terms of the GNU General Public License as published by the Free Software |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
9 Foundation, either version 3 of the License, or (at your option) any later |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
10 version. |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
11 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
12 This program is distributed in the hope that it will be useful, but WITHOUT |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
15 more details. |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
16 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
17 You should have received a copy of the GNU General Public License along with |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
18 this program. If not, see <http://www.gnu.org/licenses/>. |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
19 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
20 */ |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
21 |
359 | 22 #include "lwasm.h" |
23 | |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
24 #include <stdio.h> |
2
7317fbe024af
Clean up insane number of compiler warnings under -Wall
lost@l-w.ca
parents:
0
diff
changeset
|
25 #include <ctype.h> |
10
127e5b1e01c0
Removed use of asprintf() and added Makefile options for cross compiling; also a bugfix with sizeof{} in lwasm
lost@l-w.ca
parents:
2
diff
changeset
|
26 #include <string.h> |
55 | 27 #include <stdlib.h> |
132
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
28 #include <time.h> |
2
7317fbe024af
Clean up insane number of compiler warnings under -Wall
lost@l-w.ca
parents:
0
diff
changeset
|
29 |
7317fbe024af
Clean up insane number of compiler warnings under -Wall
lost@l-w.ca
parents:
0
diff
changeset
|
30 #include <lw_alloc.h> |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
31 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
32 #include "instab.h" |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
33 #include "input.h" |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
34 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
35 #include "lw_string.h" |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
36 |
374 | 37 void register_struct_entry(asmstate_t *as, line_t *l, int size, structtab_t *ss); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
38 |
132
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
39 // for "dts" |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
40 PARSEFUNC(pseudo_parse_dts) |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
41 { |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
42 time_t tp; |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
43 char *t; |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
44 |
135 | 45 skip_operand(p); |
46 l -> len = 0; | |
47 | |
132
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
48 tp = time(NULL); |
281
cb24ffb23f7c
Make DTS not have problems if used multiple times.
William Astle <lost@l-w.ca>
parents:
280
diff
changeset
|
49 t = l ->lstr = lw_strdup(ctime(&tp)); |
132
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
50 |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
51 while (*t) |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
52 { |
233 | 53 if (*t == '\n') |
54 break; | |
132
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
55 t++; |
135 | 56 l -> len += 1; |
132
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
57 } |
280
4370370f38d1
Correct CRC problems with DTS pseudo op
William Astle <lost@l-w.ca>
parents:
266
diff
changeset
|
58 |
132
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
59 } |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
60 |
135 | 61 EMITFUNC(pseudo_emit_dts) |
62 { | |
280
4370370f38d1
Correct CRC problems with DTS pseudo op
William Astle <lost@l-w.ca>
parents:
266
diff
changeset
|
63 char *t; |
4370370f38d1
Correct CRC problems with DTS pseudo op
William Astle <lost@l-w.ca>
parents:
266
diff
changeset
|
64 int i; |
4370370f38d1
Correct CRC problems with DTS pseudo op
William Astle <lost@l-w.ca>
parents:
266
diff
changeset
|
65 |
4370370f38d1
Correct CRC problems with DTS pseudo op
William Astle <lost@l-w.ca>
parents:
266
diff
changeset
|
66 for (t = l -> lstr, i = 0; i < l -> len; i++, t++) |
4370370f38d1
Correct CRC problems with DTS pseudo op
William Astle <lost@l-w.ca>
parents:
266
diff
changeset
|
67 lwasm_emit(l, *t); |
135 | 68 } |
69 | |
132
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
70 // for "dtb" |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
71 PARSEFUNC(pseudo_parse_dtb) |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
72 { |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
73 skip_operand(p); |
135 | 74 l -> len = 6; |
132
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
75 } |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
76 |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
77 EMITFUNC(pseudo_emit_dtb) |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
78 { |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
79 time_t tp; |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
80 struct tm *t; |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
81 |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
82 tp = time(NULL); |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
83 t = localtime(&tp); |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
84 |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
85 lwasm_emit(l, t -> tm_year); |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
86 lwasm_emit(l, t -> tm_mon + 1); |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
87 lwasm_emit(l, t -> tm_mday); |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
88 lwasm_emit(l, t -> tm_hour); |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
89 lwasm_emit(l, t -> tm_min); |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
90 lwasm_emit(l, t -> tm_sec); |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
91 } |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
92 |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
93 // for "end" |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
94 PARSEFUNC(pseudo_parse_end) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
95 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
96 lw_expr_t addr; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
97 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
98 l -> len = 0; |
379
d791d47afc48
Add m80ext pragma for Macro-80C compatibility and ignore END in includes
William Astle <lost@l-w.ca>
parents:
374
diff
changeset
|
99 |
d791d47afc48
Add m80ext pragma for Macro-80C compatibility and ignore END in includes
William Astle <lost@l-w.ca>
parents:
374
diff
changeset
|
100 if (CURPRAGMA(l, PRAGMA_M80EXT) && input_isinclude(as)) |
d791d47afc48
Add m80ext pragma for Macro-80C compatibility and ignore END in includes
William Astle <lost@l-w.ca>
parents:
374
diff
changeset
|
101 return; /* ignore END inside includes */ |
d791d47afc48
Add m80ext pragma for Macro-80C compatibility and ignore END in includes
William Astle <lost@l-w.ca>
parents:
374
diff
changeset
|
102 |
d791d47afc48
Add m80ext pragma for Macro-80C compatibility and ignore END in includes
William Astle <lost@l-w.ca>
parents:
374
diff
changeset
|
103 as->endseen = 1; |
d791d47afc48
Add m80ext pragma for Macro-80C compatibility and ignore END in includes
William Astle <lost@l-w.ca>
parents:
374
diff
changeset
|
104 |
543
e10618b48e68
Implement support for dragon format binaries
William Astle <lost@l-w.ca>
parents:
521
diff
changeset
|
105 if ((as -> output_format != OUTPUT_DECB) && (as -> output_format != OUTPUT_BASIC) && (as -> output_format != OUTPUT_LWMOD) && (as -> output_format != OUTPUT_IHEX) && (as -> output_format != OUTPUT_SREC) && (as -> output_format != OUTPUT_DRAGON) && (as -> output_format != OUTPUT_ABS)) |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
106 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
107 skip_operand(p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
108 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
109 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
110 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
111 if (!**p) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
112 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
113 addr = lw_expr_build(lw_expr_type_int, 0); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
114 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
115 else |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
116 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
117 addr = lwasm_parse_expr(as, p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
118 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
119 if (!addr) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
120 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
121 lwasm_register_error(as, as->cl, E_EXPRESSION_BAD); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
122 addr = lw_expr_build(lw_expr_type_int, 0); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
123 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
124 lwasm_save_expr(l, 0, addr); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
125 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
126 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
127 EMITFUNC(pseudo_emit_end) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
128 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
129 lw_expr_t addr; |
379
d791d47afc48
Add m80ext pragma for Macro-80C compatibility and ignore END in includes
William Astle <lost@l-w.ca>
parents:
374
diff
changeset
|
130 |
d791d47afc48
Add m80ext pragma for Macro-80C compatibility and ignore END in includes
William Astle <lost@l-w.ca>
parents:
374
diff
changeset
|
131 if (CURPRAGMA(l, PRAGMA_M80EXT) && input_isinclude(as)) |
d791d47afc48
Add m80ext pragma for Macro-80C compatibility and ignore END in includes
William Astle <lost@l-w.ca>
parents:
374
diff
changeset
|
132 return; /* ignore END inside includes */ |
d791d47afc48
Add m80ext pragma for Macro-80C compatibility and ignore END in includes
William Astle <lost@l-w.ca>
parents:
374
diff
changeset
|
133 |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
134 addr = lwasm_fetch_expr(l, 0); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
135 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
136 if (addr) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
137 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
138 if (!lw_expr_istype(addr, lw_expr_type_int)) |
432
58cafa61ab40
Add support for undocumented custom module format (for LW)
William Astle <lost@l-w.ca>
parents:
406
diff
changeset
|
139 { |
58cafa61ab40
Add support for undocumented custom module format (for LW)
William Astle <lost@l-w.ca>
parents:
406
diff
changeset
|
140 if (as -> output_format == OUTPUT_LWMOD) |
58cafa61ab40
Add support for undocumented custom module format (for LW)
William Astle <lost@l-w.ca>
parents:
406
diff
changeset
|
141 { |
58cafa61ab40
Add support for undocumented custom module format (for LW)
William Astle <lost@l-w.ca>
parents:
406
diff
changeset
|
142 as -> execaddr_expr = lw_expr_copy(addr); |
58cafa61ab40
Add support for undocumented custom module format (for LW)
William Astle <lost@l-w.ca>
parents:
406
diff
changeset
|
143 } |
58cafa61ab40
Add support for undocumented custom module format (for LW)
William Astle <lost@l-w.ca>
parents:
406
diff
changeset
|
144 else |
58cafa61ab40
Add support for undocumented custom module format (for LW)
William Astle <lost@l-w.ca>
parents:
406
diff
changeset
|
145 { |
58cafa61ab40
Add support for undocumented custom module format (for LW)
William Astle <lost@l-w.ca>
parents:
406
diff
changeset
|
146 lwasm_register_error(as, l, E_EXEC_ADDRESS); |
58cafa61ab40
Add support for undocumented custom module format (for LW)
William Astle <lost@l-w.ca>
parents:
406
diff
changeset
|
147 } |
58cafa61ab40
Add support for undocumented custom module format (for LW)
William Astle <lost@l-w.ca>
parents:
406
diff
changeset
|
148 } |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
149 else |
432
58cafa61ab40
Add support for undocumented custom module format (for LW)
William Astle <lost@l-w.ca>
parents:
406
diff
changeset
|
150 { |
58cafa61ab40
Add support for undocumented custom module format (for LW)
William Astle <lost@l-w.ca>
parents:
406
diff
changeset
|
151 as -> execaddr_expr = NULL; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
152 as -> execaddr = lw_expr_intval(addr); |
432
58cafa61ab40
Add support for undocumented custom module format (for LW)
William Astle <lost@l-w.ca>
parents:
406
diff
changeset
|
153 } |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
154 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
155 as -> endseen = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
156 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
157 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
158 PARSEFUNC(pseudo_parse_fcb) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
159 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
160 int i = 0; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
161 lw_expr_t e; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
162 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
163 for (;;) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
164 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
165 e = lwasm_parse_expr(as, p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
166 if (!e) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
167 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
168 lwasm_register_error2(as, l, E_EXPRESSION_BAD, "(#%d)", i); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
169 break; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
170 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
171 lwasm_save_expr(l, i++, e); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
172 if (**p != ',') |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
173 break; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
174 (*p)++; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
175 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
176 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
177 l -> len = i; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
178 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
179 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
180 EMITFUNC(pseudo_emit_fcb) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
181 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
182 int i; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
183 lw_expr_t e; |
2
7317fbe024af
Clean up insane number of compiler warnings under -Wall
lost@l-w.ca
parents:
0
diff
changeset
|
184 // int v; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
185 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
186 for (i = 0; i < l -> len; i++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
187 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
188 e = lwasm_fetch_expr(l, i); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
189 lwasm_emitexpr(l, e, 1); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
190 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
191 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
192 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
193 PARSEFUNC(pseudo_parse_fdb) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
194 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
195 int i = 0; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
196 lw_expr_t e; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
197 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
198 for (;;) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
199 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
200 e = lwasm_parse_expr(as, p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
201 if (!e) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
202 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
203 lwasm_register_error2(as, l, E_EXPRESSION_BAD, "(#%d)", i); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
204 break; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
205 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
206 lwasm_save_expr(l, i++, e); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
207 if (**p != ',') |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
208 break; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
209 (*p)++; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
210 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
211 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
212 l -> len = i * 2; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
213 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
214 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
215 EMITFUNC(pseudo_emit_fdb) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
216 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
217 int i; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
218 lw_expr_t e; |
2
7317fbe024af
Clean up insane number of compiler warnings under -Wall
lost@l-w.ca
parents:
0
diff
changeset
|
219 // int v; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
220 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
221 for (i = 0; i < (l -> len)/2; i++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
222 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
223 e = lwasm_fetch_expr(l, i); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
224 lwasm_emitexpr(l, e, 2); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
225 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
226 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
227 |
218 | 228 PARSEFUNC(pseudo_parse_fdbs) |
229 { | |
230 int i = 0; | |
231 lw_expr_t e; | |
232 | |
233 for (;;) | |
234 { | |
235 e = lwasm_parse_expr(as, p); | |
236 if (!e) | |
237 { | |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
238 lwasm_register_error2(as, l, E_EXPRESSION_BAD, "(#%d)", i); |
218 | 239 break; |
240 } | |
241 lwasm_save_expr(l, i++, e); | |
242 if (**p != ',') | |
243 break; | |
244 (*p)++; | |
245 } | |
246 | |
247 l -> len = i * 2; | |
248 } | |
249 | |
250 EMITFUNC(pseudo_emit_fdbs) | |
251 { | |
252 int i; | |
253 lw_expr_t e; | |
254 lw_expr_t t; | |
255 lw_expr_t t2; | |
256 // int v; | |
257 | |
258 for (i = 0; i < (l -> len)/2; i++) | |
259 { | |
260 e = lwasm_fetch_expr(l, i); | |
261 t = lw_expr_build(lw_expr_type_int, 256); | |
262 t2 = lw_expr_build(lw_expr_type_oper, lw_expr_oper_divide, e, t); | |
263 lwasm_reduce_expr(as, t2); | |
264 lw_expr_destroy(t); | |
265 lwasm_emitexpr(l, e, 1); | |
266 lwasm_emitexpr(l, t2, 1); | |
267 lw_expr_destroy(t2); | |
268 } | |
269 } | |
270 | |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
271 PARSEFUNC(pseudo_parse_fqb) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
272 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
273 int i = 0; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
274 lw_expr_t e; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
275 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
276 for (;;) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
277 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
278 e = lwasm_parse_expr(as, p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
279 if (!e) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
280 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
281 lwasm_register_error2(as, l, E_EXPRESSION_BAD, "(#%d)", i); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
282 break; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
283 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
284 lwasm_save_expr(l, i++, e); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
285 if (**p != ',') |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
286 break; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
287 (*p)++; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
288 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
289 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
290 l -> len = i * 4; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
291 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
292 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
293 EMITFUNC(pseudo_emit_fqb) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
294 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
295 int i; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
296 lw_expr_t e; |
2
7317fbe024af
Clean up insane number of compiler warnings under -Wall
lost@l-w.ca
parents:
0
diff
changeset
|
297 // int v; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
298 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
299 for (i = 0; i < (l -> len)/4; i++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
300 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
301 e = lwasm_fetch_expr(l, i); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
302 lwasm_emitexpr(l, e, 4); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
303 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
304 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
305 |
75 | 306 static int cstringlen(asmstate_t *as, line_t *ln, char **p, char delim) |
307 { | |
308 int l = 0; | |
309 char *str = NULL; | |
310 int blen = 0; | |
311 int bsize = 0; | |
312 | |
313 if (!(as -> pragmas & PRAGMA_CESCAPES)) | |
314 { | |
315 for (; **p && **p != delim; (*p)++) | |
316 { | |
317 l++; | |
318 if (blen >= bsize) | |
319 { | |
320 str = lw_realloc(str, bsize + 32); | |
393
f2decd9b276d
Fix minor error in string parsing
William Astle <lost@l-w.ca>
parents:
384
diff
changeset
|
321 bsize += 32; |
75 | 322 } |
323 str[blen++] = **p; | |
324 } | |
325 } | |
326 else | |
327 { | |
328 while (**p && **p != delim) | |
329 { | |
330 int wch = **p; | |
331 if (**p == '\\') | |
332 { | |
333 /* escape sequence */ | |
334 | |
335 (*p)++; | |
336 if (!**p) | |
337 break; | |
76
da74ccf4278c
Fixed bug parsing octal constants under cescapes pragma
lost@l-w.ca
parents:
75
diff
changeset
|
338 |
75 | 339 switch (**p) |
340 { | |
341 /* octal sequence or NUL */ | |
342 /* skip the "0", then skip up to two more digits */ | |
343 case '0': | |
344 case '1': | |
345 case '2': | |
346 case '3': | |
76
da74ccf4278c
Fixed bug parsing octal constants under cescapes pragma
lost@l-w.ca
parents:
75
diff
changeset
|
347 wch = **p; |
75 | 348 wch -= 0x30; |
76
da74ccf4278c
Fixed bug parsing octal constants under cescapes pragma
lost@l-w.ca
parents:
75
diff
changeset
|
349 if ((*p)[1] >= '0' && (*p)[1] < '8') |
75 | 350 { |
76
da74ccf4278c
Fixed bug parsing octal constants under cescapes pragma
lost@l-w.ca
parents:
75
diff
changeset
|
351 (*p)++; |
75 | 352 wch *= 8; |
353 wch += **p - 0x30; | |
76
da74ccf4278c
Fixed bug parsing octal constants under cescapes pragma
lost@l-w.ca
parents:
75
diff
changeset
|
354 } |
da74ccf4278c
Fixed bug parsing octal constants under cescapes pragma
lost@l-w.ca
parents:
75
diff
changeset
|
355 if ((*p)[1] >= '0' && (*p)[1] < '8') |
da74ccf4278c
Fixed bug parsing octal constants under cescapes pragma
lost@l-w.ca
parents:
75
diff
changeset
|
356 { |
75 | 357 (*p)++; |
358 wch *= 8; | |
359 wch += **p -0x30; | |
360 } | |
361 break; | |
362 | |
363 /* hexadecimal value */ | |
364 case 'x': | |
365 (*p)++; // ignore "x" | |
366 wch = 0; | |
367 if (**p) // skip digit 1 | |
368 { | |
369 wch = **p - 0x30; | |
370 if (wch > 9) | |
371 wch -= 7; | |
516
c33b4abff860
Fix bug related to parsing \x sequences under pragma cstrings
William Astle <lost@l-w.ca>
parents:
474
diff
changeset
|
372 if (wch > 15) |
75 | 373 wch -= 32; |
374 (*p)++; | |
375 } | |
376 if (**p) | |
377 { | |
378 int i; | |
379 i = **p - 0x30; | |
380 if (i > 9) | |
381 i -= 7; | |
516
c33b4abff860
Fix bug related to parsing \x sequences under pragma cstrings
William Astle <lost@l-w.ca>
parents:
474
diff
changeset
|
382 if (i > 15) |
75 | 383 i -= 32; |
384 wch = wch * 16 + i; | |
385 } | |
386 break; | |
387 | |
388 case 'a': | |
389 wch = 7; | |
390 break; | |
391 | |
392 case 'b': | |
393 wch = 8; | |
394 break; | |
395 | |
396 case 't': | |
397 wch = 9; | |
398 break; | |
399 | |
400 case 'n': | |
401 wch = 10; | |
402 break; | |
403 | |
404 case 'v': | |
405 wch = 11; | |
406 break; | |
407 | |
408 case 'f': | |
409 wch = 12; | |
410 break; | |
411 | |
412 case 'r': | |
413 wch = 13; | |
414 | |
415 /* everything else represents itself */ | |
416 default: | |
417 break; | |
418 } | |
419 } | |
420 /* now "wch" is the character to write out */ | |
421 l++; | |
422 (*p)++; | |
423 if (blen >= bsize) | |
424 { | |
425 str = lw_realloc(str, bsize + 32); | |
426 bsize += 32; | |
427 } | |
428 str[blen++] = wch; | |
429 } | |
430 } | |
431 /* do something with the string here */ | |
432 /* l is the string length, str is the string itself */ | |
433 ln -> lstr = str; | |
434 return l; | |
435 } | |
436 | |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
437 PARSEFUNC(pseudo_parse_fcc) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
438 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
439 char delim; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
440 int i; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
441 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
442 if (!**p) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
443 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
444 lwasm_register_error(as, l, E_OPERAND_BAD); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
445 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
446 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
447 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
448 delim = **p; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
449 (*p)++; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
450 |
75 | 451 i = cstringlen(as, l, p, delim); |
452 | |
453 if (**p != delim) | |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
454 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
455 lwasm_register_error(as, l, E_OPERAND_BAD); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
456 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
457 } |
75 | 458 (*p)++; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
459 l -> len = i; |
381
e3f4aaa2a4e8
Allow FCB-like syntax after constant in FCC under m80ext
William Astle <lost@l-w.ca>
parents:
379
diff
changeset
|
460 |
e3f4aaa2a4e8
Allow FCB-like syntax after constant in FCC under m80ext
William Astle <lost@l-w.ca>
parents:
379
diff
changeset
|
461 /* handle additional expressions, like FCC "Hello",13,0 */ |
e3f4aaa2a4e8
Allow FCB-like syntax after constant in FCC under m80ext
William Astle <lost@l-w.ca>
parents:
379
diff
changeset
|
462 if (CURPRAGMA(l, PRAGMA_M80EXT)) |
e3f4aaa2a4e8
Allow FCB-like syntax after constant in FCC under m80ext
William Astle <lost@l-w.ca>
parents:
379
diff
changeset
|
463 { |
e3f4aaa2a4e8
Allow FCB-like syntax after constant in FCC under m80ext
William Astle <lost@l-w.ca>
parents:
379
diff
changeset
|
464 if (**p == ',') |
e3f4aaa2a4e8
Allow FCB-like syntax after constant in FCC under m80ext
William Astle <lost@l-w.ca>
parents:
379
diff
changeset
|
465 { |
e3f4aaa2a4e8
Allow FCB-like syntax after constant in FCC under m80ext
William Astle <lost@l-w.ca>
parents:
379
diff
changeset
|
466 (*p)++; |
e3f4aaa2a4e8
Allow FCB-like syntax after constant in FCC under m80ext
William Astle <lost@l-w.ca>
parents:
379
diff
changeset
|
467 pseudo_parse_fcb(as, l, p); |
e3f4aaa2a4e8
Allow FCB-like syntax after constant in FCC under m80ext
William Astle <lost@l-w.ca>
parents:
379
diff
changeset
|
468 l -> fcc_extras = l -> len; |
e3f4aaa2a4e8
Allow FCB-like syntax after constant in FCC under m80ext
William Astle <lost@l-w.ca>
parents:
379
diff
changeset
|
469 l -> len = i + l -> fcc_extras; |
e3f4aaa2a4e8
Allow FCB-like syntax after constant in FCC under m80ext
William Astle <lost@l-w.ca>
parents:
379
diff
changeset
|
470 } |
e3f4aaa2a4e8
Allow FCB-like syntax after constant in FCC under m80ext
William Astle <lost@l-w.ca>
parents:
379
diff
changeset
|
471 } |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
472 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
473 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
474 EMITFUNC(pseudo_emit_fcc) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
475 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
476 int i; |
381
e3f4aaa2a4e8
Allow FCB-like syntax after constant in FCC under m80ext
William Astle <lost@l-w.ca>
parents:
379
diff
changeset
|
477 lw_expr_t e; |
e3f4aaa2a4e8
Allow FCB-like syntax after constant in FCC under m80ext
William Astle <lost@l-w.ca>
parents:
379
diff
changeset
|
478 |
e3f4aaa2a4e8
Allow FCB-like syntax after constant in FCC under m80ext
William Astle <lost@l-w.ca>
parents:
379
diff
changeset
|
479 for (i = 0; i < l -> len - l -> fcc_extras; i++) |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
480 lwasm_emit(l, l -> lstr[i]); |
381
e3f4aaa2a4e8
Allow FCB-like syntax after constant in FCC under m80ext
William Astle <lost@l-w.ca>
parents:
379
diff
changeset
|
481 |
e3f4aaa2a4e8
Allow FCB-like syntax after constant in FCC under m80ext
William Astle <lost@l-w.ca>
parents:
379
diff
changeset
|
482 /* PRAGMA_M80EXT */ |
e3f4aaa2a4e8
Allow FCB-like syntax after constant in FCC under m80ext
William Astle <lost@l-w.ca>
parents:
379
diff
changeset
|
483 for (i = 0; i < l -> fcc_extras; i++) |
e3f4aaa2a4e8
Allow FCB-like syntax after constant in FCC under m80ext
William Astle <lost@l-w.ca>
parents:
379
diff
changeset
|
484 { |
e3f4aaa2a4e8
Allow FCB-like syntax after constant in FCC under m80ext
William Astle <lost@l-w.ca>
parents:
379
diff
changeset
|
485 e = lwasm_fetch_expr(l, i); |
e3f4aaa2a4e8
Allow FCB-like syntax after constant in FCC under m80ext
William Astle <lost@l-w.ca>
parents:
379
diff
changeset
|
486 lwasm_emitexpr(l, e, 1); |
e3f4aaa2a4e8
Allow FCB-like syntax after constant in FCC under m80ext
William Astle <lost@l-w.ca>
parents:
379
diff
changeset
|
487 } |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
488 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
489 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
490 PARSEFUNC(pseudo_parse_fcs) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
491 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
492 char delim; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
493 int i; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
494 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
495 if (!**p) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
496 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
497 lwasm_register_error(as, l, E_OPERAND_BAD); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
498 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
499 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
500 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
501 delim = **p; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
502 (*p)++; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
503 |
75 | 504 i = cstringlen(as, l, p, delim); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
505 |
75 | 506 if (**p != delim) |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
507 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
508 lwasm_register_error(as, l, E_OPERAND_BAD); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
509 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
510 } |
75 | 511 (*p)++; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
512 l -> len = i; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
513 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
514 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
515 EMITFUNC(pseudo_emit_fcs) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
516 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
517 int i; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
518 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
519 for (i = 0; i < l -> len - 1; i++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
520 lwasm_emit(l, l -> lstr[i]); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
521 lwasm_emit(l, l -> lstr[i] | 0x80); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
522 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
523 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
524 PARSEFUNC(pseudo_parse_fcn) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
525 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
526 char delim; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
527 int i; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
528 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
529 if (!**p) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
530 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
531 lwasm_register_error(as, l, E_OPERAND_BAD); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
532 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
533 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
534 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
535 delim = **p; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
536 (*p)++; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
537 |
75 | 538 i = cstringlen(as, l, p, delim); |
539 | |
540 if (**p != delim) | |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
541 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
542 lwasm_register_error(as, l, E_OPERAND_BAD); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
543 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
544 } |
75 | 545 (*p)++; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
546 l -> len = i + 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
547 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
548 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
549 EMITFUNC(pseudo_emit_fcn) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
550 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
551 int i; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
552 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
553 for (i = 0; i < (l -> len - 1); i++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
554 lwasm_emit(l, l -> lstr[i]); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
555 lwasm_emit(l, 0); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
556 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
557 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
558 PARSEFUNC(pseudo_parse_rmb) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
559 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
560 lw_expr_t expr; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
561 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
562 expr = lwasm_parse_expr(as, p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
563 if (!expr) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
564 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
565 lwasm_register_error(as, l, E_EXPRESSION_BAD); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
566 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
567 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
568 l -> lint = 0; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
569 if (as -> instruct) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
570 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
571 lwasm_reduce_expr(as, expr); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
572 if (!lw_expr_istype(expr, lw_expr_type_int)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
573 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
574 lwasm_register_error(as, l, E_EXPRESSION_NOT_CONST); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
575 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
576 else |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
577 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
578 int e; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
579 e = lw_expr_intval(expr); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
580 register_struct_entry(as, l, e, NULL); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
581 l -> len = 0; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
582 l -> lint = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
583 l -> symset = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
584 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
585 } |
142
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
586 else |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
587 { |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
588 if (l -> inmod) |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
589 { |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
590 l -> dlen = -1; |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
591 l -> len = 0; |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
592 } |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
593 } |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
594 lwasm_save_expr(l, 0, expr); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
595 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
596 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
597 RESOLVEFUNC(pseudo_resolve_rmb) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
598 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
599 lw_expr_t expr; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
600 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
601 if (l -> lint) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
602 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
603 |
142
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
604 if (l -> inmod) |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
605 { |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
606 if (l -> dlen >= 0) |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
607 return; |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
608 } |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
609 else |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
610 { |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
611 if (l -> len >= 0) |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
612 return; |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
613 } |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
614 |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
615 expr = lwasm_fetch_expr(l, 0); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
616 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
617 if (lw_expr_istype(expr, lw_expr_type_int)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
618 { |
159
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
619 if (lw_expr_intval(expr) < 0) |
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
620 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
621 lwasm_register_error2(as, l, E_NEGATIVE_RESERVATION, "(%d)", lw_expr_intval(expr)); |
159
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
622 l -> len = 0; |
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
623 l -> dlen = 0; |
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
624 return; |
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
625 } |
142
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
626 if (l -> inmod) |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
627 l -> dlen = lw_expr_intval(expr); |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
628 else |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
629 l -> len = lw_expr_intval(expr); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
630 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
631 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
632 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
633 EMITFUNC(pseudo_emit_rmb) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
634 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
635 if (l -> lint) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
636 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
637 |
142
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
638 if (l -> len < 0 || l -> dlen < 0) |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
639 lwasm_register_error2(as, l, E_EXPRESSION_NOT_CONST, "%d %d", l -> len, l -> dlen); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
640 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
641 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
642 PARSEFUNC(pseudo_parse_rmd) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
643 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
644 lw_expr_t expr; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
645 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
646 l -> lint = 0; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
647 expr = lwasm_parse_expr(as, p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
648 if (!expr) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
649 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
650 lwasm_register_error(as, l, E_EXPRESSION_BAD); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
651 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
652 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
653 if (as -> instruct) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
654 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
655 lwasm_reduce_expr(as, expr); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
656 if (!lw_expr_istype(expr, lw_expr_type_int)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
657 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
658 lwasm_register_error(as, l, E_EXPRESSION_NOT_CONST); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
659 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
660 else |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
661 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
662 int e; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
663 e = lw_expr_intval(expr) * 2; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
664 register_struct_entry(as, l, e, NULL); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
665 l -> len = 0; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
666 l -> symset = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
667 l -> lint = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
668 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
669 } |
142
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
670 else |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
671 { |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
672 if (l -> inmod) |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
673 { |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
674 l -> dlen = -1; |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
675 l -> len = 0; |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
676 } |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
677 } |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
678 lwasm_save_expr(l, 0, expr); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
679 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
680 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
681 RESOLVEFUNC(pseudo_resolve_rmd) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
682 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
683 lw_expr_t expr; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
684 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
685 if (l -> lint) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
686 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
687 |
142
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
688 if (l -> inmod) |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
689 { |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
690 if (l -> dlen >= 0) |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
691 return; |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
692 } |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
693 else |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
694 { |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
695 if (l -> len >= 0) |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
696 return; |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
697 } |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
698 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
699 expr = lwasm_fetch_expr(l, 0); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
700 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
701 if (lw_expr_istype(expr, lw_expr_type_int)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
702 { |
159
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
703 if (lw_expr_intval(expr) < 0) |
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
704 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
705 lwasm_register_error2(as, l, E_NEGATIVE_RESERVATION, "(%d)", lw_expr_intval(expr)); |
159
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
706 l -> len = 0; |
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
707 l -> dlen = 0; |
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
708 return; |
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
709 } |
142
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
710 if (l -> inmod) |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
711 l -> dlen = lw_expr_intval(expr) * 2; |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
712 else |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
713 l -> len = lw_expr_intval(expr) * 2; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
714 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
715 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
716 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
717 EMITFUNC(pseudo_emit_rmd) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
718 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
719 if (l -> lint) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
720 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
721 |
142
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
722 if (l -> len < 0 || l -> dlen < 0) |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
723 lwasm_register_error(as, l, E_EXPRESSION_NOT_CONST); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
724 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
725 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
726 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
727 PARSEFUNC(pseudo_parse_rmq) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
728 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
729 lw_expr_t expr; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
730 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
731 l -> lint = 0; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
732 expr = lwasm_parse_expr(as, p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
733 if (!expr) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
734 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
735 lwasm_register_error(as, l, E_EXPRESSION_BAD); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
736 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
737 if (as -> instruct) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
738 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
739 lwasm_reduce_expr(as, expr); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
740 if (!lw_expr_istype(expr, lw_expr_type_int)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
741 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
742 lwasm_register_error(as, l, E_EXPRESSION_NOT_CONST); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
743 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
744 else |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
745 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
746 int e; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
747 e = lw_expr_intval(expr) * 4; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
748 register_struct_entry(as, l, e, NULL); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
749 l -> len = 0; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
750 l -> symset = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
751 l -> lint = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
752 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
753 } |
142
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
754 else |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
755 { |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
756 if (as -> inmod) |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
757 { |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
758 l -> dlen = -1; |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
759 l -> len = 0; |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
760 } |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
761 } |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
762 lwasm_save_expr(l, 0, expr); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
763 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
764 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
765 RESOLVEFUNC(pseudo_resolve_rmq) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
766 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
767 lw_expr_t expr; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
768 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
769 if (l -> lint) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
770 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
771 |
142
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
772 if (l -> inmod) |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
773 { |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
774 if (l -> dlen >= 0) |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
775 return; |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
776 } |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
777 else |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
778 { |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
779 if (l -> len >= 0) |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
780 return; |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
781 } |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
782 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
783 expr = lwasm_fetch_expr(l, 0); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
784 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
785 if (lw_expr_istype(expr, lw_expr_type_int)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
786 { |
159
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
787 if (lw_expr_intval(expr) < 0) |
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
788 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
789 lwasm_register_error2(as, l, E_NEGATIVE_RESERVATION, "(%d)", lw_expr_intval(expr)); |
159
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
790 l -> len = 0; |
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
791 l -> dlen = 0; |
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
792 return; |
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
793 } |
142
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
794 if (l -> inmod) |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
795 l -> dlen = lw_expr_intval(expr) * 4; |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
796 else |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
797 l -> len = lw_expr_intval(expr) * 4; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
798 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
799 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
800 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
801 EMITFUNC(pseudo_emit_rmq) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
802 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
803 if (l -> lint) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
804 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
805 |
142
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
806 if (l -> len < 0 || l -> dlen < 0) |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
807 lwasm_register_error(as, l, E_EXPRESSION_NOT_CONST); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
808 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
809 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
810 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
811 PARSEFUNC(pseudo_parse_zmq) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
812 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
813 lw_expr_t expr; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
814 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
815 expr = lwasm_parse_expr(as, p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
816 if (!expr) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
817 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
818 lwasm_register_error(as, l, E_EXPRESSION_BAD); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
819 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
820 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
821 lwasm_save_expr(l, 0, expr); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
822 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
823 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
824 RESOLVEFUNC(pseudo_resolve_zmq) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
825 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
826 lw_expr_t expr; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
827 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
828 if (l -> len >= 0) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
829 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
830 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
831 expr = lwasm_fetch_expr(l, 0); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
832 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
833 if (lw_expr_istype(expr, lw_expr_type_int)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
834 { |
159
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
835 if (lw_expr_intval(expr) < 0) |
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
836 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
837 lwasm_register_error2(as, l, E_NEGATIVE_BLOCKSIZE, "(%d)", lw_expr_intval(expr)); |
159
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
838 l -> len = 0; |
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
839 return; |
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
840 } |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
841 l -> len = lw_expr_intval(expr) * 4; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
842 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
843 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
844 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
845 EMITFUNC(pseudo_emit_zmq) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
846 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
847 int i; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
848 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
849 if (l -> len < 0) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
850 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
851 lwasm_register_error(as, l, E_EXPRESSION_NOT_CONST); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
852 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
853 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
854 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
855 for (i = 0; i < l -> len; i++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
856 lwasm_emit(l, 0); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
857 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
858 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
859 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
860 PARSEFUNC(pseudo_parse_zmd) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
861 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
862 lw_expr_t expr; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
863 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
864 expr = lwasm_parse_expr(as, p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
865 if (!expr) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
866 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
867 lwasm_register_error(as, l, E_EXPRESSION_BAD); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
868 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
869 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
870 lwasm_save_expr(l, 0, expr); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
871 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
872 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
873 RESOLVEFUNC(pseudo_resolve_zmd) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
874 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
875 lw_expr_t expr; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
876 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
877 if (l -> len >= 0) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
878 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
879 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
880 expr = lwasm_fetch_expr(l, 0); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
881 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
882 if (lw_expr_istype(expr, lw_expr_type_int)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
883 { |
159
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
884 if (lw_expr_intval(expr) < 0) |
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
885 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
886 lwasm_register_error2(as, l, E_NEGATIVE_BLOCKSIZE, "(%d)", lw_expr_intval(expr)); |
159
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
887 l -> len = 0; |
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
888 return; |
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
889 } |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
890 l -> len = lw_expr_intval(expr) * 2; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
891 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
892 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
893 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
894 EMITFUNC(pseudo_emit_zmd) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
895 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
896 int i; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
897 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
898 if (l -> len < 0) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
899 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
900 lwasm_register_error(as, l, E_EXPRESSION_NOT_CONST); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
901 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
902 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
903 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
904 for (i = 0; i < l -> len; i++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
905 lwasm_emit(l, 0); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
906 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
907 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
908 PARSEFUNC(pseudo_parse_zmb) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
909 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
910 lw_expr_t expr; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
911 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
912 expr = lwasm_parse_expr(as, p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
913 if (!expr) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
914 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
915 lwasm_register_error(as, l, E_EXPRESSION_BAD); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
916 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
917 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
918 lwasm_save_expr(l, 0, expr); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
919 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
920 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
921 RESOLVEFUNC(pseudo_resolve_zmb) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
922 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
923 lw_expr_t expr; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
924 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
925 if (l -> len >= 0) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
926 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
927 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
928 expr = lwasm_fetch_expr(l, 0); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
929 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
930 if (lw_expr_istype(expr, lw_expr_type_int)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
931 { |
159
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
932 if (lw_expr_intval(expr) < 0) |
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
933 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
934 lwasm_register_error2(as, l, E_NEGATIVE_BLOCKSIZE, "(%d)", lw_expr_intval(expr)); |
159
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
935 l -> len = 0; |
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
936 return; |
8967eb907324
Trap negative sizes for [rz]m[bdq] and flag error
lost@l-w.ca
parents:
147
diff
changeset
|
937 } |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
938 l -> len = lw_expr_intval(expr); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
939 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
940 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
941 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
942 EMITFUNC(pseudo_emit_zmb) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
943 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
944 int i; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
945 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
946 if (l -> len < 0) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
947 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
948 lwasm_register_error(as, l, E_EXPRESSION_NOT_CONST); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
949 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
950 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
951 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
952 for (i = 0; i < l -> len; i++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
953 lwasm_emit(l, 0); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
954 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
955 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
956 PARSEFUNC(pseudo_parse_org) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
957 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
958 lw_expr_t e; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
959 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
960 l -> len = 0; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
961 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
962 e = lwasm_parse_expr(as, p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
963 if (!e) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
964 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
965 lwasm_register_error(as, l, E_OPERAND_BAD); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
966 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
967 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
968 |
142
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
969 lw_expr_destroy(l -> daddr); |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
970 l -> daddr = e; |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
971 |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
972 if (l -> inmod == 0) |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
973 { |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
974 lw_expr_destroy(l -> addr); |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
975 l -> addr = e; |
697bc543368c
Implement distinction between . and * for OS9 modules
lost@l-w.ca
parents:
135
diff
changeset
|
976 } |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
977 l -> len = 0; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
978 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
979 |
382 | 980 PARSEFUNC(pseudo_parse_reorg) |
981 { | |
982 lw_expr_t e = NULL; | |
983 | |
984 l -> len = 0; | |
985 | |
986 line_t *cl = l; | |
987 for (cl = cl -> prev; cl; cl = cl -> prev) | |
988 { | |
989 if (cl -> insn == -1) continue; | |
990 | |
991 if (!strcmp("org", instab[cl -> insn].opcode)) | |
992 { | |
993 if (cl -> prev) | |
994 { | |
995 e = lw_expr_copy(cl -> prev -> daddr); | |
996 break; | |
997 } | |
998 } | |
999 } | |
1000 | |
1001 if (!e) | |
1002 { | |
1003 lwasm_register_error(as, l, E_ORG_NOT_FOUND); | |
1004 return; | |
1005 } | |
1006 | |
1007 lw_expr_destroy(l -> daddr); | |
1008 l -> daddr = e; | |
1009 | |
1010 if (l -> inmod == 0) | |
1011 { | |
1012 lw_expr_destroy(l -> addr); | |
1013 l -> addr = e; | |
1014 } | |
1015 l -> len = 0; | |
1016 } | |
1017 | |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1018 PARSEFUNC(pseudo_parse_equ) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1019 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1020 lw_expr_t e; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1021 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1022 l -> len = 0; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1023 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1024 if (!(l -> sym)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1025 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
1026 lwasm_register_error(as, l, E_SYMBOL_MISSING); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1027 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1028 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1029 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1030 e = lwasm_parse_expr(as, p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1031 if (!e) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1032 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
1033 lwasm_register_error(as, l, E_OPERAND_BAD); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1034 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1035 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1036 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1037 register_symbol(as, l, l -> sym, e, symbol_flag_none); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1038 l -> symset = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1039 l -> dptr = lookup_symbol(as, l, l -> sym); |
88 | 1040 lw_expr_destroy(e); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1041 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1042 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1043 PARSEFUNC(pseudo_parse_set) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1044 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1045 lw_expr_t e; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1046 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1047 l -> len = 0; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1048 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1049 if (!(l -> sym)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1050 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
1051 lwasm_register_error(as, l, E_SYMBOL_MISSING); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1052 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1053 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1054 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1055 e = lwasm_parse_expr(as, p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1056 if (!e) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1057 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
1058 lwasm_register_error(as, l, E_OPERAND_BAD); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1059 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1060 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1061 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1062 register_symbol(as, l, l -> sym, e, symbol_flag_set); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1063 l -> symset = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1064 l -> dptr = lookup_symbol(as, l, l -> sym); |
88 | 1065 lw_expr_destroy(e); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1066 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1067 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1068 PARSEFUNC(pseudo_parse_setdp) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1069 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1070 lw_expr_t e; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1071 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1072 l -> len = 0; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1073 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1074 if (as -> output_format == OUTPUT_OBJ) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1075 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
1076 lwasm_register_error(as, l, E_SETDP_INVALID); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1077 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1078 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1079 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1080 e = lwasm_parse_expr(as, p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1081 if (!e) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1082 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
1083 lwasm_register_error(as, l, E_OPERAND_BAD); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1084 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1085 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1086 |
38
7e92484cfbc3
Caused expressions used in setdp and conditionals to be reduced on pass 1
lost@l-w.ca
parents:
10
diff
changeset
|
1087 // try simplifying the expression and see if it turns into an int |
7e92484cfbc3
Caused expressions used in setdp and conditionals to be reduced on pass 1
lost@l-w.ca
parents:
10
diff
changeset
|
1088 lwasm_reduce_expr(as, e); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1089 if (!lw_expr_istype(e, lw_expr_type_int)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1090 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
1091 lwasm_register_error(as, l, E_SETDP_NOT_CONST); |
88 | 1092 lw_expr_destroy(e); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1093 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1094 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1095 l -> dpval = lw_expr_intval(e) & 0xff; |
88 | 1096 lw_expr_destroy(e); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1097 l -> dshow = l -> dpval; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1098 l -> dsize = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1099 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1100 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1101 PARSEFUNC(pseudo_parse_ifp1) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1102 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1103 l -> len = 0; |
219 | 1104 l -> hideline = 1; |
474
74d0c394666e
Add "noexpandcond" pragma (cleans up listings)
William Astle <lost@l-w.ca>
parents:
443
diff
changeset
|
1105 l -> hidecond = 1; |
74d0c394666e
Add "noexpandcond" pragma (cleans up listings)
William Astle <lost@l-w.ca>
parents:
443
diff
changeset
|
1106 |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1107 if (as -> skipcond && !(as -> skipmacro)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1108 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1109 as -> skipcount++; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1110 skip_operand(p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1111 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1112 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1113 |
559
ddc7b05a5675
Add --no-warn=ifp1 flag to suppress warnings about ifp1 and ipf2
William Astle <lost@l-w.ca>
parents:
543
diff
changeset
|
1114 if ((as -> nowarn_flags & NOWARN_IFP1) == 0) |
ddc7b05a5675
Add --no-warn=ifp1 flag to suppress warnings about ifp1 and ipf2
William Astle <lost@l-w.ca>
parents:
543
diff
changeset
|
1115 lwasm_register_error2(as, l, W_NOT_SUPPORTED, "%s", "IFP1"); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1116 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1117 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1118 PARSEFUNC(pseudo_parse_ifp2) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1119 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1120 l -> len = 0; |
219 | 1121 l -> hideline = 1; |
474
74d0c394666e
Add "noexpandcond" pragma (cleans up listings)
William Astle <lost@l-w.ca>
parents:
443
diff
changeset
|
1122 l -> hidecond = 1; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1123 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1124 if (as -> skipcond && !(as -> skipmacro)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1125 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1126 as -> skipcount++; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1127 skip_operand(p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1128 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1129 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1130 |
559
ddc7b05a5675
Add --no-warn=ifp1 flag to suppress warnings about ifp1 and ipf2
William Astle <lost@l-w.ca>
parents:
543
diff
changeset
|
1131 if ((as -> nowarn_flags & NOWARN_IFP1) == 0) |
ddc7b05a5675
Add --no-warn=ifp1 flag to suppress warnings about ifp1 and ipf2
William Astle <lost@l-w.ca>
parents:
543
diff
changeset
|
1132 lwasm_register_error2(as, l, W_NOT_SUPPORTED, "%s", "IFP2"); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1133 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1134 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1135 PARSEFUNC(pseudo_parse_ifeq) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1136 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1137 lw_expr_t e; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1138 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1139 l -> len = 0; |
219 | 1140 l -> hideline = 1; |
474
74d0c394666e
Add "noexpandcond" pragma (cleans up listings)
William Astle <lost@l-w.ca>
parents:
443
diff
changeset
|
1141 l -> hidecond = 1; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1142 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1143 if (as -> skipcond && !(as -> skipmacro)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1144 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1145 as -> skipcount++; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1146 skip_operand(p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1147 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1148 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1149 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1150 e = lwasm_parse_cond(as, p); |
208
fa835b780ffb
Fix crash on conditionals with undefined symbols
William Astle <lost@l-w.ca>
parents:
186
diff
changeset
|
1151 if (e) |
fa835b780ffb
Fix crash on conditionals with undefined symbols
William Astle <lost@l-w.ca>
parents:
186
diff
changeset
|
1152 lwasm_reduce_expr(as, e); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1153 if (e && lw_expr_intval(e) != 0) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1154 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1155 as -> skipcond = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1156 as -> skipcount = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1157 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1158 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1159 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1160 PARSEFUNC(pseudo_parse_ifne) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1161 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1162 lw_expr_t e; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1163 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1164 l -> len = 0; |
219 | 1165 l -> hideline = 1; |
474
74d0c394666e
Add "noexpandcond" pragma (cleans up listings)
William Astle <lost@l-w.ca>
parents:
443
diff
changeset
|
1166 l -> hidecond = 1; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1167 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1168 if (as -> skipcond && !(as -> skipmacro)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1169 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1170 as -> skipcount++; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1171 skip_operand(p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1172 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1173 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1174 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1175 e = lwasm_parse_cond(as, p); |
208
fa835b780ffb
Fix crash on conditionals with undefined symbols
William Astle <lost@l-w.ca>
parents:
186
diff
changeset
|
1176 if (e) |
fa835b780ffb
Fix crash on conditionals with undefined symbols
William Astle <lost@l-w.ca>
parents:
186
diff
changeset
|
1177 lwasm_reduce_expr(as, e); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1178 if (e && lw_expr_intval(e) == 0) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1179 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1180 as -> skipcond = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1181 as -> skipcount = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1182 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1183 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1184 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1185 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1186 PARSEFUNC(pseudo_parse_ifgt) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1187 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1188 lw_expr_t e; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1189 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1190 l -> len = 0; |
219 | 1191 l -> hideline = 1; |
474
74d0c394666e
Add "noexpandcond" pragma (cleans up listings)
William Astle <lost@l-w.ca>
parents:
443
diff
changeset
|
1192 l -> hidecond = 1; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1193 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1194 if (as -> skipcond && !(as -> skipmacro)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1195 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1196 as -> skipcount++; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1197 skip_operand(p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1198 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1199 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1200 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1201 e = lwasm_parse_cond(as, p); |
208
fa835b780ffb
Fix crash on conditionals with undefined symbols
William Astle <lost@l-w.ca>
parents:
186
diff
changeset
|
1202 if (e) |
fa835b780ffb
Fix crash on conditionals with undefined symbols
William Astle <lost@l-w.ca>
parents:
186
diff
changeset
|
1203 lwasm_reduce_expr(as, e); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1204 if (e && lw_expr_intval(e) <= 0) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1205 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1206 as -> skipcond = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1207 as -> skipcount = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1208 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1209 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1210 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1211 PARSEFUNC(pseudo_parse_ifge) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1212 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1213 lw_expr_t e; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1214 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1215 l -> len = 0; |
219 | 1216 l -> hideline = 1; |
474
74d0c394666e
Add "noexpandcond" pragma (cleans up listings)
William Astle <lost@l-w.ca>
parents:
443
diff
changeset
|
1217 l -> hidecond = 1; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1218 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1219 if (as -> skipcond && !(as -> skipmacro)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1220 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1221 as -> skipcount++; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1222 skip_operand(p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1223 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1224 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1225 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1226 e = lwasm_parse_cond(as, p); |
208
fa835b780ffb
Fix crash on conditionals with undefined symbols
William Astle <lost@l-w.ca>
parents:
186
diff
changeset
|
1227 if (e) |
fa835b780ffb
Fix crash on conditionals with undefined symbols
William Astle <lost@l-w.ca>
parents:
186
diff
changeset
|
1228 lwasm_reduce_expr(as, e); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1229 if (e && lw_expr_intval(e) < 0) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1230 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1231 as -> skipcond = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1232 as -> skipcount = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1233 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1234 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1235 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1236 PARSEFUNC(pseudo_parse_iflt) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1237 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1238 lw_expr_t e; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1239 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1240 l -> len = 0; |
219 | 1241 l -> hideline = 1; |
474
74d0c394666e
Add "noexpandcond" pragma (cleans up listings)
William Astle <lost@l-w.ca>
parents:
443
diff
changeset
|
1242 l -> hidecond = 1; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1243 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1244 if (as -> skipcond && !(as -> skipmacro)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1245 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1246 as -> skipcount++; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1247 skip_operand(p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1248 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1249 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1250 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1251 e = lwasm_parse_cond(as, p); |
208
fa835b780ffb
Fix crash on conditionals with undefined symbols
William Astle <lost@l-w.ca>
parents:
186
diff
changeset
|
1252 if (e) |
fa835b780ffb
Fix crash on conditionals with undefined symbols
William Astle <lost@l-w.ca>
parents:
186
diff
changeset
|
1253 lwasm_reduce_expr(as, e); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1254 if (e && lw_expr_intval(e) >= 0) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1255 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1256 as -> skipcond = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1257 as -> skipcount = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1258 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1259 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1260 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1261 PARSEFUNC(pseudo_parse_ifle) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1262 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1263 lw_expr_t e; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1264 |
219 | 1265 l -> hideline = 1; |
474
74d0c394666e
Add "noexpandcond" pragma (cleans up listings)
William Astle <lost@l-w.ca>
parents:
443
diff
changeset
|
1266 l -> hidecond = 1; |
74d0c394666e
Add "noexpandcond" pragma (cleans up listings)
William Astle <lost@l-w.ca>
parents:
443
diff
changeset
|
1267 |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1268 l -> len = 0; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1269 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1270 if (as -> skipcond && !(as -> skipmacro)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1271 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1272 as -> skipcount++; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1273 skip_operand(p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1274 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1275 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1276 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1277 e = lwasm_parse_cond(as, p); |
208
fa835b780ffb
Fix crash on conditionals with undefined symbols
William Astle <lost@l-w.ca>
parents:
186
diff
changeset
|
1278 if (e) |
fa835b780ffb
Fix crash on conditionals with undefined symbols
William Astle <lost@l-w.ca>
parents:
186
diff
changeset
|
1279 lwasm_reduce_expr(as, e); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1280 if (e && lw_expr_intval(e) > 0) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1281 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1282 as -> skipcond = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1283 as -> skipcount = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1284 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1285 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1286 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1287 PARSEFUNC(pseudo_parse_endc) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1288 { |
219 | 1289 l -> hideline = 1; |
474
74d0c394666e
Add "noexpandcond" pragma (cleans up listings)
William Astle <lost@l-w.ca>
parents:
443
diff
changeset
|
1290 l -> hidecond = 1; |
74d0c394666e
Add "noexpandcond" pragma (cleans up listings)
William Astle <lost@l-w.ca>
parents:
443
diff
changeset
|
1291 |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1292 l -> len = 0; |
145 | 1293 skip_operand(p); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1294 if (as -> skipcond && !(as -> skipmacro)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1295 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1296 as -> skipcount--; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1297 if (as -> skipcount <= 0) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1298 as -> skipcond = 0; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1299 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1300 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1301 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1302 PARSEFUNC(pseudo_parse_else) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1303 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1304 l -> len = 0; |
474
74d0c394666e
Add "noexpandcond" pragma (cleans up listings)
William Astle <lost@l-w.ca>
parents:
443
diff
changeset
|
1305 l -> hidecond = 1; |
219 | 1306 l -> hideline = 1; |
217
f87c86668d6b
Fix handling of comments on ELSE lines
William Astle <lost@l-w.ca>
parents:
208
diff
changeset
|
1307 skip_operand(p); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1308 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1309 if (as -> skipmacro) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1310 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1311 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1312 if (as -> skipcond) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1313 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1314 if (as -> skipcount == 1) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1315 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1316 as -> skipcount = 0; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1317 as -> skipcond = 0; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1318 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1319 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1320 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1321 as -> skipcond = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1322 as -> skipcount = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1323 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1324 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1325 PARSEFUNC(pseudo_parse_ifdef) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1326 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1327 char *sym; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1328 int i; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1329 struct symtabe *s; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1330 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1331 l -> len = 0; |
219 | 1332 l -> hideline = 1; |
474
74d0c394666e
Add "noexpandcond" pragma (cleans up listings)
William Astle <lost@l-w.ca>
parents:
443
diff
changeset
|
1333 l -> hidecond = 1; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1334 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1335 if (as -> skipcond && !(as -> skipmacro)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1336 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1337 as -> skipcount++; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1338 skip_operand(p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1339 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1340 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1341 |
132
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
1342 again: |
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
1343 for (i = 0; (*p)[i] && !isspace((*p)[i]) && (*p)[i] != '|' && (*p)[i] != '&'; i++) |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1344 /* do nothing */ ; |
561
a6a9d46f071f
Make ifdef and ifndef complain if they aren't given a symbol
William Astle <lost@l-w.ca>
parents:
559
diff
changeset
|
1345 |
a6a9d46f071f
Make ifdef and ifndef complain if they aren't given a symbol
William Astle <lost@l-w.ca>
parents:
559
diff
changeset
|
1346 if (i == 0) |
a6a9d46f071f
Make ifdef and ifndef complain if they aren't given a symbol
William Astle <lost@l-w.ca>
parents:
559
diff
changeset
|
1347 { |
a6a9d46f071f
Make ifdef and ifndef complain if they aren't given a symbol
William Astle <lost@l-w.ca>
parents:
559
diff
changeset
|
1348 lwasm_register_error(as, l, E_OPERAND_BAD); |
a6a9d46f071f
Make ifdef and ifndef complain if they aren't given a symbol
William Astle <lost@l-w.ca>
parents:
559
diff
changeset
|
1349 return; |
a6a9d46f071f
Make ifdef and ifndef complain if they aren't given a symbol
William Astle <lost@l-w.ca>
parents:
559
diff
changeset
|
1350 } |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1351 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1352 sym = lw_strndup(*p, i); |
84 | 1353 (*p) += i; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1354 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1355 s = lookup_symbol(as, l, sym); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1356 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1357 lw_free(sym); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1358 |
133 | 1359 if (!s) |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1360 { |
133 | 1361 if (**p == '|') |
1362 { | |
1363 (*p)++; | |
1364 goto again; | |
1365 } | |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1366 as -> skipcond = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1367 as -> skipcount = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1368 } |
133 | 1369 skip_operand(p); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1370 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1371 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1372 PARSEFUNC(pseudo_parse_ifndef) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1373 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1374 char *sym; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1375 int i; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1376 struct symtabe *s; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1377 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1378 l -> len = 0; |
219 | 1379 l -> hideline = 1; |
474
74d0c394666e
Add "noexpandcond" pragma (cleans up listings)
William Astle <lost@l-w.ca>
parents:
443
diff
changeset
|
1380 l -> hidecond = 1; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1381 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1382 if (as -> skipcond && !(as -> skipmacro)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1383 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1384 as -> skipcount++; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1385 skip_operand(p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1386 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1387 } |
132
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
1388 for (i = 0; (*p)[i] && !isspace((*p)[i]) && (*p)[i] != '&' && (*p)[i] != '|'; i++) |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1389 /* do nothing */ ; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1390 |
561
a6a9d46f071f
Make ifdef and ifndef complain if they aren't given a symbol
William Astle <lost@l-w.ca>
parents:
559
diff
changeset
|
1391 if (i == 0) |
a6a9d46f071f
Make ifdef and ifndef complain if they aren't given a symbol
William Astle <lost@l-w.ca>
parents:
559
diff
changeset
|
1392 { |
a6a9d46f071f
Make ifdef and ifndef complain if they aren't given a symbol
William Astle <lost@l-w.ca>
parents:
559
diff
changeset
|
1393 lwasm_register_error(as, l, E_OPERAND_BAD); |
a6a9d46f071f
Make ifdef and ifndef complain if they aren't given a symbol
William Astle <lost@l-w.ca>
parents:
559
diff
changeset
|
1394 return; |
a6a9d46f071f
Make ifdef and ifndef complain if they aren't given a symbol
William Astle <lost@l-w.ca>
parents:
559
diff
changeset
|
1395 } |
a6a9d46f071f
Make ifdef and ifndef complain if they aren't given a symbol
William Astle <lost@l-w.ca>
parents:
559
diff
changeset
|
1396 |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1397 sym = lw_strndup(*p, i); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1398 (*p) += i; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1399 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1400 s = lookup_symbol(as, l, sym); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1401 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1402 lw_free(sym); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1403 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1404 if (s) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1405 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1406 as -> skipcond = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1407 as -> skipcount = 1; |
132
4cf44ff89b08
Added DTS and DTB pseudo ops; initial attempt to allow ifdef SYM1|SYM2
lost@l-w.ca
parents:
114
diff
changeset
|
1408 return; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1409 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1410 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1411 |
384
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1412 PARSEFUNC(pseudo_parse_ifpragma) |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1413 { |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1414 char *pstr; |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1415 int i; |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1416 int pragma; |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1417 int compare; |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1418 |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1419 l -> len = 0; |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1420 l -> hideline = 1; |
474
74d0c394666e
Add "noexpandcond" pragma (cleans up listings)
William Astle <lost@l-w.ca>
parents:
443
diff
changeset
|
1421 l -> hidecond = 1; |
384
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1422 |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1423 if (as -> skipcond && !(as -> skipmacro)) |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1424 { |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1425 as -> skipcount++; |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1426 skip_operand(p); |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1427 return; |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1428 } |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1429 |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1430 again: |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1431 for (i = 0; (*p)[i] && !isspace((*p)[i]) && (*p)[i] != '|' && (*p)[i] != '&'; i++) |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1432 /* do nothing */; |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1433 |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1434 pstr = lw_strndup(*p, i); |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1435 (*p) += i; |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1436 |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1437 pragma = parse_pragma_helper(pstr); |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1438 if (!pragma) lwasm_register_error(as, l, E_PRAGMA_UNRECOGNIZED); |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1439 |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1440 lw_free(pstr); |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1441 |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1442 if (pragma & PRAGMA_CLEARBIT) |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1443 { |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1444 pragma &= ~PRAGMA_CLEARBIT; /* strip off flag bit */ |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1445 compare = l -> pragmas & pragma ? 0 : 1; |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1446 } |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1447 else |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1448 { |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1449 compare = l -> pragmas & pragma; |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1450 } |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1451 |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1452 if (!compare) |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1453 { |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1454 if (**p == '|') |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1455 { |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1456 (*p)++; |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1457 goto again; |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1458 } |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1459 as -> skipcond = 1; |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1460 as -> skipcount = 1; |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1461 } |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1462 skip_operand(p); |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1463 } |
6ee9c67a0f8d
Add conditional for testing if a pragma is in effect
William Astle <lost@l-w.ca>
parents:
382
diff
changeset
|
1464 |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1465 PARSEFUNC(pseudo_parse_error) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1466 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
1467 lwasm_register_error2(as, l, E_USER_SPECIFIED, "%s", *p); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1468 skip_operand(p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1469 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1470 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1471 PARSEFUNC(pseudo_parse_warning) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1472 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
1473 lwasm_register_error2(as, l, W_USER_SPECIFIED, "%s", *p); |
225
823560a8c251
Prevent infinite loop due to warning directive
William Astle <lost@l-w.ca>
parents:
224
diff
changeset
|
1474 l -> len = 0; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1475 skip_operand(p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1476 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1477 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1478 PARSEFUNC(pseudo_parse_includebin) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1479 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1480 char *fn, *p2; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1481 int delim = 0; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1482 FILE *fp; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1483 long flen; |
224
3864d96ee8c7
Make unicorns notice referenced files better
William Astle <lost@l-w.ca>
parents:
219
diff
changeset
|
1484 char *rfn; |
564
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1485 lw_expr_t e, e1; |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1486 |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1487 if (!**p) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1488 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
1489 lwasm_register_error(as, l, E_FILENAME_MISSING); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1490 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1491 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1492 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1493 if (**p == '"' || **p == '\'') |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1494 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1495 delim = **p; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1496 (*p)++; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1497 |
63 | 1498 for (p2 = *p; *p2 && (*p2 != delim); p2++) |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1499 /* do nothing */ ; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1500 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1501 else |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1502 { |
567
71ba873a0ec6
Allow non-quoted file names to have offset/length for includebin
William Astle <lost@l-w.ca>
parents:
566
diff
changeset
|
1503 for (p2 = *p; *p2 && *p2 != ',' && !isspace(*p2); p2++) |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1504 /* do nothing */ ; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1505 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1506 fn = lw_strndup(*p, p2 - *p); |
62
5b10ff307463
Fixed problem with filename handling in includebin
lost@l-w.ca
parents:
58
diff
changeset
|
1507 *p = p2; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1508 if (delim && **p) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1509 (*p)++; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1510 |
224
3864d96ee8c7
Make unicorns notice referenced files better
William Astle <lost@l-w.ca>
parents:
219
diff
changeset
|
1511 fp = input_open_standalone(as, fn, &rfn); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1512 if (!fp) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1513 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
1514 lwasm_register_error(as, l, E_FILE_OPEN); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1515 lw_free(fn); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1516 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1517 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1518 |
224
3864d96ee8c7
Make unicorns notice referenced files better
William Astle <lost@l-w.ca>
parents:
219
diff
changeset
|
1519 l -> lstr = rfn; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1520 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1521 fseek(fp, 0, SEEK_END); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1522 flen = ftell(fp); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1523 fclose(fp); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1524 |
568
b549a3a417a9
Fix some additional glitches in implementation of includebin offset/length
William Astle <lost@l-w.ca>
parents:
567
diff
changeset
|
1525 l -> lint2 = flen; |
564
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1526 |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1527 if (**p == ',') |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1528 { |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1529 (*p)++; |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1530 e = lwasm_parse_expr(as, p); |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1531 |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1532 if (e) |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1533 lwasm_save_expr(l, 0, e); |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1534 |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1535 if (**p == ',') |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1536 { |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1537 (*p)++; |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1538 e1 = lwasm_parse_expr(as, p); |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1539 |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1540 if (e1) |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1541 lwasm_save_expr(l, 1, e1); |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1542 } |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1543 } |
568
b549a3a417a9
Fix some additional glitches in implementation of includebin offset/length
William Astle <lost@l-w.ca>
parents:
567
diff
changeset
|
1544 else |
b549a3a417a9
Fix some additional glitches in implementation of includebin offset/length
William Astle <lost@l-w.ca>
parents:
567
diff
changeset
|
1545 { |
b549a3a417a9
Fix some additional glitches in implementation of includebin offset/length
William Astle <lost@l-w.ca>
parents:
567
diff
changeset
|
1546 l -> len = flen; // length is resolved |
b549a3a417a9
Fix some additional glitches in implementation of includebin offset/length
William Astle <lost@l-w.ca>
parents:
567
diff
changeset
|
1547 } |
564
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1548 } |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1549 |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1550 RESOLVEFUNC(pseudo_resolve_includebin) |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1551 { |
571
2ac2d447a2fa
Remove unused variable definition.
William Astle <lost@l-w.ca>
parents:
568
diff
changeset
|
1552 lw_expr_t e, e1; |
564
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1553 int i = 0, i1; |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1554 |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1555 e = lwasm_fetch_expr(l, 0); |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1556 e1 = lwasm_fetch_expr(l, 1); |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1557 |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1558 // if offset and/or length specified, make sure they've resolved |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1559 // before we do anything |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1560 if (e && !lw_expr_istype(e, lw_expr_type_int)) |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1561 return; |
566
d746a52e00db
Correct typo in previous commit for includebin
William Astle <lost@l-w.ca>
parents:
564
diff
changeset
|
1562 if (e1 && !lw_expr_istype(e, lw_expr_type_int)) |
564
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1563 return; |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1564 if (e != NULL) |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1565 { |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1566 i = lw_expr_intval(e); |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1567 |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1568 if (i < 0) |
568
b549a3a417a9
Fix some additional glitches in implementation of includebin offset/length
William Astle <lost@l-w.ca>
parents:
567
diff
changeset
|
1569 i = l -> lint2 + i; |
564
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1570 } |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1571 |
568
b549a3a417a9
Fix some additional glitches in implementation of includebin offset/length
William Astle <lost@l-w.ca>
parents:
567
diff
changeset
|
1572 i1 = l -> lint2 - i; |
564
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1573 |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1574 e1 = lwasm_fetch_expr(l, 1); |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1575 |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1576 if (e1 != NULL) |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1577 { |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1578 i1 = lw_expr_intval(e1); |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1579 } |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1580 |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1581 if( i < 0 ) |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1582 { |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1583 /* starting before file */ |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1584 lwasm_register_error(as, l, E_INCLUDEBIN_ILL_START); |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1585 return; |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1586 } |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1587 |
568
b549a3a417a9
Fix some additional glitches in implementation of includebin offset/length
William Astle <lost@l-w.ca>
parents:
567
diff
changeset
|
1588 if (i > l -> lint2) |
564
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1589 { |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1590 /* starts past end of file */ |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1591 lwasm_register_error(as, l, E_INCLUDEBIN_ILL_START); |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1592 return; |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1593 } |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1594 |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1595 if (i1 < 0) |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1596 { |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1597 /* length is negative */ |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1598 lwasm_register_error(as, l, E_INCLUDEBIN_ILL_LENGTH); |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1599 return; |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1600 } |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1601 |
568
b549a3a417a9
Fix some additional glitches in implementation of includebin offset/length
William Astle <lost@l-w.ca>
parents:
567
diff
changeset
|
1602 if (i + i1 > l -> lint2) |
564
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1603 { |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1604 /* read past end of file */ |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1605 lwasm_register_error(as, l, E_INCLUDEBIN_ILL_LENGTH); |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1606 return; |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1607 } |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1608 |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1609 |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1610 l -> lint = i; // pass forward offset |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1611 l -> len = i1; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1612 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1613 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1614 EMITFUNC(pseudo_emit_includebin) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1615 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1616 FILE *fp; |
564
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1617 int c, i; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1618 |
349
b62af915c2cc
Fix includebin to use binary mode when emitting the contents of the file.
William Astle <lost@l-w.ca>
parents:
281
diff
changeset
|
1619 fp = fopen(l -> lstr, "rb"); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1620 if (!fp) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1621 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
1622 lwasm_register_error2(as, l, E_FILE_OPEN, "%s", "(emit)!"); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1623 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1624 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1625 |
564
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1626 // apply the specified offset |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1627 fseek(fp, l -> lint, SEEK_SET); |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1628 |
87f904e2b304
Add offset and length operands (optional) to includebin
William Astle <lost@l-w.ca>
parents:
561
diff
changeset
|
1629 for (i=0; i < l -> len; i++) |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1630 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1631 c = fgetc(fp); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1632 if (c == EOF) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1633 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1634 fclose(fp); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1635 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1636 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1637 lwasm_emit(l, c); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1638 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1639 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1640 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1641 PARSEFUNC(pseudo_parse_include) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1642 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1643 char *fn, *p2; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1644 char *p3; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1645 int delim = 0; |
10
127e5b1e01c0
Removed use of asprintf() and added Makefile options for cross compiling; also a bugfix with sizeof{} in lwasm
lost@l-w.ca
parents:
2
diff
changeset
|
1646 int len; |
41 | 1647 char buf[110]; |
1648 | |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1649 if (!**p) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1650 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
1651 lwasm_register_error(as, l, E_FILENAME_MISSING); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1652 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1653 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1654 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1655 if (**p == '"' || **p == '\'') |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1656 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1657 delim = **p; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1658 (*p)++; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1659 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1660 for (p2 = *p; *p2 && *p2 != delim; p2++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1661 /* do nothing */ ; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1662 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1663 else |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1664 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1665 for (p2 = *p; *p2 && !isspace(*p2); p2++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1666 /* do nothing */ ; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1667 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1668 fn = lw_strndup(*p, p2 - *p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1669 (*p) = p2; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1670 if (delim && **p) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1671 (*p)++; |
41 | 1672 |
1673 /* add a book-keeping entry for line numbers */ | |
1674 snprintf(buf, 100, "\001\001SETLINENO %d\n", l -> lineno + 1); | |
1675 input_openstring(as, "INTERNAL", buf); | |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1676 |
10
127e5b1e01c0
Removed use of asprintf() and added Makefile options for cross compiling; also a bugfix with sizeof{} in lwasm
lost@l-w.ca
parents:
2
diff
changeset
|
1677 len = strlen(fn) + 8; |
127e5b1e01c0
Removed use of asprintf() and added Makefile options for cross compiling; also a bugfix with sizeof{} in lwasm
lost@l-w.ca
parents:
2
diff
changeset
|
1678 p3 = lw_alloc(len + 1); |
127e5b1e01c0
Removed use of asprintf() and added Makefile options for cross compiling; also a bugfix with sizeof{} in lwasm
lost@l-w.ca
parents:
2
diff
changeset
|
1679 sprintf(p3, "include:%s", fn); |
219 | 1680 as -> fileerr = 0; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1681 input_open(as, p3); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1682 lw_free(p3); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1683 |
219 | 1684 if (as -> fileerr == 0) |
1685 l -> hideline = 1; | |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1686 l -> len = 0; |
93
5bf9edabd661
Squashed the remaining memory leaks revealed by valgrind
lost@l-w.ca
parents:
88
diff
changeset
|
1687 lw_free(fn); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1688 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1689 |
519
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1690 PARSEFUNC(pseudo_parse_includestr) |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1691 { |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1692 char *str; |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1693 char buf[110]; |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1694 |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1695 l -> len = 0; |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1696 |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1697 if (!**p) |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1698 { |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1699 // no operand - include nothing |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1700 return; |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1701 } |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1702 |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1703 str = lwasm_parse_general_string(l, p); |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1704 if (!str) |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1705 { |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1706 // string parsing failed |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1707 return; |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1708 } |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1709 if (*str == '\0') |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1710 { |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1711 // empty string; don't do anything |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1712 lw_free(str); |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1713 return; |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1714 } |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1715 |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1716 /* add a book-keeping entry for line numbers */ |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1717 snprintf(buf, 100, "\001\001SETLINENO %d\n", l -> lineno + 1); |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1718 input_openstring(as, "INTERNAL", buf); |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1719 |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1720 /* add the constructed string to the input */ |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1721 input_openstring(as, "INCLUDESTR", str); |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1722 lw_free(str); |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1723 } |
724bcc4508bc
Add SETSTR/INCLUDESTR for some basic code building
William Astle <lost@l-w.ca>
parents:
516
diff
changeset
|
1724 |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1725 PARSEFUNC(pseudo_parse_align) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1726 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1727 lw_expr_t e; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1728 if (!**p) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1729 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
1730 lwasm_register_error(as, l, E_OPERAND_BAD); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1731 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1732 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1733 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1734 e = lwasm_parse_expr(as, p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1735 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1736 if (!e) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1737 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
1738 lwasm_register_error(as, l, E_OPERAND_BAD); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1739 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1740 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1741 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1742 lwasm_save_expr(l, 0, e); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1743 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1744 if (**p == ',') |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1745 { |
114
707eda49ad60
Fix parsing padding argument for align pseudo op
lost@l-w.ca
parents:
93
diff
changeset
|
1746 (*p)++; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1747 e = lwasm_parse_expr(as, p); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1748 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1749 else |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1750 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1751 e = lw_expr_build(lw_expr_type_int, 0); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1752 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1753 if (!e) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1754 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
1755 lwasm_register_error(as, l, E_PADDING_BAD); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1756 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1757 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1758 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1759 lwasm_save_expr(l, 1, e); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1760 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1761 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1762 RESOLVEFUNC(pseudo_resolve_align) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1763 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1764 lw_expr_t e; |
264
346966cffeef
Clean up various warnings when building under -Wall
William Astle <lost@l-w.ca>
parents:
251
diff
changeset
|
1765 int align = 1; |
266
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1766 lw_expr_t te; |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1767 int a; |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1768 |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1769 e = lwasm_fetch_expr(l, 0); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1770 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1771 if (lw_expr_istype(e, lw_expr_type_int)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1772 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1773 align = lw_expr_intval(e); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1774 if (align < 1) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1775 { |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
1776 lwasm_register_error(as, l, E_ALIGNMENT_INVALID); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1777 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1778 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1779 } |
266
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1780 else |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1781 { |
266
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1782 return; |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1783 } |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1784 |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1785 |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1786 te = lw_expr_copy(l -> addr); |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1787 as -> exportcheck = 1; |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1788 lwasm_reduce_expr(as, te); |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1789 as -> exportcheck = 0; |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1790 |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1791 if (lw_expr_istype(te, lw_expr_type_int)) |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1792 { |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1793 a = lw_expr_intval(te); |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1794 } |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1795 else |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1796 { |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1797 a = -1; |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1798 } |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1799 lw_expr_destroy(te); |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1800 |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1801 if (a >= 0) |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1802 { |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1803 if (a % align == 0) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1804 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1805 l -> len = 0; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1806 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1807 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1808 l -> len = align - (a % align); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1809 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1810 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1811 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1812 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1813 EMITFUNC(pseudo_emit_align) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1814 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1815 lw_expr_t e; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1816 int i; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1817 |
266
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1818 if (l -> csect && (l -> csect -> flags & (section_flag_bss | section_flag_constant))) |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1819 return; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1820 e = lwasm_fetch_expr(l, 1); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1821 for (i = 0; i < l -> len; i++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1822 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1823 lwasm_emitexpr(l, e, 1); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1824 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1825 } |
55 | 1826 |
186 | 1827 PARSEFUNC(pseudo_parse_fill) |
1828 { | |
1829 lw_expr_t e, e1; | |
1830 if (!**p) | |
1831 { | |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
1832 lwasm_register_error(as, l, E_OPERAND_BAD); |
186 | 1833 return; |
1834 } | |
1835 | |
1836 e1 = lwasm_parse_expr(as, p); | |
1837 if (**p != ',') | |
1838 { | |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
1839 lwasm_register_error(as, l, E_OPERAND_BAD); |
186 | 1840 return; |
1841 } | |
1842 (*p)++; | |
1843 e = lwasm_parse_expr(as, p); | |
1844 | |
1845 if (!e) | |
1846 { | |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
1847 lwasm_register_error(as, l, E_OPERAND_BAD); |
186 | 1848 return; |
1849 } | |
1850 | |
1851 lwasm_save_expr(l, 0, e); | |
1852 lwasm_save_expr(l, 1, e1); | |
1853 | |
1854 if (!e1) | |
1855 { | |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
1856 lwasm_register_error(as, l, E_PADDING_BAD); |
186 | 1857 return; |
1858 } | |
1859 } | |
1860 | |
1861 RESOLVEFUNC(pseudo_resolve_fill) | |
1862 { | |
266
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1863 lw_expr_t e, te; |
264
346966cffeef
Clean up various warnings when building under -Wall
William Astle <lost@l-w.ca>
parents:
251
diff
changeset
|
1864 int align = 1; |
186 | 1865 |
1866 e = lwasm_fetch_expr(l, 0); | |
1867 | |
266
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1868 te = lw_expr_copy(e); |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1869 as -> exportcheck = 1; |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1870 lwasm_reduce_expr(as, te); |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1871 as -> exportcheck = 0; |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1872 |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1873 if (lw_expr_istype(te, lw_expr_type_int)) |
186 | 1874 { |
266
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1875 align = lw_expr_intval(te); |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1876 if (align < 0) |
186 | 1877 { |
266
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1878 lw_expr_destroy(te); |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
1879 lwasm_register_error(as, l, E_FILL_INVALID); |
186 | 1880 return; |
1881 } | |
1882 } | |
266
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1883 else |
186 | 1884 { |
266
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1885 lw_expr_destroy(te); |
186 | 1886 return; |
1887 } | |
266
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1888 lw_expr_destroy(te); |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1889 |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1890 l -> len = align; |
186 | 1891 } |
1892 | |
1893 EMITFUNC(pseudo_emit_fill) | |
1894 { | |
1895 lw_expr_t e; | |
1896 int i; | |
1897 | |
266
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1898 /* don't emit anything in bss */ |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1899 if (l -> csect && (l -> csect -> flags & (section_flag_bss | section_flag_constant))) |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1900 return; |
35c051bffbff
Make fill and align do something useful in the object target
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
1901 |
186 | 1902 e = lwasm_fetch_expr(l, 1); |
1903 for (i = 0; i < l -> len; i++) | |
1904 { | |
1905 lwasm_emitexpr(l, e, 1); | |
1906 } | |
1907 } | |
1908 | |
55 | 1909 /* string conditional argument parser */ |
1910 /* | |
1911 argument syntax: | |
1912 | |
1913 a bare word ended by whitespace, comma, or NUL | |
1914 a double quote delimited string containing arbitrary printable characters | |
1915 a single quote delimited string containing arbitrary printable characters | |
1916 | |
1917 In a double quoted string, a double quote cannot be represented. | |
1918 In a single quoted string, a single quote cannot be represented. | |
1919 | |
1920 */ | |
1921 char *strcond_parsearg(char **p) | |
1922 { | |
1923 char *arg; | |
1924 char *tstr; | |
1925 int i; | |
1926 tstr = *p; | |
1927 | |
1928 if (!**p || isspace(**p)) | |
1929 { | |
1930 return lw_strdup(""); | |
1931 } | |
1932 | |
1933 if (*tstr == '"') | |
1934 { | |
1935 // double quote delim | |
1936 tstr++; | |
1937 for (i = 0; tstr[i] && tstr[i] != '"'; i++) | |
1938 /* do nothing */ ; | |
1939 | |
1940 arg = lw_alloc(i + 1); | |
1941 strncpy(arg, tstr, i); | |
1942 arg[i] = 0; | |
1943 | |
1944 if (tstr[i]) | |
1945 i++; | |
521
56c32bc798f8
Fix argument parsing problems with IFSTR
William Astle <lost@l-w.ca>
parents:
519
diff
changeset
|
1946 if (tstr[i] == ',') |
56c32bc798f8
Fix argument parsing problems with IFSTR
William Astle <lost@l-w.ca>
parents:
519
diff
changeset
|
1947 i++; |
55 | 1948 |
521
56c32bc798f8
Fix argument parsing problems with IFSTR
William Astle <lost@l-w.ca>
parents:
519
diff
changeset
|
1949 *p += i + 1; |
55 | 1950 return arg; |
1951 } | |
1952 else if (*tstr == '\'') | |
1953 { | |
1954 // single quote delim | |
1955 tstr++; | |
1956 for (i = 0; tstr[i] && tstr[i] != '\''; i++) | |
1957 /* do nothing */ ; | |
1958 | |
1959 arg = lw_alloc(i + 1); | |
1960 strncpy(arg, tstr, i); | |
1961 arg[i] = 0; | |
1962 | |
1963 if (tstr[i]) | |
1964 i++; | |
521
56c32bc798f8
Fix argument parsing problems with IFSTR
William Astle <lost@l-w.ca>
parents:
519
diff
changeset
|
1965 if (tstr[i] == ',') |
56c32bc798f8
Fix argument parsing problems with IFSTR
William Astle <lost@l-w.ca>
parents:
519
diff
changeset
|
1966 i++; |
56c32bc798f8
Fix argument parsing problems with IFSTR
William Astle <lost@l-w.ca>
parents:
519
diff
changeset
|
1967 *p += i + 1; |
55 | 1968 return arg; |
1969 } | |
1970 else | |
1971 { | |
1972 // bare word - whitespace or comma delim | |
1973 for (i = 0; tstr[i] && !isspace(tstr[i]) && tstr[i] != ','; i++) | |
1974 /* do nothing */ ; | |
1975 | |
1976 arg = lw_alloc(i + 1); | |
1977 strncpy(arg, tstr, i); | |
1978 arg[i] = 0; | |
1979 if (tstr[i] == ',') | |
1980 i++; | |
1981 | |
1982 *p += i; | |
1983 return arg; | |
1984 } | |
1985 } | |
1986 | |
1987 /* string conditional helpers */ | |
1988 /* return "1" for true, "0" for false */ | |
1989 int strcond_eq(char **p) | |
1990 { | |
1991 char *arg1; | |
1992 char *arg2; | |
1993 int c = 0; | |
1994 | |
1995 arg1 = strcond_parsearg(p); | |
1996 arg2 = strcond_parsearg(p); | |
521
56c32bc798f8
Fix argument parsing problems with IFSTR
William Astle <lost@l-w.ca>
parents:
519
diff
changeset
|
1997 |
55 | 1998 if (strcmp(arg1, arg2) == 0) |
1999 c = 1; | |
2000 lw_free(arg1); | |
2001 lw_free(arg2); | |
2002 return c; | |
2003 } | |
2004 | |
2005 int strcond_ieq(char **p) | |
2006 { | |
2007 char *arg1; | |
2008 char *arg2; | |
2009 int c = 0; | |
2010 | |
2011 arg1 = strcond_parsearg(p); | |
2012 arg2 = strcond_parsearg(p); | |
2013 | |
2014 if (strcasecmp(arg1, arg2) == 0) | |
2015 c = 1; | |
2016 lw_free(arg1); | |
2017 lw_free(arg2); | |
2018 return c; | |
2019 } | |
2020 | |
2021 int strcond_ne(char **p) | |
2022 { | |
2023 char *arg1; | |
2024 char *arg2; | |
2025 int c = 0; | |
2026 | |
2027 arg1 = strcond_parsearg(p); | |
2028 arg2 = strcond_parsearg(p); | |
2029 | |
2030 if (strcmp(arg1, arg2) != 0) | |
2031 c = 1; | |
2032 lw_free(arg1); | |
2033 lw_free(arg2); | |
2034 return c; | |
2035 } | |
2036 | |
2037 int strcond_ine(char **p) | |
2038 { | |
2039 char *arg1; | |
2040 char *arg2; | |
2041 int c = 0; | |
2042 | |
2043 arg1 = strcond_parsearg(p); | |
2044 arg2 = strcond_parsearg(p); | |
2045 | |
2046 if (strcasecmp(arg1, arg2) != 0) | |
2047 c = 1; | |
2048 lw_free(arg1); | |
2049 lw_free(arg2); | |
2050 return c; | |
2051 } | |
2052 | |
2053 int strcond_peq(char **p) | |
2054 { | |
2055 char *arg0; | |
2056 char *arg1; | |
2057 char *arg2; | |
359 | 2058 size_t plen; |
55 | 2059 int c = 0; |
2060 | |
2061 arg0 = strcond_parsearg(p); | |
2062 arg1 = strcond_parsearg(p); | |
2063 arg2 = strcond_parsearg(p); | |
2064 | |
2065 plen = strtol(arg0, NULL, 10); | |
2066 if (strlen(arg1) > plen) | |
2067 arg1[plen] = 0; | |
2068 if (strlen(arg2) > plen) | |
2069 arg2[plen] = 0; | |
2070 | |
2071 if (strcmp(arg1, arg2) == 0) | |
2072 c = 1; | |
2073 lw_free(arg0); | |
2074 lw_free(arg1); | |
2075 lw_free(arg2); | |
2076 return c; | |
2077 } | |
2078 | |
2079 int strcond_ipeq(char **p) | |
2080 { | |
2081 char *arg0; | |
2082 char *arg1; | |
2083 char *arg2; | |
359 | 2084 size_t plen; |
55 | 2085 int c = 0; |
2086 | |
2087 arg0 = strcond_parsearg(p); | |
2088 arg1 = strcond_parsearg(p); | |
2089 arg2 = strcond_parsearg(p); | |
2090 | |
2091 plen = strtol(arg0, NULL, 10); | |
2092 if (strlen(arg1) > plen) | |
2093 arg1[plen] = 0; | |
2094 if (strlen(arg2) > plen) | |
2095 arg2[plen] = 0; | |
2096 | |
2097 if (strcasecmp(arg1, arg2) == 0) | |
2098 c = 1; | |
2099 lw_free(arg0); | |
2100 lw_free(arg1); | |
2101 lw_free(arg2); | |
2102 return c; | |
2103 } | |
2104 | |
2105 int strcond_pne(char **p) | |
2106 { | |
2107 char *arg0; | |
2108 char *arg1; | |
2109 char *arg2; | |
359 | 2110 size_t plen; |
55 | 2111 int c = 0; |
2112 | |
2113 arg0 = strcond_parsearg(p); | |
2114 arg1 = strcond_parsearg(p); | |
2115 arg2 = strcond_parsearg(p); | |
2116 | |
2117 plen = strtol(arg0, NULL, 10); | |
2118 if (strlen(arg1) > plen) | |
2119 arg1[plen] = 0; | |
2120 if (strlen(arg2) > plen) | |
2121 arg2[plen] = 0; | |
2122 | |
2123 if (strcmp(arg1, arg2) != 0) | |
2124 c = 1; | |
2125 lw_free(arg0); | |
2126 lw_free(arg1); | |
2127 lw_free(arg2); | |
2128 return c; | |
2129 } | |
2130 | |
2131 int strcond_ipne(char **p) | |
2132 { | |
2133 char *arg0; | |
2134 char *arg1; | |
2135 char *arg2; | |
359 | 2136 size_t plen; |
55 | 2137 int c = 0; |
2138 | |
2139 arg0 = strcond_parsearg(p); | |
2140 arg1 = strcond_parsearg(p); | |
2141 arg2 = strcond_parsearg(p); | |
2142 | |
2143 plen = strtol(arg0, NULL, 10); | |
2144 if (strlen(arg1) > plen) | |
2145 arg1[plen] = 0; | |
2146 if (strlen(arg2) > plen) | |
2147 arg2[plen] = 0; | |
2148 | |
2149 if (strcasecmp(arg1, arg2) != 0) | |
2150 c = 1; | |
2151 lw_free(arg0); | |
2152 lw_free(arg1); | |
2153 lw_free(arg2); | |
2154 return c; | |
2155 } | |
2156 | |
2157 int strcond_seq(char **p) | |
2158 { | |
2159 char *arg0; | |
2160 char *arg1; | |
2161 char *arg2; | |
2162 char *rarg1; | |
2163 char *rarg2; | |
2164 | |
359 | 2165 size_t plen; |
55 | 2166 int c = 0; |
2167 | |
2168 arg0 = strcond_parsearg(p); | |
2169 arg1 = strcond_parsearg(p); | |
2170 arg2 = strcond_parsearg(p); | |
2171 | |
2172 rarg1 = arg1; | |
2173 rarg2 = arg2; | |
2174 | |
2175 plen = strtol(arg0, NULL, 10); | |
2176 if (strlen(arg1) > plen) | |
2177 { | |
2178 rarg1 += strlen(arg1) - plen; | |
2179 } | |
2180 if (strlen(arg2) > plen) | |
2181 { | |
2182 rarg2 += strlen(arg2) - plen; | |
2183 } | |
2184 if (strcmp(rarg1, rarg2) == 0) | |
2185 c = 1; | |
2186 lw_free(arg0); | |
2187 lw_free(arg1); | |
2188 lw_free(arg2); | |
2189 return c; | |
2190 } | |
2191 | |
2192 int strcond_iseq(char **p) | |
2193 { | |
2194 char *arg0; | |
2195 char *arg1; | |
2196 char *arg2; | |
2197 char *rarg1; | |
2198 char *rarg2; | |
2199 | |
359 | 2200 size_t plen; |
55 | 2201 int c = 0; |
2202 | |
2203 arg0 = strcond_parsearg(p); | |
2204 arg1 = strcond_parsearg(p); | |
2205 arg2 = strcond_parsearg(p); | |
2206 | |
2207 rarg1 = arg1; | |
2208 rarg2 = arg2; | |
2209 | |
2210 plen = strtol(arg0, NULL, 10); | |
2211 if (strlen(arg1) > plen) | |
2212 { | |
2213 rarg1 += strlen(arg1) - plen; | |
2214 } | |
2215 if (strlen(arg2) > plen) | |
2216 { | |
2217 rarg2 += strlen(arg2) - plen; | |
2218 } | |
2219 | |
2220 if (strcasecmp(rarg1, rarg2) == 0) | |
2221 c = 1; | |
2222 lw_free(arg0); | |
2223 lw_free(arg1); | |
2224 lw_free(arg2); | |
2225 return c; | |
2226 } | |
2227 | |
2228 | |
2229 int strcond_sne(char **p) | |
2230 { | |
2231 char *arg0; | |
2232 char *arg1; | |
2233 char *arg2; | |
2234 char *rarg1; | |
2235 char *rarg2; | |
2236 | |
359 | 2237 size_t plen; |
55 | 2238 int c = 0; |
2239 | |
2240 arg0 = strcond_parsearg(p); | |
2241 arg1 = strcond_parsearg(p); | |
2242 arg2 = strcond_parsearg(p); | |
2243 | |
2244 rarg1 = arg1; | |
2245 rarg2 = arg2; | |
2246 | |
2247 plen = strtol(arg0, NULL, 10); | |
2248 if (strlen(arg1) > plen) | |
2249 { | |
2250 rarg1 += strlen(arg1) - plen; | |
2251 } | |
2252 if (strlen(arg2) > plen) | |
2253 { | |
2254 rarg2 += strlen(arg2) - plen; | |
2255 } | |
2256 | |
2257 if (strcmp(rarg1, rarg2) != 0) | |
2258 c = 1; | |
2259 lw_free(arg0); | |
2260 lw_free(arg1); | |
2261 lw_free(arg2); | |
2262 return c; | |
2263 } | |
2264 | |
2265 int strcond_isne(char **p) | |
2266 { | |
2267 char *arg0; | |
2268 char *arg1; | |
2269 char *arg2; | |
2270 char *rarg1; | |
2271 char *rarg2; | |
2272 | |
359 | 2273 size_t plen; |
55 | 2274 int c = 0; |
2275 | |
2276 arg0 = strcond_parsearg(p); | |
2277 arg1 = strcond_parsearg(p); | |
2278 arg2 = strcond_parsearg(p); | |
2279 | |
2280 rarg1 = arg1; | |
2281 rarg2 = arg2; | |
2282 | |
2283 plen = strtol(arg0, NULL, 10); | |
2284 if (strlen(arg1) > plen) | |
2285 { | |
2286 rarg1 += strlen(arg1) - plen; | |
2287 } | |
2288 if (strlen(arg2) > plen) | |
2289 { | |
2290 rarg2 += strlen(arg2) - plen; | |
2291 } | |
2292 | |
2293 if (strcasecmp(rarg1, rarg2) != 0) | |
2294 c = 1; | |
2295 lw_free(arg0); | |
2296 lw_free(arg1); | |
2297 lw_free(arg2); | |
2298 return c; | |
2299 } | |
2300 | |
2301 /* string conditionals */ | |
2302 PARSEFUNC(pseudo_parse_ifstr) | |
2303 { | |
2304 static struct strconds | |
2305 { | |
2306 char *str; | |
2307 int (*fn)(char **ptr); | |
2308 } strops[] = { | |
2309 { "eq", strcond_eq }, | |
2310 { "ieq", strcond_ieq }, | |
2311 { "ne", strcond_ne }, | |
2312 { "ine", strcond_ine }, | |
2313 { "peq", strcond_peq }, | |
2314 { "ipeq", strcond_ipeq }, | |
2315 { "pne", strcond_pne }, | |
2316 { "ipne", strcond_ipne }, | |
2317 { "seq", strcond_seq }, | |
2318 { "iseq", strcond_iseq }, | |
2319 { "sne", strcond_sne }, | |
2320 { "isne", strcond_isne }, | |
2321 { NULL, 0 } | |
2322 }; | |
2323 int tv = 0; | |
2324 char *tstr; | |
58 | 2325 int strop; |
55 | 2326 |
2327 l -> len = 0; | |
2328 | |
2329 if (as -> skipcond && !(as -> skipmacro)) | |
2330 { | |
2331 as -> skipcount++; | |
2332 skip_operand(p); | |
2333 return; | |
2334 } | |
2335 | |
2336 tstr = strcond_parsearg(p); | |
2337 if (!**p || isspace(**p)) | |
2338 { | |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
2339 lwasm_register_error(as, l, E_STRING_BAD); |
55 | 2340 return; |
2341 } | |
2342 | |
2343 for (strop = 0; strops[strop].str != NULL; strop++) | |
2344 if (strcasecmp(strops[strop].str, tstr) == 0) | |
2345 break; | |
2346 | |
2347 lw_free(tstr); | |
2348 | |
2349 if (strops[strop].str == NULL) | |
2350 { | |
370
8764142b3192
Convert internal error/warning handling framework to a new unified system
William Astle <lost@l-w.ca>
parents:
359
diff
changeset
|
2351 lwasm_register_error(as, l, E_STRING_BAD); |
55 | 2352 } |
2353 | |
2354 tv = (*(strops[strop].fn))(p); | |
2355 | |
2356 if (!tv) | |
2357 { | |
2358 as -> skipcond = 1; | |
2359 as -> skipcount = 1; | |
2360 } | |
2361 } |