Numbers now tokenize with the correct width
This commit is contained in:
parent
bde4bf8493
commit
120976a0f3
@ -8,25 +8,48 @@ func (lexer *LexingOperation) tokenizeNumberBeginning (negative bool) (err error
|
||||
var intNumber uint64
|
||||
var floatNumber float64
|
||||
var isFloat bool
|
||||
var amountRead int
|
||||
var totalRead int
|
||||
|
||||
token := lexer.newToken()
|
||||
|
||||
if lexer.char == '0' {
|
||||
lexer.nextRune()
|
||||
totalRead ++
|
||||
|
||||
if lexer.char == 'x' {
|
||||
lexer.nextRune()
|
||||
intNumber, floatNumber, isFloat, err = lexer.tokenizeNumber(16)
|
||||
totalRead ++
|
||||
intNumber, floatNumber,
|
||||
isFloat, amountRead,
|
||||
err = lexer.tokenizeNumber(16)
|
||||
|
||||
} else if lexer.char == 'b' {
|
||||
lexer.nextRune()
|
||||
intNumber, floatNumber, isFloat, err = lexer.tokenizeNumber(2)
|
||||
totalRead ++
|
||||
intNumber, floatNumber,
|
||||
isFloat, amountRead,
|
||||
err = lexer.tokenizeNumber(2)
|
||||
|
||||
} else if lexer.char == '.' {
|
||||
intNumber, floatNumber, isFloat, err = lexer.tokenizeNumber(10)
|
||||
intNumber, floatNumber,
|
||||
isFloat, amountRead,
|
||||
err = lexer.tokenizeNumber(10)
|
||||
|
||||
} else if lexer.char >= '0' && lexer.char <= '9' {
|
||||
intNumber, floatNumber, isFloat, err = lexer.tokenizeNumber(8)
|
||||
intNumber, floatNumber,
|
||||
isFloat, amountRead,
|
||||
err = lexer.tokenizeNumber(8)
|
||||
}
|
||||
} else {
|
||||
intNumber, floatNumber, isFloat, err = lexer.tokenizeNumber(10)
|
||||
intNumber, floatNumber,
|
||||
isFloat, amountRead,
|
||||
err = lexer.tokenizeNumber(10)
|
||||
}
|
||||
|
||||
totalRead += amountRead
|
||||
if negative {
|
||||
totalRead += 1
|
||||
}
|
||||
|
||||
if err != nil { return }
|
||||
@ -47,7 +70,8 @@ func (lexer *LexingOperation) tokenizeNumberBeginning (negative bool) (err error
|
||||
token.value = uint64(intNumber)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
token.location.SetWidth(totalRead)
|
||||
lexer.addToken(token)
|
||||
return
|
||||
}
|
||||
@ -82,6 +106,7 @@ func (lexer *LexingOperation) tokenizeNumber (
|
||||
intNumber uint64,
|
||||
floatNumber float64,
|
||||
isFloat bool,
|
||||
amountRead int,
|
||||
err error,
|
||||
) {
|
||||
got := ""
|
||||
@ -103,6 +128,8 @@ func (lexer *LexingOperation) tokenizeNumber (
|
||||
if err != nil { return }
|
||||
}
|
||||
|
||||
amountRead = len(got)
|
||||
|
||||
if isFloat {
|
||||
floatNumber, err = strconv.ParseFloat(got, 64)
|
||||
} else {
|
||||
|
Reference in New Issue
Block a user