comparison src/asm.c @ 10:9f575f77a157

Fix parsing of hex literals in assembler
author Michael Pavone <pavone@retrodev.com>
date Sun, 27 Mar 2016 17:32:09 -0700
parents 74a6d629b78f
children d4112095b93f
comparison
equal deleted inserted replaced
9:a3f14b00aead 10:9f575f77a157
201 int in_string = 0; 201 int in_string = 0;
202 while ((arg = in_string ? linebuf : get_arg(&linebuf))) 202 while ((arg = in_string ? linebuf : get_arg(&linebuf)))
203 { 203 {
204 //TODO: actual error checking 204 //TODO: actual error checking
205 if (arg[0] == '$' || (arg[0] == '0' && arg[1] == 'x')) { 205 if (arg[0] == '$' || (arg[0] == '0' && arg[1] == 'x')) {
206 value = strtol(arg, NULL, 16); 206 value = strtol(arg[0] == '$' ? arg+1 : arg+2, NULL, 16);
207 } else if (arg[0] >= '0' && arg[0] <= '9') { 207 } else if (arg[0] >= '0' && arg[0] <= '9') {
208 value = strtol(arg, NULL, 10); 208 value = strtol(arg, NULL, 10);
209 } else if (arg[0] == '"') { 209 } else if (arg[0] == '"') {
210 if (arg[1] == '"') { 210 if (arg[1] == '"') {
211 //emtpy string or end of string 211 //emtpy string or end of string
319 return 0; 319 return 0;
320 } 320 }
321 321
322 //TODO: actual error checking 322 //TODO: actual error checking
323 if (arg[0] == '$' || (arg[0] == '0' && arg[1] == 'x')) { 323 if (arg[0] == '$' || (arg[0] == '0' && arg[1] == 'x')) {
324 value = strtol(arg, NULL, 16); 324 value = strtol(arg[0] == '$' ? arg+1 : arg+2, NULL, 16);
325 } else if (arg[0] >= '0' && arg[0] <= '9') { 325 } else if (arg[0] >= '0' && arg[0] <= '9') {
326 value = strtol(arg, NULL, 10); 326 value = strtol(arg, NULL, 10);
327 } else { 327 } else {
328 label *l = find_label(meta, arg); 328 label *l = find_label(meta, arg);
329 if (!l) { 329 if (!l) {