From 6a43b0e81721919d864ce053e0c0c624ba8c0127 Mon Sep 17 00:00:00 2001 From: Oscar Campbell Date: Sun, 31 May 2015 02:55:06 +0200 Subject: Clean up to compiler style. Refine error-msg for illegal octal 'O' --- compiler/lexer.nim | 188 ++++++++++++++++++----------------------------------- compiler/msgs.nim | 8 +-- 2 files changed, 68 insertions(+), 128 deletions(-) (limited to 'compiler') diff --git a/compiler/lexer.nim b/compiler/lexer.nim index bdbaa79b1..e1615ac36 100644 --- a/compiler/lexer.nim +++ b/compiler/lexer.nim @@ -229,54 +229,6 @@ proc lexMessagePos(L: var TLexer, msg: TMsgKind, pos: int, arg = "") = var info = newLineInfo(L.fileIdx, L.lineNumber, pos - L.lineStart) L.dispMessage(info, msg, arg) -proc matchUnderscoreChars(L: var TLexer, tok: var TToken, chars: set[char]) = - var pos = L.bufpos # use registers for pos, buf - var buf = L.buf - while true: - if buf[pos] in chars: - add(tok.literal, buf[pos]) - inc(pos) - else: - break - if buf[pos] == '_': - if buf[pos+1] notin chars: - 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}: - lexLiteralNumberMessage(L, errNumberOutOfRange, startpos) + lexMessageLitNum(L, errNumberOutOfRange, startpos) elif result.tokType == tkInt8Lit and (result.iNumber < int8.low or result.iNumber > int8.high): - lexLiteralNumberMessage(L, errNumberOutOfRange, startpos) + lexMessageLitNum(L, errNumberOutOfRange, startpos) elif result.tokType == tkInt16Lit and (result.iNumber < int16.low or result.iNumber > int16.high): - lexLiteralNumberMessage(L, errNumberOutOfRange, startpos) - + lexMessageLitNum(L, errNumberOutOfRange, startpos) except ValueError: - lexLiteralNumberMessage(L, errInvalidNumber, startpos) + lexMessageLitNum(L, errInvalidNumber, startpos) except OverflowError, RangeError: - lexLiteralNumberMessage(L, errNumberOutOfRange, startpos) - + lexMessageLitNum(L, errNumberOutOfRange, startpos) L.bufpos = postPos proc handleHexChar(L: var TLexer, xi: var int) = diff --git a/compiler/msgs.nim b/compiler/msgs.nim index 041a181be..e97032db4 100644 --- a/compiler/msgs.nim +++ b/compiler/msgs.nim @@ -17,10 +17,9 @@ type errIntLiteralExpected, errInvalidCharacterConstant, errClosingTripleQuoteExpected, errClosingQuoteExpected, errTabulatorsAreNotAllowed, errInvalidToken, errLineTooLong, - errInvalidNumber, errNumberOutOfRange, errNnotAllowedInCharacter, - errClosingBracketExpected, errMissingFinalQuote, errIdentifierExpected, - errNewlineExpected, - errInvalidModuleName, + errInvalidNumber, errInvalidNumberOctalCode, errNumberOutOfRange, + errNnotAllowedInCharacter, errClosingBracketExpected, errMissingFinalQuote, + errIdentifierExpected, errNewlineExpected, errInvalidModuleName, errOperatorExpected, errTokenExpected, errStringAfterIncludeExpected, errRecursiveDependencyX, errOnOrOffExpected, errNoneSpeedOrSizeExpected, errInvalidPragma, errUnknownPragma, errInvalidDirectiveX, @@ -143,6 +142,7 @@ const errInvalidToken: "invalid token: $1", errLineTooLong: "line too long", errInvalidNumber: "$1 is not a valid number", + errInvalidNumberOctalCode: "$1 is not a valid number; did you mean octal? Then use one of '0o', '0c' or '0C'.", errNumberOutOfRange: "number $1 out of valid range", errNnotAllowedInCharacter: "\\n not allowed in character literal", errClosingBracketExpected: "closing ']' expected, but end of file reached", -- cgit 1.4.1-2-gfad0