diff options
author | Don-Duong Quach <geekrelief@gmail.com> | 2022-11-14 11:13:04 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-14 20:13:04 +0100 |
commit | 32b145460f21643f08468dd80fd4c76917c6bbfc (patch) | |
tree | 2459b8ca44cf2ef9d773a51575950161a4ddc40d | |
parent | de89f6ce3233751a5c364100b902eadfc27086a4 (diff) | |
download | Nim-32b145460f21643f08468dd80fd4c76917c6bbfc.tar.gz |
createDir is now callable at compile time (#20824)
-rw-r--r-- | compiler/vmops.nim | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/compiler/vmops.nim b/compiler/vmops.nim index 63d364405..76e0ccb08 100644 --- a/compiler/vmops.nim +++ b/compiler/vmops.nim @@ -26,7 +26,7 @@ when declared(math.signbit): from std/envvars import getEnv, existsEnv, delEnv, putEnv, envPairs from std/os import getAppFilename from std/private/oscommon import dirExists, fileExists -from std/private/osdirs import walkDir +from std/private/osdirs import walkDir, createDir from std/times import cpuTime from std/hashes import hash @@ -49,6 +49,10 @@ template osop(op) {.dirty.} = template oscommonop(op) {.dirty.} = registerCallback(c, "stdlib.oscommon." & astToStr(op), `op Wrapper`) + +template osdirsop(op) {.dirty.} = + registerCallback(c, "stdlib.osdirs." & astToStr(op), `op Wrapper`) + template envvarsop(op) {.dirty.} = registerCallback(c, "stdlib.envvars." & astToStr(op), `op Wrapper`) @@ -105,7 +109,17 @@ template wrap2svoid(op, modop) {.dirty.} = op(getString(a, 0), getString(a, 1)) modop op -template wrapDangerous(op, modop) {.dirty.} = +template wrapDangerous1svoid(op, modop) {.dirty.} = + if vmopsDanger notin c.config.features and (defined(nimsuggest) or c.config.cmd == cmdCheck): + proc `op Wrapper`(a: VmArgs) {.nimcall.} = + discard + modop op + else: + proc `op Wrapper`(a: VmArgs) {.nimcall.} = + op(getString(a, 0)) + modop op + +template wrapDangerous2svoid(op, modop) {.dirty.} = if vmopsDanger notin c.config.features and (defined(nimsuggest) or c.config.cmd == cmdCheck): proc `op Wrapper`(a: VmArgs) {.nimcall.} = discard @@ -233,7 +247,8 @@ proc registerAdditionalOps*(c: PCtx) = wrap1svoid(delEnv, envvarsop) wrap1s(dirExists, oscommonop) wrap1s(fileExists, oscommonop) - wrapDangerous(writeFile, ioop) + wrapDangerous2svoid(writeFile, ioop) + wrapDangerous1svoid(createDir, osdirsop) wrap1s(readFile, ioop) wrap2si(readLines, ioop) systemop getCurrentExceptionMsg |