diff options
Diffstat (limited to 'compiler')
-rwxr-xr-x | compiler/msgs.nim | 10 | ||||
-rwxr-xr-x | compiler/semexprs.nim | 6 | ||||
-rwxr-xr-x | compiler/semstmts.nim | 8 |
3 files changed, 15 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) |