lib/expr: fix unary minus
For some reason, I've mistakenly disabled tests in test_expr without noticing and I also broke "-123" parsing. Fixed.
This commit is contained in:
parent
6d88c3a754
commit
7410891ad1
@ -96,18 +96,15 @@ _findAndSplit:
|
|||||||
; parse expression on the left (HL) and the right (DE) and put the results in
|
; parse expression on the left (HL) and the right (DE) and put the results in
|
||||||
; HL (left) and DE (right)
|
; HL (left) and DE (right)
|
||||||
_resolveLeftAndRight:
|
_resolveLeftAndRight:
|
||||||
; special case: is (HL) zero? If yes, it means that our left operand
|
|
||||||
; is empty. consider it as 0
|
|
||||||
ld ix, 0 ; pre-set to 0
|
|
||||||
ld a, (hl)
|
ld a, (hl)
|
||||||
or a
|
or a
|
||||||
jr z, .skip
|
jr z, .noleft
|
||||||
; Parse left operand in (HL)
|
; Parse left operand in (HL)
|
||||||
push de ; --> lvl 1
|
push de ; --> lvl 1
|
||||||
call parseExpr
|
call parseExpr
|
||||||
pop hl ; <-- lvl 1, orig DE
|
pop hl ; <-- lvl 1, orig DE
|
||||||
ret nz ; return immediately if error
|
ret nz ; return immediately if error
|
||||||
.skip:
|
.parseright:
|
||||||
; Now we have parsed everything to the left and we have its result in
|
; Now we have parsed everything to the left and we have its result in
|
||||||
; DE. What we need to do now is the same thing on (DE) and then apply
|
; DE. What we need to do now is the same thing on (DE) and then apply
|
||||||
; the + operator. Let's save DE somewhere and parse this.
|
; the + operator. Let's save DE somewhere and parse this.
|
||||||
@ -116,6 +113,12 @@ _resolveLeftAndRight:
|
|||||||
call parseExpr ; DE is set
|
call parseExpr ; DE is set
|
||||||
pop hl ; <-- lvl 1. left value
|
pop hl ; <-- lvl 1. left value
|
||||||
ret ; Z is parseExpr's result
|
ret ; Z is parseExpr's result
|
||||||
|
.noleft:
|
||||||
|
; special case: is (HL) zero? If yes, it means that our left operand
|
||||||
|
; is empty. consider it as 0
|
||||||
|
ex de, hl ; (DE) goes in (HL) for .parseright
|
||||||
|
ld de, 0
|
||||||
|
jr .parseright
|
||||||
|
|
||||||
; Routines in here all have the same signature: they take two numbers, DE (left)
|
; Routines in here all have the same signature: they take two numbers, DE (left)
|
||||||
; and IX (right), apply the operator and put the resulting number in DE.
|
; and IX (right), apply the operator and put the resulting number in DE.
|
||||||
|
@ -48,7 +48,7 @@ test:
|
|||||||
ld sp, 0xffff
|
ld sp, 0xffff
|
||||||
|
|
||||||
; New-style tests
|
; New-style tests
|
||||||
;call testParseExpr
|
call testParseExpr
|
||||||
|
|
||||||
; Old-style tests, not touching them now.
|
; Old-style tests, not touching them now.
|
||||||
ld hl, s1
|
ld hl, s1
|
||||||
|
Loading…
Reference in New Issue
Block a user