diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2020-08-11 14:50:46 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-11 14:50:46 +0200 |
commit | 813f16a2a39f1375b241cf50845f641ea44d890e (patch) | |
tree | a5c45d5ead15167ded8d9d9dcef87dbf52013a38 /compiler/vmops.nim | |
parent | 963db9e7dac39f4238f013addfae36439318b67f (diff) | |
parent | b022576ce96f5c166c7f5684bef9de682704cb1b (diff) | |
download | Nim-813f16a2a39f1375b241cf50845f641ea44d890e.tar.gz |
Fix #8473 (#15169)
* Make explicit {.nimcall.} a seperate calling convention * Add testcase for #5688 * Fix bootstrapping * Remove little lies :) * Use typeflag instead
Diffstat (limited to 'compiler/vmops.nim')
-rw-r--r-- | compiler/vmops.nim | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/compiler/vmops.nim b/compiler/vmops.nim index e49d1e38c..298a02bb6 100644 --- a/compiler/vmops.nim +++ b/compiler/vmops.nim @@ -85,12 +85,14 @@ template wrap2svoid(op, modop) {.dirty.} = modop op template wrapDangerous(op, modop) {.dirty.} = - proc `op Wrapper`(a: VmArgs) {.nimcall.} = - if vmopsDanger notin c.config.features and (defined(nimsuggest) or c.config.cmd == cmdCheck): + if vmopsDanger notin c.config.features and (defined(nimsuggest) or c.config.cmd == cmdCheck): + proc `op Wrapper`(a: VmArgs) {.nimcall.} = discard - else: + modop op + else: + proc `op Wrapper`(a: VmArgs) {.nimcall.} = op(getString(a, 0), getString(a, 1)) - modop op + modop op proc getCurrentExceptionMsgWrapper(a: VmArgs) {.nimcall.} = setResult(a, if a.currentException.isNil: "" @@ -186,9 +188,9 @@ proc registerAdditionalOps*(c: PCtx) = registerCallback c, "stdlib.*.staticWalkDir", proc (a: VmArgs) {.nimcall.} = setResult(a, staticWalkDirImpl(getString(a, 0), getBool(a, 1))) when defined(nimHasInvariant): - registerCallback c, "stdlib.compilesettings.querySetting", proc (a: VmArgs) {.nimcall.} = + registerCallback c, "stdlib.compilesettings.querySetting", proc (a: VmArgs) = setResult(a, querySettingImpl(c.config, getInt(a, 0))) - registerCallback c, "stdlib.compilesettings.querySettingSeq", proc (a: VmArgs) {.nimcall.} = + registerCallback c, "stdlib.compilesettings.querySettingSeq", proc (a: VmArgs) = setResult(a, querySettingSeqImpl(c.config, getInt(a, 0))) if defined(nimsuggest) or c.config.cmd == cmdCheck: @@ -200,14 +202,14 @@ proc registerAdditionalOps*(c: PCtx) = registerCallback c, "stdlib.os.getCurrentCompilerExe", proc (a: VmArgs) {.nimcall.} = setResult(a, getAppFilename()) - registerCallback c, "stdlib.macros.symBodyHash", proc (a: VmArgs) {.nimcall.} = + registerCallback c, "stdlib.macros.symBodyHash", proc (a: VmArgs) = let n = getNode(a, 0) if n.kind != nkSym: stackTrace(c, PStackFrame(prc: c.prc.sym, comesFrom: 0, next: nil), c.exceptionInstr, "symBodyHash() requires a symbol. '" & $n & "' is of kind '" & $n.kind & "'", n.info) setResult(a, $symBodyDigest(c.graph, n.sym)) - registerCallback c, "stdlib.macros.isExported", proc(a: VmArgs) {.nimcall.} = + registerCallback c, "stdlib.macros.isExported", proc(a: VmArgs) = let n = getNode(a, 0) if n.kind != nkSym: stackTrace(c, PStackFrame(prc: c.prc.sym, comesFrom: 0, next: nil), c.exceptionInstr, |