summary refs log tree commit diff stats
path: root/compiler/sem.nim
diff options
context:
space:
mode:
authorZahary Karadjov <zahary@gmail.com>2013-08-25 12:17:40 +0300
committerZahary Karadjov <zahary@gmail.com>2013-08-25 12:17:40 +0300
commit6378fbd66ef9ff85510bf0583610bfc84dc6528f (patch)
treecf22e5470d2df127da461f49dbd156ba1b795f0b /compiler/sem.nim
parent03577bc9367c107597b93922fa14fc6727f4fe50 (diff)
downloadNim-6378fbd66ef9ff85510bf0583610bfc84dc6528f.tar.gz
working code for simple cases of user-defined type classes
Diffstat (limited to 'compiler/sem.nim')
-rw-r--r--compiler/sem.nim6
1 files changed, 6 insertions, 0 deletions
diff --git a/compiler/sem.nim b/compiler/sem.nim
index 4396a9093..c411d8ac4 100644
--- a/compiler/sem.nim
+++ b/compiler/sem.nim
@@ -198,6 +198,8 @@ proc semAfterMacroCall(c: PContext, n: PNode, s: PSym): PNode =
       #GlobalError(s.info, errInvalidParamKindX, typeToString(s.typ.sons[0]))
   dec(evalTemplateCounter)
 
+proc IsOpImpl(c: PContext, n: PNode): PNode
+
 proc semMacroExpr(c: PContext, n, nOrig: PNode, sym: PSym, 
                   semCheck: bool = true): PNode = 
   markUsed(n, sym)
@@ -215,6 +217,9 @@ proc semMacroExpr(c: PContext, n, nOrig: PNode, sym: PSym,
       else:
         result = symNodeFromType(c, e.typ, n.info)
 
+    c.evalContext.handleIsOperator = proc (n: PNode): PNode =
+      result = IsOpImpl(c, n)
+
   result = evalMacroCall(c.evalContext, n, nOrig, sym)
   if semCheck: result = semAfterMacroCall(c, result, sym)
 
@@ -250,6 +255,7 @@ proc myOpen(module: PSym): PPassContext =
   if c.p != nil: InternalError(module.info, "sem.myOpen")
   c.semConstExpr = semConstExpr
   c.semExpr = semExpr
+  c.semTryExpr = tryExpr
   c.semOperand = semOperand
   c.semConstBoolExpr = semConstBoolExpr
   c.semOverloadedCall = semOverloadedCall