summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2012-07-30 01:24:54 +0200
committerAraq <rumpf_a@web.de>2012-07-30 01:24:54 +0200
commit976c39cdc94dfa62a3279c375c5d531eac32fe1f (patch)
tree8e9f093aa7da1701a031de17dad87088903c19d5
parent541fdceb579320612b42e9fcca9683943ccc3e97 (diff)
downloadNim-976c39cdc94dfa62a3279c375c5d531eac32fe1f.tar.gz
more improvements for idetools
-rwxr-xr-xcompiler/msgs.nim10
-rwxr-xr-xcompiler/semexprs.nim6
-rwxr-xr-xcompiler/semstmts.nim8
-rwxr-xr-xtodo.txt2
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"'