summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
authorZahary Karadjov <zahary@gmail.com>2014-03-19 22:35:31 +0200
committerZahary Karadjov <zahary@gmail.com>2014-03-20 01:16:50 +0200
commitd508384d39461966ee247a01ad637bc57d3f62af (patch)
treea8907a0d45679aef4f251a44d2dd23fb7d6cd066 /compiler
parent4b7655fd10d81ea50d0af41152df07ec21b05232 (diff)
downloadNim-d508384d39461966ee247a01ad637bc57d3f62af.tar.gz
fix #1013
Diffstat (limited to 'compiler')
-rw-r--r--compiler/sigmatch.nim14
1 files changed, 10 insertions, 4 deletions
diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim
index 56490dfe3..c09964638 100644
--- a/compiler/sigmatch.nim
+++ b/compiler/sigmatch.nim
@@ -12,7 +12,7 @@
 
 import 
   intsets, ast, astalgo, semdata, types, msgs, renderer, lookups, semtypinst,
-  magicsys, condsyms, idents, lexer, options, parampatterns, strutils
+  magicsys, condsyms, idents, lexer, options, parampatterns, strutils, trees
 
 when not defined(noDocgen):
   import docgen
@@ -973,11 +973,17 @@ proc typeRel(c: var TCandidate, f, aOrig: PType, doBind = true): TTypeRelation =
     # fix the expression, so it contains the already instantiated types
     let instantiated = replaceTypesInBody(c.c, c.bindings, f.n)
     let reevaluted = c.c.semExpr(c.c, instantiated)
-    if reevaluted.typ.kind != tyTypeDesc:
+    case reevaluted.typ.kind
+    of tyTypeDesc:
+      result = typeRel(c, a, reevaluted.typ.base)
+    of tyStatic:
+      result = typeRel(c, a, reevaluted.typ.base)
+      if result != isNone and reevaluted.typ.n != nil:
+        if not exprStructuralEquivalent(aOrig.n, reevaluted.typ.n):
+          result = isNone
+    else:
       localError(f.n.info, errTypeExpected)
       result = isNone
-    else:
-      result = typeRel(c, a, reevaluted.typ.base)
   
   else:
     internalAssert false