summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2012-01-13 13:40:05 +0100
committerAraq <rumpf_a@web.de>2012-01-13 13:40:05 +0100
commite362cbbfd79f5b95ad0c7a218a3f7a35d91edbf7 (patch)
treeca39a785ce9d0d9c3c225326f81af36d8ebf7974 /compiler
parent76886432dad6df8e1a381286a918381554bab08b (diff)
downloadNim-e362cbbfd79f5b95ad0c7a218a3f7a35d91edbf7.tar.gz
bugfix: tests/reject/tnoinst.nim is now rejected properly
Diffstat (limited to 'compiler')
-rwxr-xr-xcompiler/ast.nim6
-rwxr-xr-xcompiler/msgs.nim3
-rwxr-xr-xcompiler/semexprs.nim2
3 files changed, 10 insertions, 1 deletions
diff --git a/compiler/ast.nim b/compiler/ast.nim
index 46dc5e0de..b936ec3b4 100755
--- a/compiler/ast.nim
+++ b/compiler/ast.nim
@@ -1022,3 +1022,9 @@ proc getStrOrChar*(a: PNode): string =
     internalError(a.info, "getStrOrChar")
     result = ""
 
+proc isGenericRoutine*(s: PSym): bool = 
+  case s.kind
+  of skProc, skTemplate, skMacro, skIterator:
+    result = s.ast != nil and s.ast[genericParamsPos].kind != nkEmpty
+  else: nil
+
diff --git a/compiler/msgs.nim b/compiler/msgs.nim
index 3865a0c7a..6cb2fedcd 100755
--- a/compiler/msgs.nim
+++ b/compiler/msgs.nim
@@ -85,7 +85,7 @@ type
     errInvalidIndexValueForTuple, errCommandExpectsFilename, errXExpected, 
     errInvalidSectionStart, errGridTableNotImplemented, errGeneralParseError, 
     errNewSectionExpected, errWhitespaceExpected, errXisNoValidIndexFile, 
-    errCannotRenderX, errVarVarTypeNotAllowed, 
+    errCannotRenderX, errVarVarTypeNotAllowed, errInstantiateXExplicitely,
     
     errXExpectsTwoArguments, 
     errXExpectsObjectTypes, errXcanNeverBeOfThisSubtype, errTooManyIterations, 
@@ -306,6 +306,7 @@ const
     errXisNoValidIndexFile: "\'$1\' is no valid index file", 
     errCannotRenderX: "cannot render reStructuredText element \'$1\'", 
     errVarVarTypeNotAllowed: "type \'var var\' is not allowed",
+    errInstantiateXExplicitely: "instantiate '$1' explicitely",
     errXExpectsTwoArguments: "\'$1\' expects two arguments", 
     errXExpectsObjectTypes: "\'$1\' expects object types",
     errXcanNeverBeOfThisSubtype: "\'$1\' can never be of this subtype", 
diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim
index 8c6c86ef6..32244af85 100755
--- a/compiler/semexprs.nim
+++ b/compiler/semexprs.nim
@@ -58,6 +58,8 @@ proc semSym(c: PContext, n: PNode, s: PSym, flags: TExprFlags): PNode =
         smoduleId != c.module.id and smoduleId != c.friendModule.id: 
       LocalError(n.info, errXCannotBePassedToProcVar, s.name.s)
     result = symChoice(c, n, s)
+    if result.kind == nkSym and isGenericRoutine(result.sym):
+      LocalError(n.info, errInstantiateXExplicitely, s.name.s)
   of skConst:
     markUsed(n, s)
     case skipTypes(s.typ, abstractInst).kind