; 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