summaryrefslogtreecommitdiff
path: root/ecomp-c/asm-i386.c
diff options
context:
space:
mode:
Diffstat (limited to 'ecomp-c/asm-i386.c')
-rw-r--r--ecomp-c/asm-i386.c17
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( );