CIs: attempt to use csources_v1 (#16282)

* CIs: attempt to use csources_v1
* also updated the BSDs
* also updated azure pipelines
* std modules should not itself use the 'std/' import dir...
* compiler has to be careful with std/ for v1 booting
This commit is contained in:
Andreas Rumpf 2021-04-21 07:41:33 +02:00 • committed by GitHub
commit a9b62de895
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
58 changed files with 142 additions and 143 deletions

View file

@ -15,7 +15,7 @@ environment:
tasks: tasks:
- setup: | - setup: |
cd Nim cd Nim
git clone --depth 1 -q https://github.com/nim-lang/csources.git git clone --depth 1 -q https://github.com/nim-lang/csources_v1.git csources
gmake -C csources -j $(sysctl -n hw.ncpu) gmake -C csources -j $(sysctl -n hw.ncpu)
bin/nim c --skipUserCfg --skipParentCfg koch bin/nim c --skipUserCfg --skipParentCfg koch
echo 'export PATH=$HOME/Nim/bin:$PATH' >> $HOME/.buildenv echo 'export PATH=$HOME/Nim/bin:$PATH' >> $HOME/.buildenv

View file

@ -18,7 +18,7 @@ environment:
tasks: tasks:
- setup: | - setup: |
cd Nim cd Nim
git clone --depth 1 -q https://github.com/nim-lang/csources.git git clone --depth 1 -q https://github.com/nim-lang/csources_v1.git csources
gmake -C csources -j $(sysctl -n hw.ncpuonline) gmake -C csources -j $(sysctl -n hw.ncpuonline)
bin/nim c koch bin/nim c koch
echo 'export PATH=$HOME/Nim/bin:$PATH' >> $HOME/.buildenv echo 'export PATH=$HOME/Nim/bin:$PATH' >> $HOME/.buildenv

View file

@ -18,7 +18,7 @@ environment:
tasks: tasks:
- setup: | - setup: |
cd Nim cd Nim
git clone --depth 1 -q https://github.com/nim-lang/csources.git git clone --depth 1 -q https://github.com/nim-lang/csources_v1.git csources
gmake -C csources -j $(sysctl -n hw.ncpuonline) gmake -C csources -j $(sysctl -n hw.ncpuonline)
bin/nim c koch bin/nim c koch
echo 'export PATH=$HOME/Nim/bin:$PATH' >> $HOME/.buildenv echo 'export PATH=$HOME/Nim/bin:$PATH' >> $HOME/.buildenv

View file

@ -85,7 +85,7 @@ jobs:
id: csources-version id: csources-version
shell: bash shell: bash
run: | run: |
sha=$(git ls-remote https://github.com/nim-lang/csources master | cut -f 1) sha=$(git ls-remote https://github.com/nim-lang/csources_v1 master | cut -f 1)
echo "::set-output name=sha::$sha" echo "::set-output name=sha::$sha"
- name: 'Get prebuilt csources from cache' - name: 'Get prebuilt csources from cache'
@ -99,7 +99,7 @@ jobs:
if: steps.csources-cache.outputs.cache-hit != 'true' if: steps.csources-cache.outputs.cache-hit != 'true'
uses: actions/checkout@v2 uses: actions/checkout@v2
with: with:
repository: nim-lang/csources repository: nim-lang/csources_v1
path: csources path: csources
- name: 'Build 1-stage compiler from csources' - name: 'Build 1-stage compiler from csources'

View file

@ -67,7 +67,7 @@ jobs:
echo $commitMsg | grep -v '\[skip ci\]' # fails if [skip ci] not in commit msg echo $commitMsg | grep -v '\[skip ci\]' # fails if [skip ci] not in commit msg
displayName: 'Check whether to skip CI' displayName: 'Check whether to skip CI'
- bash: git clone --depth 1 https://github.com/nim-lang/csources - bash: git clone --depth 1 https://github.com/nim-lang/csources_v1 csources
displayName: 'Checkout Nim csources' displayName: 'Checkout Nim csources'
- task: NodeTool@0 - task: NodeTool@0

View file

@ -2,7 +2,7 @@ REM Some debug info
echo "Running on %CI_RUNNER_ID% (%CI_RUNNER_DESCRIPTION%) with tags %CI_RUNNER_TAGS%." echo "Running on %CI_RUNNER_ID% (%CI_RUNNER_DESCRIPTION%) with tags %CI_RUNNER_TAGS%."
gcc -v gcc -v
git clone --depth 1 https://github.com/nim-lang/csources.git git clone --depth 1 https://github.com/nim-lang/csources_v1.git csources
cd csources cd csources
call build64.bat call build64.bat
cd .. cd ..

View file

@ -1,7 +1,7 @@
sh ci/deps.sh sh ci/deps.sh
# Build from C sources. # Build from C sources.
git clone --depth 1 https://github.com/nim-lang/csources.git git clone --depth 1 https://github.com/nim-lang/csources_v1.git csources
cd csources cd csources
sh build.sh sh build.sh
cd .. cd ..

View file

@ -25,7 +25,7 @@ Rem Build csources
koch csources -d:release || exit /b koch csources -d:release || exit /b
rem Grab C sources and nimsuggest rem Grab C sources and nimsuggest
git clone --depth 1 https://github.com/nim-lang/csources.git git clone --depth 1 https://github.com/nim-lang/csources_v1.git csources
set PATH=%CD%\bin;%PATH% set PATH=%CD%\bin;%PATH%

View file

@ -14,7 +14,7 @@
import ropes, platform, condsyms, options, msgs, lineinfos, pathutils import ropes, platform, condsyms, options, msgs, lineinfos, pathutils
import std/[os, strutils, osproc, sha1, streams, sequtils, times, strtabs, json] import os, strutils, osproc, std/sha1, streams, sequtils, times, strtabs, json
type type
TInfoCCProp* = enum # properties of the C compiler: TInfoCCProp* = enum # properties of the C compiler:

View file

@ -18,8 +18,8 @@
## also doing cross-module dependency tracking and DCE that we don't need ## also doing cross-module dependency tracking and DCE that we don't need
## anymore. DCE is now done as prepass over the entire packed module graph. ## anymore. DCE is now done as prepass over the entire packed module graph.
import std/[packedsets, algorithm, tables] import std/packedsets, algorithm, tables
# std/intsets would give `UnusedImport`, pending https://github.com/nim-lang/Nim/issues/14246
import ".."/[ast, options, lineinfos, modulegraphs, cgendata, cgen, import ".."/[ast, options, lineinfos, modulegraphs, cgendata, cgen,
pathutils, extccomp, msgs] pathutils, extccomp, msgs]
@ -70,7 +70,7 @@ proc addFileToLink(config: ConfigRef; m: PSym) =
addFileToCompile(config, cf) addFileToCompile(config, cf)
when defined(debugDce): when defined(debugDce):
import std / [os, packedsets] import os, std/packedsets
proc storeAliveSymsImpl(asymFile: AbsoluteFile; s: seq[int32]) = proc storeAliveSymsImpl(asymFile: AbsoluteFile; s: seq[int32]) =
var f = rodfiles.create(asymFile.string) var f = rodfiles.create(asymFile.string)

View file

@ -9,7 +9,7 @@
## Dead code elimination (=DCE) for IC. ## Dead code elimination (=DCE) for IC.
import std / [intsets, tables] import intsets, tables
import ".." / [ast, options, lineinfos, types] import ".." / [ast, options, lineinfos, types]
import packed_ast, ic, bitabs import packed_ast, ic, bitabs

View file

@ -7,12 +7,12 @@
# distribution, for details about the copyright. # distribution, for details about the copyright.
# #
import std / [hashes, tables, intsets, sha1] import hashes, tables, intsets, std/sha1
import packed_ast, bitabs, rodfiles import packed_ast, bitabs, rodfiles
import ".." / [ast, idents, lineinfos, msgs, ropes, options, import ".." / [ast, idents, lineinfos, msgs, ropes, options,
pathutils, condsyms] pathutils, condsyms]
#import ".." / [renderer, astalgo] #import ".." / [renderer, astalgo]
from std / os import removeFile, isAbsolute from os import removeFile, isAbsolute
type type
PackedConfig* = object PackedConfig* = object
@ -143,7 +143,7 @@ const
debugConfigDiff = defined(debugConfigDiff) debugConfigDiff = defined(debugConfigDiff)
when debugConfigDiff: when debugConfigDiff:
import std / [hashes, tables, intsets, sha1, strutils, sets] import hashes, tables, intsets, sha1, strutils, sets
proc configIdentical(m: PackedModule; config: ConfigRef): bool = proc configIdentical(m: PackedModule; config: ConfigRef): bool =
result = m.definedSymbols == definedSymbolsAsString(config) result = m.definedSymbols == definedSymbolsAsString(config)

View file

@ -10,7 +10,7 @@
## Integrity checking for a set of .rod files. ## Integrity checking for a set of .rod files.
## The set must cover a complete Nim project. ## The set must cover a complete Nim project.
import std / sets import sets
import ".." / [ast, modulegraphs] import ".." / [ast, modulegraphs]
import packed_ast, bitabs, ic import packed_ast, bitabs, ic

View file

@ -11,7 +11,7 @@
## IDE-like features. It uses the set of .rod files to accomplish ## IDE-like features. It uses the set of .rod files to accomplish
## its task. The set must cover a complete Nim project. ## its task. The set must cover a complete Nim project.
import std / sets import sets
from os import nil from os import nil
from std/private/miscdollars import toLocation from std/private/miscdollars import toLocation

View file

@ -12,7 +12,7 @@
## use this representation directly in all the transformations, ## use this representation directly in all the transformations,
## it is superior. ## it is superior.
import std / [hashes, tables, strtabs] import hashes, tables, strtabs
import bitabs import bitabs
import ".." / [ast, options] import ".." / [ast, options]

View file

@ -3,7 +3,7 @@
## hold all from `low(BiggestInt)` to `high(BiggestUInt)`, This ## hold all from `low(BiggestInt)` to `high(BiggestUInt)`, This
## type is for that purpose. ## type is for that purpose.
from std/math import trunc from math import trunc
type type
Int128* = object Int128* = object
@ -378,7 +378,7 @@ proc `*`*(lhs, rhs: Int128): Int128 =
proc `*=`*(a: var Int128, b: Int128) = proc `*=`*(a: var Int128, b: Int128) =
a = a * b a = a * b
import std/bitops import bitops
proc fastLog2*(a: Int128): int = proc fastLog2*(a: Int128): int =
if a.udata[3] != 0: if a.udata[3] != 0:

View file

@ -35,7 +35,7 @@ import
cgmeth, lowerings, sighashes, modulegraphs, lineinfos, rodutils, cgmeth, lowerings, sighashes, modulegraphs, lineinfos, rodutils,
transf, injectdestructors, sourcemap transf, injectdestructors, sourcemap
import std/[json, sets, math, tables, intsets, strutils] import json, sets, math, tables, intsets, strutils
from modulegraphs import ModuleGraph, PPassContext from modulegraphs import ModuleGraph, PPassContext

View file

@ -372,7 +372,7 @@ when false:
of 'a'..'z': result = getIdent(c.cache, toLowerAscii(x.s[0]) & x.s.substr(1)) of 'a'..'z': result = getIdent(c.cache, toLowerAscii(x.s[0]) & x.s.substr(1))
else: result = x else: result = x
import std/[editdistance, heapqueue] import std/editdistance, heapqueue
type SpellCandidate = object type SpellCandidate = object
dist: int dist: int

View file

@ -11,7 +11,7 @@
## represents a complete Nim project. Single modules can either be kept in RAM ## represents a complete Nim project. Single modules can either be kept in RAM
## or stored in a rod-file. ## or stored in a rod-file.
import std / [intsets, tables, hashes, md5] import intsets, tables, hashes, md5
import ast, astalgo, options, lineinfos,idents, btrees, ropes, msgs, pathutils import ast, astalgo, options, lineinfos,idents, btrees, ropes, msgs, pathutils
import ic / [packed_ast, ic] import ic / [packed_ast, ic]

View file

@ -8,7 +8,7 @@
# #
import ast, renderer, intsets, tables, msgs, options, lineinfos, strformat, idents, treetab, hashes import ast, renderer, intsets, tables, msgs, options, lineinfos, strformat, idents, treetab, hashes
import sequtils, strutils, std / sets import sequtils, strutils, sets
# IMPORTANT: notes not up to date, i'll update this comment again # IMPORTANT: notes not up to date, i'll update this comment again
# #

View file

@ -24,7 +24,7 @@ import
idents, lineinfos, cmdlinehelper, idents, lineinfos, cmdlinehelper,
pathutils, modulegraphs pathutils, modulegraphs
from std/browsers import openDefaultBrowser from browsers import openDefaultBrowser
from nodejs import findNodeJs from nodejs import findNodeJs
when hasTinyCBackend: when hasTinyCBackend:

View file

@ -17,7 +17,7 @@ interpolation variables:
Unstable API Unstable API
]## ]##
import std/[os,strutils] import os, strutils
const const
docCss* = "$nimr/doc/nimdoc.css" docCss* = "$nimr/doc/nimdoc.css"

View file

@ -8,7 +8,7 @@
# #
## Serialization utilities for the compiler. ## Serialization utilities for the compiler.
import std/[strutils, math] import strutils, math
# bcc on windows doesn't have C99 functions # bcc on windows doesn't have C99 functions
when defined(windows) and defined(bcc): when defined(windows) and defined(bcc):

View file

@ -9,7 +9,7 @@
## This module contains the data structures for the semantic checking phase. ## This module contains the data structures for the semantic checking phase.
import std / tables import tables
import import
intsets, options, ast, astalgo, msgs, idents, renderer, intsets, options, ast, astalgo, msgs, idents, renderer,

View file

@ -10,7 +10,7 @@
# this module does the semantic checking of type declarations # this module does the semantic checking of type declarations
# included from sem.nim # included from sem.nim
import std/math import math
const const
errStringOrIdentNodeExpected = "string or ident node expected" errStringOrIdentNodeExpected = "string or ident node expected"

View file

@ -10,7 +10,7 @@
## This module contains the type definitions for the new evaluation engine. ## This module contains the type definitions for the new evaluation engine.
## An instruction is 1-3 int32s in memory, it is a register based VM. ## An instruction is 1-3 int32s in memory, it is a register based VM.
import std / tables import tables
import ast, idents, options, modulegraphs, lineinfos import ast, idents, options, modulegraphs, lineinfos

View file

@ -27,7 +27,7 @@
# solves the opcLdConst vs opcAsgnConst issue. Of course whether we need # solves the opcLdConst vs opcAsgnConst issue. Of course whether we need
# this copy depends on the involved types. # this copy depends on the involved types.
import std / tables import tables
import import
strutils, ast, types, msgs, renderer, vmdef, strutils, ast, types, msgs, renderer, vmdef,

View file

@ -9,24 +9,24 @@
# Unfortunately this cannot be a module yet: # Unfortunately this cannot be a module yet:
#import vmdeps, vm #import vmdeps, vm
from std/math import sqrt, ln, log10, log2, exp, round, arccos, arcsin, from math import sqrt, ln, log10, log2, exp, round, arccos, arcsin,
arctan, arctan2, cos, cosh, hypot, sinh, sin, tan, tanh, pow, trunc, arctan, arctan2, cos, cosh, hypot, sinh, sin, tan, tanh, pow, trunc,
floor, ceil, `mod`, cbrt, arcsinh, arccosh, arctanh, erf, erfc, gamma, floor, ceil, `mod`, cbrt, arcsinh, arccosh, arctanh, erf, erfc, gamma,
lgamma lgamma
when declared(math.copySign): when declared(math.copySign):
from std/math import copySign from math import copySign
when declared(math.signbit): when declared(math.signbit):
from std/math import signbit from math import signbit
from std/os import getEnv, existsEnv, dirExists, fileExists, putEnv, walkDir, from os import getEnv, existsEnv, dirExists, fileExists, putEnv, walkDir,
getAppFilename, raiseOSError, osLastError getAppFilename, raiseOSError, osLastError
from std/md5 import getMD5 from md5 import getMD5
from std/times import cpuTime from times import cpuTime
from std/hashes import hash from hashes import hash
from std/osproc import nil from osproc import nil
from sighashes import symBodyDigest from sighashes import symBodyDigest

View file

@ -17,58 +17,58 @@ type
TSpecialWord* = enum TSpecialWord* = enum
wInvalid = "", wInvalid = "",
wAddr = "addr", wAnd = "and", wAs = "as", wAsm = "asm", wAddr = "addr", wAnd = "and", wAs = "as", wAsm = "asm",
wBind = "bind", wBlock = "block", wBreak = "break", wCase = "case", wCast = "cast", wBind = "bind", wBlock = "block", wBreak = "break", wCase = "case", wCast = "cast",
wConcept = "concept", wConst = "const", wContinue = "continue", wConverter = "converter", wConcept = "concept", wConst = "const", wContinue = "continue", wConverter = "converter",
wDefer = "defer", wDiscard = "discard", wDistinct = "distinct", wDiv = "div", wDo = "do", wDefer = "defer", wDiscard = "discard", wDistinct = "distinct", wDiv = "div", wDo = "do",
wElif = "elif", wElse = "else", wEnd = "end", wEnum = "enum", wExcept = "except", wElif = "elif", wElse = "else", wEnd = "end", wEnum = "enum", wExcept = "except",
wExport = "export", wFinally = "finally", wFor = "for", wFrom = "from", wFunc = "func", wExport = "export", wFinally = "finally", wFor = "for", wFrom = "from", wFunc = "func",
wIf = "if", wImport = "import", wIn = "in", wInclude = "include", wInterface = "interface", wIf = "if", wImport = "import", wIn = "in", wInclude = "include", wInterface = "interface",
wIs = "is", wIsnot = "isnot", wIterator = "iterator", wLet = "let", wMacro = "macro", wIs = "is", wIsnot = "isnot", wIterator = "iterator", wLet = "let", wMacro = "macro",
wMethod = "method", wMixin = "mixin", wMod = "mod", wNil = "nil", wNot = "not", wNotin = "notin", wMethod = "method", wMixin = "mixin", wMod = "mod", wNil = "nil", wNot = "not", wNotin = "notin",
wObject = "object", wOf = "of", wOr = "or", wOut = "out", wProc = "proc", wPtr = "ptr", wObject = "object", wOf = "of", wOr = "or", wOut = "out", wProc = "proc", wPtr = "ptr",
wRaise = "raise", wRef = "ref", wReturn = "return", wShl = "shl", wShr = "shr", wStatic = "static", wRaise = "raise", wRef = "ref", wReturn = "return", wShl = "shl", wShr = "shr", wStatic = "static",
wTemplate = "template", wTry = "try", wTuple = "tuple", wType = "type", wUsing = "using", wTemplate = "template", wTry = "try", wTuple = "tuple", wType = "type", wUsing = "using",
wVar = "var", wWhen = "when", wWhile = "while", wXor = "xor", wYield = "yield", wVar = "var", wWhen = "when", wWhile = "while", wXor = "xor", wYield = "yield",
wColon = ":", wColonColon = "::", wEquals = "=", wDot = ".", wDotDot = "..", wColon = ":", wColonColon = "::", wEquals = "=", wDot = ".", wDotDot = "..",
wStar = "*", wMinus = "-", wStar = "*", wMinus = "-",
wMagic = "magic", wThread = "thread", wFinal = "final", wProfiler = "profiler", wMagic = "magic", wThread = "thread", wFinal = "final", wProfiler = "profiler",
wMemTracker = "memtracker", wObjChecks = "objchecks", wMemTracker = "memtracker", wObjChecks = "objchecks",
wIntDefine = "intdefine", wStrDefine = "strdefine", wBoolDefine = "booldefine", wIntDefine = "intdefine", wStrDefine = "strdefine", wBoolDefine = "booldefine",
wCursor = "cursor", wNoalias = "noalias", wCursor = "cursor", wNoalias = "noalias",
wImmediate = "immediate", wConstructor = "constructor", wDestructor = "destructor", wImmediate = "immediate", wConstructor = "constructor", wDestructor = "destructor",
wDelegator = "delegator", wOverride = "override", wImportCpp = "importcpp", wDelegator = "delegator", wOverride = "override", wImportCpp = "importcpp",
wCppNonPod = "cppNonPod", wCppNonPod = "cppNonPod",
wImportObjC = "importobjc", wImportCompilerProc = "importcompilerproc", wImportObjC = "importobjc", wImportCompilerProc = "importcompilerproc",
wImportc = "importc", wImportJs = "importjs", wExportc = "exportc", wExportCpp = "exportcpp", wImportc = "importc", wImportJs = "importjs", wExportc = "exportc", wExportCpp = "exportcpp",
wExportNims = "exportnims", wExportNims = "exportnims",
wIncompleteStruct = "incompleteStruct", # deprecated wIncompleteStruct = "incompleteStruct", # deprecated
wCompleteStruct = "completeStruct", wRequiresInit = "requiresInit", wAlign = "align", wCompleteStruct = "completeStruct", wRequiresInit = "requiresInit", wAlign = "align",
wNodecl = "nodecl", wPure = "pure", wSideEffect = "sideEffect", wHeader = "header", wNodecl = "nodecl", wPure = "pure", wSideEffect = "sideEffect", wHeader = "header",
wNoSideEffect = "noSideEffect", wGcSafe = "gcsafe", wNoreturn = "noreturn", wNoSideEffect = "noSideEffect", wGcSafe = "gcsafe", wNoreturn = "noreturn",
wNosinks = "nosinks", wMerge = "merge", wLib = "lib", wDynlib = "dynlib", wNosinks = "nosinks", wMerge = "merge", wLib = "lib", wDynlib = "dynlib",
wCompilerProc = "compilerproc", wCore = "core", wProcVar = "procvar", wCompilerProc = "compilerproc", wCore = "core", wProcVar = "procvar",
wBase = "base", wUsed = "used", wFatal = "fatal", wError = "error", wWarning = "warning", wBase = "base", wUsed = "used", wFatal = "fatal", wError = "error", wWarning = "warning",
wHint = "hint", wHint = "hint",
wWarningAsError = "warningAsError", wWarningAsError = "warningAsError",
wHintAsError = "hintAsError", wHintAsError = "hintAsError",
wLine = "line", wPush = "push", wLine = "line", wPush = "push",
wPop = "pop", wDefine = "define", wUndef = "undef", wLineDir = "lineDir", wPop = "pop", wDefine = "define", wUndef = "undef", wLineDir = "lineDir",
wStackTrace = "stackTrace", wLineTrace = "lineTrace", wLink = "link", wCompile = "compile", wStackTrace = "stackTrace", wLineTrace = "lineTrace", wLink = "link", wCompile = "compile",
wLinksys = "linksys", wDeprecated = "deprecated", wVarargs = "varargs", wCallconv = "callconv", wLinksys = "linksys", wDeprecated = "deprecated", wVarargs = "varargs", wCallconv = "callconv",
wDebugger = "debugger", wNimcall = "nimcall", wStdcall = "stdcall", wCdecl = "cdecl", wDebugger = "debugger", wNimcall = "nimcall", wStdcall = "stdcall", wCdecl = "cdecl",
wSafecall = "safecall", wSyscall = "syscall", wInline = "inline", wNoInline = "noinline", wSafecall = "safecall", wSyscall = "syscall", wInline = "inline", wNoInline = "noinline",
wFastcall = "fastcall", wThiscall = "thiscall", wClosure = "closure", wNoconv = "noconv", wFastcall = "fastcall", wThiscall = "thiscall", wClosure = "closure", wNoconv = "noconv",
wOn = "on", wOff = "off", wChecks = "checks", wRangeChecks = "rangeChecks", wOn = "on", wOff = "off", wChecks = "checks", wRangeChecks = "rangeChecks",
wBoundChecks = "boundChecks", wOverflowChecks = "overflowChecks", wNilChecks = "nilChecks", wBoundChecks = "boundChecks", wOverflowChecks = "overflowChecks", wNilChecks = "nilChecks",
wFloatChecks = "floatChecks", wNanChecks = "nanChecks", wInfChecks = "infChecks", wFloatChecks = "floatChecks", wNanChecks = "nanChecks", wInfChecks = "infChecks",
wStyleChecks = "styleChecks", wStaticBoundchecks = "staticBoundChecks", wStyleChecks = "styleChecks", wStaticBoundchecks = "staticBoundChecks",
wNonReloadable = "nonReloadable", wExecuteOnReload = "executeOnReload", wNonReloadable = "nonReloadable", wExecuteOnReload = "executeOnReload",
wAssertions = "assertions", wPatterns = "patterns", wTrMacros = "trmacros", wAssertions = "assertions", wPatterns = "patterns", wTrMacros = "trmacros",
wSinkInference = "sinkInference", wWarnings = "warnings", wSinkInference = "sinkInference", wWarnings = "warnings",
wHints = "hints", wOptimization = "optimization", wRaises = "raises", wHints = "hints", wOptimization = "optimization", wRaises = "raises",
wWrites = "writes", wReads = "reads", wSize = "size", wEffects = "effects", wTags = "tags", wWrites = "writes", wReads = "reads", wSize = "size", wEffects = "effects", wTags = "tags",
wRequires = "requires", wEnsures = "ensures", wInvariant = "invariant", wRequires = "requires", wEnsures = "ensures", wInvariant = "invariant",
wAssume = "assume", wAssert = "assert", wAssume = "assume", wAssert = "assert",
@ -76,34 +76,34 @@ type
wSafecode = "safecode", wPackage = "package", wNoForward = "noforward", wReorder = "reorder", wSafecode = "safecode", wPackage = "package", wNoForward = "noforward", wReorder = "reorder",
wNoRewrite = "norewrite", wNoDestroy = "nodestroy", wPragma = "pragma", wNoRewrite = "norewrite", wNoDestroy = "nodestroy", wPragma = "pragma",
wCompileTime = "compileTime", wNoInit = "noinit", wPassc = "passc", wPassl = "passl", wCompileTime = "compileTime", wNoInit = "noinit", wPassc = "passc", wPassl = "passl",
wLocalPassc = "localPassC", wBorrow = "borrow", wDiscardable = "discardable", wLocalPassc = "localPassC", wBorrow = "borrow", wDiscardable = "discardable",
wFieldChecks = "fieldChecks", wSubsChar = "subschar", wAcyclic = "acyclic", wFieldChecks = "fieldChecks", wSubsChar = "subschar", wAcyclic = "acyclic",
wShallow = "shallow", wUnroll = "unroll", wLinearScanEnd = "linearScanEnd", wShallow = "shallow", wUnroll = "unroll", wLinearScanEnd = "linearScanEnd",
wComputedGoto = "computedGoto", wInjectStmt = "injectStmt", wExperimental = "experimental", wComputedGoto = "computedGoto", wInjectStmt = "injectStmt", wExperimental = "experimental",
wWrite = "write", wGensym = "gensym", wInject = "inject", wDirty = "dirty", wWrite = "write", wGensym = "gensym", wInject = "inject", wDirty = "dirty",
wInheritable = "inheritable", wThreadVar = "threadvar", wEmit = "emit", wInheritable = "inheritable", wThreadVar = "threadvar", wEmit = "emit",
wAsmNoStackFrame = "asmNoStackFrame", wImplicitStatic = "implicitStatic", wAsmNoStackFrame = "asmNoStackFrame", wImplicitStatic = "implicitStatic",
wGlobal = "global", wCodegenDecl = "codegenDecl", wUnchecked = "unchecked", wGlobal = "global", wCodegenDecl = "codegenDecl", wUnchecked = "unchecked",
wGuard = "guard", wLocks = "locks", wPartial = "partial", wExplain = "explain", wGuard = "guard", wLocks = "locks", wPartial = "partial", wExplain = "explain",
wLiftLocals = "liftlocals", wLiftLocals = "liftlocals",
wAuto = "auto", wBool = "bool", wCatch = "catch", wChar = "char", wAuto = "auto", wBool = "bool", wCatch = "catch", wChar = "char",
wClass = "class", wCompl = "compl", wConst_cast = "const_cast", wDefault = "default", wClass = "class", wCompl = "compl", wConst_cast = "const_cast", wDefault = "default",
wDelete = "delete", wDouble = "double", wDynamic_cast = "dynamic_cast", wDelete = "delete", wDouble = "double", wDynamic_cast = "dynamic_cast",
wExplicit = "explicit", wExtern = "extern", wFalse = "false", wFloat = "float", wExplicit = "explicit", wExtern = "extern", wFalse = "false", wFloat = "float",
wFriend = "friend", wGoto = "goto", wInt = "int", wLong = "long", wMutable = "mutable", wFriend = "friend", wGoto = "goto", wInt = "int", wLong = "long", wMutable = "mutable",
wNamespace = "namespace", wNew = "new", wOperator = "operator", wPrivate = "private", wNamespace = "namespace", wNew = "new", wOperator = "operator", wPrivate = "private",
wProtected = "protected", wPublic = "public", wRegister = "register", wProtected = "protected", wPublic = "public", wRegister = "register",
wReinterpret_cast = "reinterpret_cast", wRestrict = "restrict", wShort = "short", wReinterpret_cast = "reinterpret_cast", wRestrict = "restrict", wShort = "short",
wSigned = "signed", wSizeof = "sizeof", wStatic_cast = "static_cast", wStruct = "struct", wSigned = "signed", wSizeof = "sizeof", wStatic_cast = "static_cast", wStruct = "struct",
wSwitch = "switch", wThis = "this", wThrow = "throw", wTrue = "true", wTypedef = "typedef", wSwitch = "switch", wThis = "this", wThrow = "throw", wTrue = "true", wTypedef = "typedef",
wTypeid = "typeid", wTypeof = "typeof", wTypename = "typename", wTypeid = "typeid", wTypeof = "typeof", wTypename = "typename",
wUnion = "union", wPacked = "packed", wUnsigned = "unsigned", wVirtual = "virtual", wUnion = "union", wPacked = "packed", wUnsigned = "unsigned", wVirtual = "virtual",
wVoid = "void", wVolatile = "volatile", wWchar_t = "wchar_t", wVoid = "void", wVolatile = "volatile", wWchar_t = "wchar_t",
wAlignas = "alignas", wAlignof = "alignof", wConstexpr = "constexpr", wDecltype = "decltype", wAlignas = "alignas", wAlignof = "alignof", wConstexpr = "constexpr", wDecltype = "decltype",
wNullptr = "nullptr", wNoexcept = "noexcept", wNullptr = "nullptr", wNoexcept = "noexcept",
wThread_local = "thread_local", wStatic_assert = "static_assert", wThread_local = "thread_local", wStatic_assert = "static_assert",
wChar16_t = "char16_t", wChar32_t = "char32_t", wChar16_t = "char16_t", wChar32_t = "char32_t",
wStdIn = "stdin", wStdOut = "stdout", wStdErr = "stderr", wStdIn = "stdin", wStdOut = "stdout", wStdErr = "stderr",
@ -134,14 +134,14 @@ const enumUtilsExist = compiles:
when enumUtilsExist: when enumUtilsExist:
from std/enumutils import genEnumCaseStmt from std/enumutils import genEnumCaseStmt
from strutils import normalize from strutils import normalize
proc findStr*[T: enum](a, b: static[T], s: string, default: T): T = proc findStr*[T: enum](a, b: static[T], s: string, default: T): T =
genEnumCaseStmt(T, s, default, ord(a), ord(b), normalize) genEnumCaseStmt(T, s, default, ord(a), ord(b), normalize)
else: else:
from strutils import cmpIgnoreStyle from strutils import cmpIgnoreStyle
proc findStr*[T: enum](a, b: static[T], s: string, default: T): T {.deprecated.} = proc findStr*[T: enum](a, b: static[T], s: string, default: T): T {.deprecated.} =
# used for compiler bootstrapping only # used for compiler bootstrapping only
for i in a..b: for i in a..b:
if cmpIgnoreStyle($i, s) == 0: if cmpIgnoreStyle($i, s) == 0:
return i return i
result = default result = default

View file

@ -29,7 +29,7 @@
## writeLine(stdout, "your password: " & myData["password"]) ## writeLine(stdout, "your password: " & myData["password"])
## writeLine(stdout, "</body></html>") ## writeLine(stdout, "</body></html>")
import std/[strutils, os, strtabs, cookies, uri] import strutils, os, strtabs, cookies, uri
export uri.encodeUrl, uri.decodeUrl export uri.encodeUrl, uri.decodeUrl

View file

@ -50,7 +50,7 @@ runnableExamples:
import std/private/since import std/private/since
import std/math import math
type type
Deque*[T] = object Deque*[T] = object

View file

@ -196,7 +196,7 @@ runnableExamples:
import std/private/since import std/private/since
import std/[hashes, math, algorithm] import hashes, math, algorithm
type type
KeyValuePair[A, B] = tuple[hcode: Hash, key: A, val: B] KeyValuePair[A, B] = tuple[hcode: Hash, key: A, val: B]

View file

@ -36,7 +36,7 @@ runnableExamples:
{.push checks: off, line_dir: off, stack_trace: off, debugger: off.} {.push checks: off, line_dir: off, stack_trace: off, debugger: off.}
# the user does not want to trace a part of the standard library! # the user does not want to trace a part of the standard library!
import std/math import math
type type
Complex*[T: SomeFloat] = object Complex*[T: SomeFloat] = object

View file

@ -9,7 +9,7 @@
## This module implements helper procs for parsing Cookies. ## This module implements helper procs for parsing Cookies.
import std/[strtabs, times, options] import strtabs, times, options
type type
@ -25,7 +25,7 @@ proc parseCookies*(s: string): StringTableRef =
## "Set-Cookie" header set by servers. ## "Set-Cookie" header set by servers.
runnableExamples: runnableExamples:
import std/strtabs import std/strtabs
let cookieJar = parseCookies("a=1; foo=bar") let cookieJar = parseCookies("a=1; foo=bar")
assert cookieJar["a"] == "1" assert cookieJar["a"] == "1"
assert cookieJar["foo"] == "bar" assert cookieJar["foo"] == "bar"
@ -46,7 +46,7 @@ proc parseCookies*(s: string): StringTableRef =
proc setCookie*(key, value: string, domain = "", path = "", proc setCookie*(key, value: string, domain = "", path = "",
expires = "", noName = false, expires = "", noName = false,
secure = false, httpOnly = false, secure = false, httpOnly = false,
maxAge = none(int), sameSite = SameSite.Default): string = maxAge = none(int), sameSite = SameSite.Default): string =
## Creates a command in the format of ## Creates a command in the format of
## `Set-Cookie: key=value; Domain=...; ...` ## `Set-Cookie: key=value; Domain=...; ...`

View file

@ -27,11 +27,11 @@
## ##
## See `packaging <packaging.html>`_ for hints on distributing Nim using OS packages. ## See `packaging <packaging.html>`_ for hints on distributing Nim using OS packages.
from std/strutils import contains, toLowerAscii from strutils import contains, toLowerAscii
when not defined(nimscript): when not defined(nimscript):
from std/osproc import execProcess from osproc import execProcess
from std/os import existsEnv from os import existsEnv
type type
Distribution* {.pure.} = enum ## the list of known distributions Distribution* {.pure.} = enum ## the list of known distributions

View file

@ -159,10 +159,9 @@ runnableExamples:
a1, a2, a0, a3, a4: int a1, a2, a0, a3, a4: int
doAssert $(%* Foo()) == """{"a1":0,"a2":0,"a0":0,"a3":0,"a4":0}""" doAssert $(%* Foo()) == """{"a1":0,"a2":0,"a0":0,"a3":0,"a4":0}"""
import import hashes, tables, strutils, lexbase, streams, macros, parsejson
std/[hashes, tables, strutils, lexbase, streams, macros, parsejson]
import std/options # xxx remove this dependency using same approach as https://github.com/nim-lang/Nim/pull/14563 import options # xxx remove this dependency using same approach as https://github.com/nim-lang/Nim/pull/14563
import std/private/since import std/private/since
export export
@ -921,7 +920,7 @@ proc parseJson*(s: Stream, filename: string = ""; rawIntegers = false, rawFloats
p.close() p.close()
when defined(js): when defined(js):
from std/math import `mod` from math import `mod`
from std/jsffi import JSObject, `[]`, to from std/jsffi import JSObject, `[]`, to
from std/private/jsutils import getProtoName, isInteger, isSafeInteger from std/private/jsutils import getProtoName, isInteger, isSafeInteger

View file

@ -54,7 +54,7 @@ Please use alternative packages for serialization.
It is possible to reimplement this module using generics and type traits. It is possible to reimplement this module using generics and type traits.
Please contribute a new implementation.""".} Please contribute a new implementation.""".}
import std/[streams, typeinfo, json, intsets, tables, unicode] import streams, typeinfo, json, intsets, tables, unicode
proc ptrToInt(x: pointer): int {.inline.} = proc ptrToInt(x: pointer): int {.inline.} =
result = cast[int](x) # don't skip alignment result = cast[int](x) # don't skip alignment

View file

@ -58,7 +58,7 @@ import std/private/since
{.push debugger: off.} # the user does not want to trace a part {.push debugger: off.} # the user does not want to trace a part
# of the standard library! # of the standard library!
import std/[bitops, fenv] import bitops, fenv
when defined(c) or defined(cpp): when defined(c) or defined(cpp):
proc c_isnan(x: float): bool {.importc: "isnan", header: "<math.h>".} proc c_isnan(x: float): bool {.importc: "isnan", header: "<math.h>".}

View file

@ -15,7 +15,7 @@
## This implementation calls `initRand()` for the first call of ## This implementation calls `initRand()` for the first call of
## `genOid`. ## `genOid`.
import std/[hashes, times, endians, random] import hashes, times, endians, random
from std/private/decode_helpers import handleHexChar from std/private/decode_helpers import handleHexChar
type type

View file

@ -69,7 +69,7 @@ supports pattern matching on `Option`s, with the `Some(<pattern>)` and
# xxx pending https://github.com/timotheecour/Nim/issues/376 use `runnableExamples` and `whichModule` # xxx pending https://github.com/timotheecour/Nim/issues/376 use `runnableExamples` and `whichModule`
import std/typetraits import typetraits
when (NimMajor, NimMinor) >= (1, 1): when (NimMajor, NimMinor) >= (1, 1):
type type

View file

@ -44,7 +44,7 @@
include system/inclrtl include system/inclrtl
import std/private/since import std/private/since
import std/[strutils, pathnorm] import strutils, pathnorm
const weirdTarget = defined(nimscript) or defined(js) const weirdTarget = defined(nimscript) or defined(js)
@ -65,9 +65,9 @@ since (1, 1):
when weirdTarget: when weirdTarget:
discard discard
elif defined(windows): elif defined(windows):
import std/[winlean, times] import winlean, times
elif defined(posix): elif defined(posix):
import std/[posix, times] import posix, times
proc toTime(ts: Timespec): times.Time {.inline.} = proc toTime(ts: Timespec): times.Time {.inline.} =
result = initTime(ts.tv_sec.int64, ts.tv_nsec.int) result = initTime(ts.tv_sec.int64, ts.tv_nsec.int)
@ -1008,7 +1008,7 @@ proc expandTilde*(path: string): string {.
## ##
## Windows: this is still supported despite Windows platform not having this ## Windows: this is still supported despite Windows platform not having this
## convention; also, both ``~/`` and ``~\`` are handled. ## convention; also, both ``~/`` and ``~\`` are handled.
## ##
## .. warning:: `~bob` and `~bob/` are not yet handled correctly. ## .. warning:: `~bob` and `~bob/` are not yet handled correctly.
## ##
## See also: ## See also:

View file

@ -72,7 +72,7 @@ runnableExamples:
## * `list of cryptographic and hashing modules <lib.html#pure-libraries-hashing>`_ ## * `list of cryptographic and hashing modules <lib.html#pure-libraries-hashing>`_
## in the standard library ## in the standard library
import std/[algorithm, math] import algorithm, math
import std/private/since import std/private/since
include system/inclrtl include system/inclrtl
@ -625,7 +625,7 @@ proc shuffle*[T](x: var openArray[T]) =
shuffle(state, x) shuffle(state, x)
when not defined(nimscript) and not defined(standalone): when not defined(nimscript) and not defined(standalone):
import std/times import times
proc initRand(): Rand = proc initRand(): Rand =
## Initializes a new Rand state with a seed based on the current time. ## Initializes a new Rand state with a seed based on the current time.

View file

@ -21,7 +21,7 @@ runnableExamples:
doAssert r1 * r2 == -3 // 8 doAssert r1 * r2 == -3 // 8
doAssert r1 / r2 == -2 // 3 doAssert r1 / r2 == -2 // 3
import std/[math, hashes] import math, hashes
type Rational*[T] = object type Rational*[T] = object
## A rational number, consisting of a numerator `num` and a denominator `den`. ## A rational number, consisting of a numerator `num` and a denominator `den`.

View file

@ -17,7 +17,7 @@
## runtime efficiency. ## runtime efficiency.
include system/inclrtl include system/inclrtl
import std/streams import streams
{.push debugger: off.} # the user does not want to trace a part {.push debugger: off.} # the user does not want to trace a part
# of the standard library! # of the standard library!

View file

@ -53,7 +53,7 @@ runnableExamples:
doAssert statistics.kurtosis() ~= -1.0 doAssert statistics.kurtosis() ~= -1.0
doAssert statistics.kurtosisS() ~= -0.7000000000000008 doAssert statistics.kurtosisS() ~= -0.7000000000000008
from std/math import FloatClass, sqrt, pow, round from math import FloatClass, sqrt, pow, round
{.push debugger: off.} # the user does not want to trace a part {.push debugger: off.} # the user does not want to trace a part
# of the standard library! # of the standard library!

View file

@ -313,8 +313,8 @@ help with readability, since there is only so much you can cram into
single letter DSLs. single letter DSLs.
]## ]##
import std/[macros, parseutils, unicode] import macros, parseutils, unicode
import std/strutils except format import strutils except format
proc mkDigit(v: int, typ: char): string {.inline.} = proc mkDigit(v: int, typ: char): string {.inline.} =
assert(v < 26) assert(v < 26)

View file

@ -11,7 +11,7 @@
## macro system. ## macro system.
import std/private/since import std/private/since
import std/macros import macros
proc checkPragma(ex, prag: var NimNode) = proc checkPragma(ex, prag: var NimNode) =
since (1, 3): since (1, 3):

View file

@ -167,7 +167,7 @@ since (1, 3, 5):
typeof(block: (for ai in a: ai)) typeof(block: (for ai in a: ai))
import std/macros import macros
macro enumLen*(T: typedesc[enum]): int = macro enumLen*(T: typedesc[enum]): int =
## Returns the number of items in the enum `T`. ## Returns the number of items in the enum `T`.

View file

@ -108,15 +108,15 @@
import std/private/since import std/private/since
import std/exitprocs import std/exitprocs
import std/[macros, strutils, streams, times, sets, sequtils] import macros, strutils, streams, times, sets, sequtils
when declared(stdout): when declared(stdout):
import std/os import os
const useTerminal = not defined(js) const useTerminal = not defined(js)
when useTerminal: when useTerminal:
import std/terminal import terminal
type type
TestStatus* = enum ## The status of a test when it is done. TestStatus* = enum ## The status of a test when it is done.
@ -747,7 +747,7 @@ macro expect*(exceptions: varargs[typed], body: untyped): untyped =
of 2: discard parseInt("Hello World!") of 2: discard parseInt("Hello World!")
of 3: raise newException(IOError, "I can't do that Dave.") of 3: raise newException(IOError, "I can't do that Dave.")
else: assert 2 + 2 == 5 else: assert 2 + 2 == 5
expect IOError, OSError, ValueError, AssertionDefect: expect IOError, OSError, ValueError, AssertionDefect:
defectiveRobot() defectiveRobot()

View file

@ -39,7 +39,7 @@ runnableExamples:
doAssert getDataUri("Nim", "text/plain") == "data:text/plain;charset=utf-8;base64,Tmlt" doAssert getDataUri("Nim", "text/plain") == "data:text/plain;charset=utf-8;base64,Tmlt"
import std/[strutils, parseutils, base64] import strutils, parseutils, base64
import std/private/[since, decode_helpers] import std/private/[since, decode_helpers]

View file

@ -7,16 +7,16 @@
# distribution, for details about the copyright. # distribution, for details about the copyright.
# #
import std/macros import macros
from std/typetraits import OrdinalEnum, HoleyEnum from typetraits import OrdinalEnum, HoleyEnum
# xxx `genEnumCaseStmt` needs tests and runnableExamples # xxx `genEnumCaseStmt` needs tests and runnableExamples
macro genEnumCaseStmt*(typ: typedesc, argSym: typed, default: typed, macro genEnumCaseStmt*(typ: typedesc, argSym: typed, default: typed,
userMin, userMax: static[int], normalizer: static[proc(s :string): string]): untyped = userMin, userMax: static[int], normalizer: static[proc(s :string): string]): untyped =
# generates a case stmt, which assigns the correct enum field given # generates a case stmt, which assigns the correct enum field given
# a normalized string comparison to the `argSym` input. # a normalized string comparison to the `argSym` input.
# string normalization is done using passed normalizer. # string normalization is done using passed normalizer.
# NOTE: for an enum with fields Foo, Bar, ... we cannot generate # NOTE: for an enum with fields Foo, Bar, ... we cannot generate
# `of "Foo".nimIdentNormalize: Foo`. # `of "Foo".nimIdentNormalize: Foo`.
# This will fail, if the enum is not defined at top level (e.g. in a block). # This will fail, if the enum is not defined at top level (e.g. in a block).

View file

@ -13,7 +13,7 @@ runnableExamples:
let j = a.toJson let j = a.toJson
assert j.jsonTo(typeof(a)).toJson == j assert j.jsonTo(typeof(a)).toJson == j
import std/[json,strutils,tables,sets,strtabs,options] import json, strutils, tables, sets, strtabs, options
#[ #[
Future directions: Future directions:
@ -27,7 +27,7 @@ add a way to customize serialization, for e.g.:
objects. objects.
]# ]#
import std/macros import macros
type type
Joptions* = object Joptions* = object
@ -106,7 +106,7 @@ proc hasField[T](obj: T, field: string): bool =
return true return true
return false return false
macro accessField(obj: typed, name: static string): untyped = macro accessField(obj: typed, name: static string): untyped =
newDotExpr(obj, ident(name)) newDotExpr(obj, ident(name))
template fromJsonFields(newObj, oldObj, json, discKeys, opt) = template fromJsonFields(newObj, oldObj, json, discKeys, opt) =
@ -146,7 +146,7 @@ template fromJsonFields(newObj, oldObj, json, discKeys, opt) =
json.len == numMatched json.len == numMatched
else: else:
json.len == num and num == numMatched json.len == num and num == numMatched
checkJson ok, $(json.len, num, numMatched, $T, json) checkJson ok, $(json.len, num, numMatched, $T, json)
proc fromJson*[T](a: var T, b: JsonNode, opt = Joptions()) proc fromJson*[T](a: var T, b: JsonNode, opt = Joptions())
@ -284,7 +284,7 @@ proc toJson*[T](a: T): JsonNode =
proc fromJsonHook*[K: string|cstring, V](t: var (Table[K, V] | OrderedTable[K, V]), proc fromJsonHook*[K: string|cstring, V](t: var (Table[K, V] | OrderedTable[K, V]),
jsonNode: JsonNode) = jsonNode: JsonNode) =
## Enables `fromJson` for `Table` and `OrderedTable` types. ## Enables `fromJson` for `Table` and `OrderedTable` types.
## ##
## See also: ## See also:
## * `toJsonHook proc<#toJsonHook>`_ ## * `toJsonHook proc<#toJsonHook>`_
runnableExamples: runnableExamples:
@ -326,7 +326,7 @@ proc toJsonHook*[K: string|cstring, V](t: (Table[K, V] | OrderedTable[K, V])): J
proc fromJsonHook*[A](s: var SomeSet[A], jsonNode: JsonNode) = proc fromJsonHook*[A](s: var SomeSet[A], jsonNode: JsonNode) =
## Enables `fromJson` for `HashSet` and `OrderedSet` types. ## Enables `fromJson` for `HashSet` and `OrderedSet` types.
## ##
## See also: ## See also:
## * `toJsonHook proc<#toJsonHook,SomeSet[A]>`_ ## * `toJsonHook proc<#toJsonHook,SomeSet[A]>`_
runnableExamples: runnableExamples:
@ -360,7 +360,7 @@ proc toJsonHook*[A](s: SomeSet[A]): JsonNode =
proc fromJsonHook*[T](self: var Option[T], jsonNode: JsonNode) = proc fromJsonHook*[T](self: var Option[T], jsonNode: JsonNode) =
## Enables `fromJson` for `Option` types. ## Enables `fromJson` for `Option` types.
## ##
## See also: ## See also:
## * `toJsonHook proc<#toJsonHook,Option[T]>`_ ## * `toJsonHook proc<#toJsonHook,Option[T]>`_
runnableExamples: runnableExamples:
@ -395,7 +395,7 @@ proc toJsonHook*[T](self: Option[T]): JsonNode =
proc fromJsonHook*(a: var StringTableRef, b: JsonNode) = proc fromJsonHook*(a: var StringTableRef, b: JsonNode) =
## Enables `fromJson` for `StringTableRef` type. ## Enables `fromJson` for `StringTableRef` type.
## ##
## See also: ## See also:
## * `toJsonHook proc<#toJsonHook,StringTableRef>`_ ## * `toJsonHook proc<#toJsonHook,StringTableRef>`_
runnableExamples: runnableExamples:
@ -413,7 +413,7 @@ proc fromJsonHook*(a: var StringTableRef, b: JsonNode) =
proc toJsonHook*(a: StringTableRef): JsonNode = proc toJsonHook*(a: StringTableRef): JsonNode =
## Enables `toJson` for `StringTableRef` type. ## Enables `toJson` for `StringTableRef` type.
## ##
## See also: ## See also:
## * `fromJsonHook proc<#fromJsonHook,StringTableRef,JsonNode>`_ ## * `fromJsonHook proc<#fromJsonHook,StringTableRef,JsonNode>`_
runnableExamples: runnableExamples:

