diff --git a/compiler/lexer.nim b/compiler/lexer.nim index 8080e0e8c3..bdbaa79b1a 100644 --- a/compiler/lexer.nim +++ b/compiler/lexer.nim @@ -240,12 +240,43 @@ proc matchUnderscoreChars(L: var TLexer, tok: var TToken, chars: set[char]) = break if buf[pos] == '_': if buf[pos+1] notin chars: - lexMessage(L, errInvalidToken, "_") + lexMessage(L, errInvalidToken, "_") # TODO/ozra - lift out for better msg break add(tok.literal, '_') inc(pos) L.bufpos = pos +# Used for getting human friendlier err messages. Also only used in getNumber +proc matchAllLiteralishForMessage(L: var TLexer, tok: var TToken, startpos: int) = + # Note: high(int32)): if result.tokType == tkIntLit: result.tokType = tkInt64Lit elif result.tokType in {tkInt8Lit, tkInt16Lit, tkInt32Lit}: - lexMessage(L, errNumberOutOfRange, result.literal) + lexLiteralNumberMessage(L, errNumberOutOfRange, startpos) elif result.tokType == tkInt8Lit and (result.iNumber < int8.low or result.iNumber > int8.high): - lexMessage(L, errNumberOutOfRange, result.literal) + lexLiteralNumberMessage(L, errNumberOutOfRange, startpos) elif result.tokType == tkInt16Lit and (result.iNumber < int16.low or result.iNumber > int16.high): - lexMessage(L, errNumberOutOfRange, result.literal) + lexLiteralNumberMessage(L, errNumberOutOfRange, startpos) + except ValueError: - lexMessage(L, errInvalidNumber, result.literal) + lexLiteralNumberMessage(L, errInvalidNumber, startpos) except OverflowError, RangeError: - lexMessage(L, errNumberOutOfRange, result.literal) - L.bufpos = endpos + lexLiteralNumberMessage(L, errNumberOutOfRange, startpos) + + L.bufpos = postPos proc handleHexChar(L: var TLexer, xi: var int) = case L.buf[L.bufpos]