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