View file

@ -39,7 +39,7 @@ See also
* `times module <times.html>`_ * `times module <times.html>`_
]## ]##
import std/times import times
type type
MonoTime* = object ## Represents a monotonic timestamp. MonoTime* = object ## Represents a monotonic timestamp.
@ -77,7 +77,7 @@ when defined(js):
{.pop.} {.pop.}
elif defined(posix) and not defined(osx): elif defined(posix) and not defined(osx):
import std/posix import posix
elif defined(windows): elif defined(windows):
proc QueryPerformanceCounter(res: var uint64) {. proc QueryPerformanceCounter(res: var uint64) {.

View file

@ -4,7 +4,7 @@ this can eventually be moved to std/os and `walkDirRec` can be implemented in te
to avoid duplication to avoid duplication
]## ]##
import std/[os] import os
when defined(windows): when defined(windows):
from strutils import replace from strutils import replace

View file

@ -14,7 +14,7 @@
## * `std/packedsets <packedsets.html>`_ ## * `std/packedsets <packedsets.html>`_
## * `std/sets <sets.html>`_ ## * `std/sets <sets.html>`_
import std/[typetraits, macros] import typetraits, macros
#[ #[
type SetElement* = char|byte|bool|int16|uint16|enum|uint8|int8 type SetElement* = char|byte|bool|int16|uint16|enum|uint8|int8

View file

@ -26,8 +26,8 @@ runnableExamples("-r:off"):
b = parseSecureHash("10DFAEBF6BFDBC7939957068E2EFACEC4972933C") b = parseSecureHash("10DFAEBF6BFDBC7939957068E2EFACEC4972933C")
assert a == b, "files don't match" assert a == b, "files don't match"
import std/strutils import strutils
from std/endians import bigEndian32, bigEndian64 from endians import bigEndian32, bigEndian64
const Sha1DigestSize = 20 const Sha1DigestSize = 20

View file

@ -10,7 +10,7 @@
## .. warning:: This module was added in Nim 1.6. If you are using it for cryptographic purposes, ## .. warning:: This module was added in Nim 1.6. If you are using it for cryptographic purposes,
## keep in mind that so far this has not been audited by any security professionals, ## keep in mind that so far this has not been audited by any security professionals,
## therefore may not be secure. ## therefore may not be secure.
## ##
## `std/sysrand` generates random numbers from a secure source provided by the operating system. ## `std/sysrand` generates random numbers from a secure source provided by the operating system.
## It is a cryptographically secure pseudorandom number generator ## It is a cryptographically secure pseudorandom number generator
## and should be unpredictable enough for cryptographic applications, ## and should be unpredictable enough for cryptographic applications,
@ -52,10 +52,10 @@ runnableExamples:
when not defined(js): when not defined(js):
import std/os import os
when defined(posix): when defined(posix):
import std/posix import posix
const const
batchImplOS = defined(freebsd) or defined(openbsd) or (defined(macosx) and not defined(ios)) batchImplOS = defined(freebsd) or defined(openbsd) or (defined(macosx) and not defined(ios))
@ -243,7 +243,7 @@ elif defined(macosx):
""" """
proc getentropy(p: pointer, size: csize_t): cint {.importc: "getentropy", header: sysrandomHeader.} proc getentropy(p: pointer, size: csize_t): cint {.importc: "getentropy", header: sysrandomHeader.}
# getentropy() fills a buffer with random data, which can be used as input # getentropy() fills a buffer with random data, which can be used as input
# for process-context pseudorandom generators like arc4random(3). # for process-context pseudorandom generators like arc4random(3).
# The maximum buffer size permitted is 256 bytes. # The maximum buffer size permitted is 256 bytes.
@ -310,7 +310,7 @@ proc urandom*(dest: var openArray[byte]): bool =
proc urandom*(size: Natural): seq[byte] {.inline.} = proc urandom*(size: Natural): seq[byte] {.inline.} =
## Returns random bytes suitable for cryptographic use. ## Returns random bytes suitable for cryptographic use.
## ##
## .. warning:: The code hasn't been audited by cryptography experts and ## .. warning:: The code hasn't been audited by cryptography experts and
## is provided as-is without guarantees. Use at your own risks. For production ## is provided as-is without guarantees. Use at your own risks. For production
## systems we advise you to request an external audit. ## systems we advise you to request an external audit.

View file

@ -24,7 +24,7 @@ runnableExamples:
assert (?.f2.x2.x2).x3 == nil # this terminates ?. early assert (?.f2.x2.x2).x3 == nil # this terminates ?. early
from std/options import Option, isSome, get, option, unsafeGet, UnpackDefect from options import Option, isSome, get, option, unsafeGet, UnpackDefect
export options.get, options.isSome, options.isNone export options.get, options.isSome, options.isNone
template fakeDot*(a: Option, b): untyped = template fakeDot*(a: Option, b): untyped =
@ -59,7 +59,7 @@ func `[]`*[U](a: Option[U]): auto {.inline.} =
if a2 != nil: if a2 != nil:
result = option(a2[]) result = option(a2[])
import std/macros import macros
func replace(n: NimNode): NimNode = func replace(n: NimNode): NimNode =
if n.kind == nnkDotExpr: if n.kind == nnkDotExpr: