diff options
Diffstat (limited to 'ecomp-c/asm-i386.c')
-rw-r--r-- | ecomp-c/asm-i386.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/ecomp-c/asm-i386.c b/ecomp-c/asm-i386.c index 25a1e86..c9de15a 100644 --- a/ecomp-c/asm-i386.c +++ b/ecomp-c/asm-i386.c @@ -262,7 +262,12 @@ static void skipWhite( void ) static void number( void ) { int n = 0; + int negative = 0; + if( look == '-' ) { + negative = 1; + look = getChar( ); + } if( isDigit( look ) ) { num = look - '0'; look = getChar( ); @@ -276,6 +281,9 @@ static void number( void ) } sym = S_number; } + if( negative ) { + num = ~num + 1; + } } static void hexnumber( void ) @@ -418,7 +426,14 @@ static S_Symbol getSym( void ) break; case '-': look = getChar( ); - s = S_minus; + if( look >= '0' && look <= '9' ) { + ungetChar( look ); + s = S_number; + look = '-'; + number( ); + } else { + s = S_minus; + } break; case '+': look = getChar( ); |