Add staticFileExists and staticDirExists (#22278)

This commit is contained in:
Tomohiro
2023-08-18 23:47:47 +09:00
committed by GitHub
parent 7fababd583
commit eb83d20d0d
4 changed files with 27 additions and 0 deletions

View File

@@ -264,6 +264,10 @@ proc registerAdditionalOps*(c: PCtx) =
systemop getCurrentException
registerCallback c, "stdlib.osdirs.staticWalkDir", proc (a: VmArgs) {.nimcall.} =
setResult(a, staticWalkDirImpl(getString(a, 0), getBool(a, 1)))
registerCallback c, "stdlib.staticos.staticDirExists", proc (a: VmArgs) {.nimcall.} =
setResult(a, dirExists(getString(a, 0)))
registerCallback c, "stdlib.staticos.staticFileExists", proc (a: VmArgs) {.nimcall.} =
setResult(a, fileExists(getString(a, 0)))
registerCallback c, "stdlib.compilesettings.querySetting", proc (a: VmArgs) =
setResult(a, querySettingImpl(c.config, getInt(a, 0)))
registerCallback c, "stdlib.compilesettings.querySettingSeq", proc (a: VmArgs) =

13
lib/std/staticos.nim Normal file
View File

@@ -0,0 +1,13 @@
## This module implements path handling like os module but works at only compile-time.
## This module works even when cross compiling to OS that is not supported by os module.
proc staticFileExists*(filename: string): bool {.compileTime.} =
## Returns true if `filename` exists and is a regular file or symlink.
##
## Directories, device files, named pipes and sockets return false.
discard
proc staticDirExists*(dir: string): bool {.compileTime.} =
## Returns true if the directory `dir` exists. If `dir` is a file, false
## is returned. Follows symlinks.
discard

View File

@@ -0,0 +1,8 @@
import std/[assertions, staticos, os]
block:
static:
doAssert staticDirExists("MISSINGFILE") == false
doAssert staticFileExists("MISSINGDIR") == false
doAssert staticDirExists(currentSourcePath().parentDir)
doAssert staticFileExists(currentSourcePath())

View File

@@ -82,6 +82,8 @@ block:
doAssert fileExists("MISSINGFILE") == false
doAssert dirExists("MISSINGDIR") == false
doAssert fileExists(currentSourcePath())
doAssert dirExists(currentSourcePath().parentDir)
# bug #7210
block: