diff options
author | Zahary Karadjov <zahary@gmail.com> | 2013-08-25 12:17:40 +0300 |
---|---|---|
committer | Zahary Karadjov <zahary@gmail.com> | 2013-08-25 12:17:40 +0300 |
commit | 6378fbd66ef9ff85510bf0583610bfc84dc6528f (patch) | |
tree | cf22e5470d2df127da461f49dbd156ba1b795f0b /compiler/sem.nim | |
parent | 03577bc9367c107597b93922fa14fc6727f4fe50 (diff) | |
download | Nim-6378fbd66ef9ff85510bf0583610bfc84dc6528f.tar.gz |
working code for simple cases of user-defined type classes
Diffstat (limited to 'compiler/sem.nim')
-rw-r--r-- | compiler/sem.nim | 6 |
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 |