comparison lwasm/expr.c @ 170:bf69160da467

Added ability to use 0x and 0X as prefixes for hexadecimal numbers
author lost
date Sun, 01 Mar 2009 00:53:21 +0000
parents 427e268e876b
children 29ba546ceea0
comparison
equal deleted inserted replaced
169:99300be2d3bd 170:bf69160da467
380 t = lwasm_expr_term_create_int(val); 380 t = lwasm_expr_term_create_int(val);
381 lwasm_expr_stack_push(s, t); 381 lwasm_expr_stack_push(s, t);
382 lwasm_expr_term_free(t); 382 lwasm_expr_term_free(t);
383 return 0; 383 return 0;
384 } 384 }
385 else if (**p == '0' && tolower(*(*p + 1)) == 'x')
386 {
387 // "C" style hexadecimal constant
388 int val = 0, val2;
389
390 (*p)+=2;
391 debug_message(3, "Found \"C\" style prefix hex constant: %s", *p);
392 while (**p && strchr("0123456789ABCDEFabcdef", **p))
393 {
394 val2 = toupper(**p) - '0';
395 if (val2 > 9)
396 val2 -= 7;
397 debug_message(3, "Got char: %c (%d)", **p, val2);
398 val = val * 16 + val2;
399 (*p)++;
400 }
401 t = lwasm_expr_term_create_int(val);
402 lwasm_expr_stack_push(s, t);
403 lwasm_expr_term_free(t);
404 return 0;
405 }
385 // an @ followed by a digit is an octal number 406 // an @ followed by a digit is an octal number
386 // but if it's followed by anything else, it is a symbol 407 // but if it's followed by anything else, it is a symbol
387 else if (**p == '@' && isdigit(*(*p + 1))) 408 else if (**p == '@' && isdigit(*(*p + 1)))
388 { 409 {
389 // octal constant 410 // octal constant
398 t = lwasm_expr_term_create_int(val); 419 t = lwasm_expr_term_create_int(val);
399 lwasm_expr_stack_push(s, t); 420 lwasm_expr_stack_push(s, t);
400 lwasm_expr_term_free(t); 421 lwasm_expr_term_free(t);
401 return 0; 422 return 0;
402 } 423 }
403 424
404 // symbol or bare decimal or suffix identified constant here 425 // symbol or bare decimal or suffix identified constant here
405 // all numbers will start with a digit at this point 426 // all numbers will start with a digit at this point
406 if (**p < '0' || **p > '9') 427 if (**p < '0' || **p > '9')
407 { 428 {
408 int l = 0; 429 int l = 0;