diff options
author | Araq <rumpf_a@web.de> | 2012-07-30 01:24:54 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2012-07-30 01:24:54 +0200 |
commit | 976c39cdc94dfa62a3279c375c5d531eac32fe1f (patch) | |
tree | 8e9f093aa7da1701a031de17dad87088903c19d5 | |
parent | 541fdceb579320612b42e9fcca9683943ccc3e97 (diff) | |
download | Nim-976c39cdc94dfa62a3279c375c5d531eac32fe1f.tar.gz |
more improvements for idetools
-rwxr-xr-x | compiler/msgs.nim | 10 | ||||
-rwxr-xr-x | compiler/semexprs.nim | 6 | ||||
-rwxr-xr-x | compiler/semstmts.nim | 8 | ||||
-rwxr-xr-x | todo.txt | 2 |
4 files changed, 17 insertions, 9 deletions
diff --git a/compiler/msgs.nim b/compiler/msgs.nim index 527c96dca..714b6f51f 100755 --- a/compiler/msgs.nim +++ b/compiler/msgs.nim @@ -12,7 +12,7 @@ import type TMsgKind* = enum - errUnknown, errIllFormedAstX, errCannotOpenFile, errInternal, errGenerated, + errUnknown, errIllFormedAstX, errInternal, errCannotOpenFile, errGenerated, errXCompilerDoesNotSupportCpp, errStringLiteralExpected, errIntLiteralExpected, errInvalidCharacterConstant, errClosingTripleQuoteExpected, errClosingQuoteExpected, @@ -115,8 +115,8 @@ const MsgKindToStr*: array[TMsgKind, string] = [ errUnknown: "unknown error", errIllFormedAstX: "illformed AST: $1", - errCannotOpenFile: "cannot open \'$1\'", errInternal: "internal error: $1", + errCannotOpenFile: "cannot open \'$1\'", errGenerated: "$1", errXCompilerDoesNotSupportCpp: "\'$1\' compiler does not support C++", errStringLiteralExpected: "string literal expected", @@ -576,7 +576,7 @@ proc handleError(msg: TMsgKind, eh: TErrorHandling, s: string) = assert(false) # we want a stack trace here if msg >= fatalMin and msg <= fatalMax: if gVerbosity >= 3: assert(false) - if gCmd != cmdIdeTools: quit(1) + quit(1) if msg >= errMin and msg <= errMax: if gVerbosity >= 3: assert(false) inc(gErrorCounter) @@ -661,16 +661,19 @@ proc GlobalError*(info: TLineInfo, msg: TMsgKind, arg = "") = liMessage(info, msg, arg, doRaise) proc LocalError*(info: TLineInfo, msg: TMsgKind, arg = "") = + if gCmd == cmdIdeTools and gErrorCounter > 10: return liMessage(info, msg, arg, doNothing) proc Message*(info: TLineInfo, msg: TMsgKind, arg = "") = liMessage(info, msg, arg, doNothing) proc InternalError*(info: TLineInfo, errMsg: string) = + if gCmd == cmdIdeTools: return writeContext(info) liMessage(info, errInternal, errMsg, doAbort) proc InternalError*(errMsg: string) = + if gCmd == cmdIdeTools: return writeContext(UnknownLineInfo()) rawMessage(errInternal, errMsg) @@ -680,4 +683,3 @@ template AssertNotNil*(e: expr): expr = template InternalAssert*(e: bool): stmt = if not e: InternalError($InstantiationInfo()) - diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim index 6a9af12ab..a82852089 100755 --- a/compiler/semexprs.nim +++ b/compiler/semexprs.nim @@ -1256,10 +1256,10 @@ proc semSetConstr(c: PContext, n: PNode): PNode = n.sons[i] = semExprWithType(c, n.sons[i]) if typ == nil: typ = skipTypes(n.sons[i].typ, {tyGenericInst, tyVar, tyOrdinal}) - if not isOrdinalType(typ): + if not isOrdinalType(typ): LocalError(n.info, errOrdinalTypeExpected) - return - if lengthOrd(typ) > MaxSetElements: + typ = makeRangeType(c, 0, MaxSetElements - 1, n.info) + elif lengthOrd(typ) > MaxSetElements: typ = makeRangeType(c, 0, MaxSetElements - 1, n.info) addSonSkipIntLit(result.typ, typ) for i in countup(0, sonsLen(n) - 1): diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim index a5d2098c3..33d0d4f5c 100755 --- a/compiler/semstmts.nim +++ b/compiler/semstmts.nim @@ -1199,8 +1199,12 @@ proc SemStmt(c: PContext, n: PNode): PNode = result = semExprNoType(c, n) #LocalError(n.info, errStmtExpected) #result = ast.emptyNode - if result == nil: InternalError(n.info, "SemStmt: result = nil") - incl(result.flags, nfSem) + if result == nil: + InternalError(n.info, "SemStmt: result = nil") + # error correction: + result = emptyNode + else: + incl(result.flags, nfSem) proc semStmtScope(c: PContext, n: PNode): PNode = openScope(c.tab) diff --git a/todo.txt b/todo.txt index 0a7bcee89..f98b65ab0 100755 --- a/todo.txt +++ b/todo.txt @@ -23,6 +23,8 @@ version 0.9.0 Bugs ---- +- bug: aporia.nim(968, 5) Error: ambiguous identifier: 'DELETE' -- + use a qualifier - bug: pragma statements in combination with symbol files are evaluated twice but this can lead to compilation errors - bug: the parser is not strict enough with newlines: 'echo "a" echo "b"' |