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 intNumber uint64
|
||||||
var floatNumber float64
|
var floatNumber float64
|
||||||
var isFloat bool
|
var isFloat bool
|
||||||
|
var amountRead int
|
||||||
|
var totalRead int
|
||||||
|
|
||||||
token := lexer.newToken()
|
token := lexer.newToken()
|
||||||
|
|
||||||
if lexer.char == '0' {
|
if lexer.char == '0' {
|
||||||
lexer.nextRune()
|
lexer.nextRune()
|
||||||
|
totalRead ++
|
||||||
|
|
||||||
if lexer.char == 'x' {
|
if lexer.char == 'x' {
|
||||||
lexer.nextRune()
|
lexer.nextRune()
|
||||||
intNumber, floatNumber, isFloat, err = lexer.tokenizeNumber(16)
|
totalRead ++
|
||||||
|
intNumber, floatNumber,
|
||||||
|
isFloat, amountRead,
|
||||||
|
err = lexer.tokenizeNumber(16)
|
||||||
|
|
||||||
} else if lexer.char == 'b' {
|
} else if lexer.char == 'b' {
|
||||||
lexer.nextRune()
|
lexer.nextRune()
|
||||||
intNumber, floatNumber, isFloat, err = lexer.tokenizeNumber(2)
|
totalRead ++
|
||||||
|
intNumber, floatNumber,
|
||||||
|
isFloat, amountRead,
|
||||||
|
err = lexer.tokenizeNumber(2)
|
||||||
|
|
||||||
} else if lexer.char == '.' {
|
} 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' {
|
} else if lexer.char >= '0' && lexer.char <= '9' {
|
||||||
intNumber, floatNumber, isFloat, err = lexer.tokenizeNumber(8)
|
intNumber, floatNumber,
|
||||||
|
isFloat, amountRead,
|
||||||
|
err = lexer.tokenizeNumber(8)
|
||||||
}
|
}
|
||||||
} else {
|
} 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 }
|
if err != nil { return }
|
||||||
@ -48,6 +71,7 @@ func (lexer *LexingOperation) tokenizeNumberBeginning (negative bool) (err error
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
token.location.SetWidth(totalRead)
|
||||||
lexer.addToken(token)
|
lexer.addToken(token)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -82,6 +106,7 @@ func (lexer *LexingOperation) tokenizeNumber (
|
|||||||
intNumber uint64,
|
intNumber uint64,
|
||||||
floatNumber float64,
|
floatNumber float64,
|
||||||
isFloat bool,
|
isFloat bool,
|
||||||
|
amountRead int,
|
||||||
err error,
|
err error,
|
||||||
) {
|
) {
|
||||||
got := ""
|
got := ""
|
||||||
@ -103,6 +128,8 @@ func (lexer *LexingOperation) tokenizeNumber (
|
|||||||
if err != nil { return }
|
if err != nil { return }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
amountRead = len(got)
|
||||||
|
|
||||||
if isFloat {
|
if isFloat {
|
||||||
floatNumber, err = strconv.ParseFloat(got, 64)
|
floatNumber, err = strconv.ParseFloat(got, 64)
|
||||||
} else {
|
} else {
|
||||||
|
Reference in New Issue
Block a user