diff options
author | James Osborn <osborn@alcf.anl.gov> | 2016-04-16 12:16:58 -0500 |
---|---|---|
committer | James Osborn <osborn@alcf.anl.gov> | 2016-05-04 00:24:44 -0500 |
commit | d462cca21fe9fa9aa05209e5f5c9cab93b1f746f (patch) | |
tree | 4cfc28d621c408edd8c207fc66cce5fba87e372f /compiler/vm.nim | |
parent | c876b304ba72e93dac4737dd98f003f9ee94d9b8 (diff) | |
download | Nim-d462cca21fe9fa9aa05209e5f5c9cab93b1f746f.tar.gz |
added getTypeInst which includes generic parameters
Diffstat (limited to 'compiler/vm.nim')
-rw-r--r-- | compiler/vm.nim | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/compiler/vm.nim b/compiler/vm.nim index f799334d6..ee58b6d48 100644 --- a/compiler/vm.nim +++ b/compiler/vm.nim @@ -1185,19 +1185,28 @@ proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TFullReg = of opcNGetType: let rb = instr.regB let rc = instr.regC - if rc == 0: - ensureKind(rkNode) - if regs[rb].kind == rkNode and regs[rb].node.typ != nil: - regs[ra].node = opMapTypeToAst(regs[rb].node.typ, c.debug[pc]) + case rc: + of 0: + # getType opcode: + ensureKind(rkNode) + if regs[rb].kind == rkNode and regs[rb].node.typ != nil: + regs[ra].node = opMapTypeToAst(regs[rb].node.typ, c.debug[pc]) + else: + stackTrace(c, tos, pc, errGenerated, "node has no type") + of 1: + # typeKind opcode: + ensureKind(rkInt) + if regs[rb].kind == rkNode and regs[rb].node.typ != nil: + regs[ra].intVal = ord(regs[rb].node.typ.kind) + #else: + # stackTrace(c, tos, pc, errGenerated, "node has no type") else: - stackTrace(c, tos, pc, errGenerated, "node has no type") - else: - # typeKind opcode: - ensureKind(rkInt) - if regs[rb].kind == rkNode and regs[rb].node.typ != nil: - regs[ra].intVal = ord(regs[rb].node.typ.kind) - #else: - # stackTrace(c, tos, pc, errGenerated, "node has no type") + # getTypeInst opcode: + ensureKind(rkNode) + if regs[rb].kind == rkNode and regs[rb].node.typ != nil: + regs[ra].node = opMapTypeInstToAst(regs[rb].node.typ, c.debug[pc]) + else: + stackTrace(c, tos, pc, errGenerated, "node has no type") of opcNStrVal: decodeB(rkNode) createStr regs[ra] |