Mercurial > hg-old > index.cgi
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; |