|
- ; Parse string in (HL) and return its numerical value whether its a number
- ; literal or a symbol. Returns value in IX.
- ; Sets Z if number or symbol is valid, unset otherwise.
- parseNumberOrSymbol:
- call parseLiteral
- ret z
- ; Not a number.
- ; Is str a single char? If yes, maybe it's a special symbol.
- call strIs1L
- jr nz, .symbol ; nope
- ld a, (hl)
- cp '$'
- jr z, .returnPC
- cp '@'
- jr nz, .symbol
- ; last val
- ld ix, (DIREC_LASTVAL)
- ret
- .symbol:
- push de ; --> lvl 1
- call symFindVal ; --> DE
- jr nz, .notfound
- ; value in DE. We need it in IX
- push de \ pop ix
- pop de ; <-- lvl 1
- cp a ; ensure Z
- ret
- .notfound:
- pop de ; <-- lvl 1
- ; If not found, check if we're in first pass. If we are, it doesn't
- ; matter that we didn't find our symbol. Return success anyhow.
- ; Otherwise return error. Z is already unset, so in fact, this is the
- ; same as jumping to zasmIsFirstPass
- ; however, before we do, load IX with zero. Returning dummy non-zero
- ; values can have weird consequence (such as false overflow errors).
- ld ix, 0
- jp zasmIsFirstPass
-
- .returnPC:
- push hl
- call zasmGetPC
- push hl \ pop ix
- pop hl
- ret
|