mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-18 00:48:35 +00:00
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:
@@ -15,7 +15,7 @@ environment:
|
||||
tasks:
|
||||
- setup: |
|
||||
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)
|
||||
bin/nim c --skipUserCfg --skipParentCfg koch
|
||||
echo 'export PATH=$HOME/Nim/bin:$PATH' >> $HOME/.buildenv
|
||||
|
||||
@@ -18,7 +18,7 @@ environment:
|
||||
tasks:
|
||||
- setup: |
|
||||
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)
|
||||
bin/nim c koch
|
||||
echo 'export PATH=$HOME/Nim/bin:$PATH' >> $HOME/.buildenv
|
||||
|
||||
@@ -18,7 +18,7 @@ environment:
|
||||
tasks:
|
||||
- setup: |
|
||||
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)
|
||||
bin/nim c koch
|
||||
echo 'export PATH=$HOME/Nim/bin:$PATH' >> $HOME/.buildenv
|
||||
|
||||
4
.github/workflows/ci_docs.yml
vendored
4
.github/workflows/ci_docs.yml
vendored
@@ -85,7 +85,7 @@ jobs:
|
||||
id: csources-version
|
||||
shell: bash
|
||||
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"
|
||||
|
||||
- name: 'Get prebuilt csources from cache'
|
||||
@@ -99,7 +99,7 @@ jobs:
|
||||
if: steps.csources-cache.outputs.cache-hit != 'true'
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: nim-lang/csources
|
||||
repository: nim-lang/csources_v1
|
||||
path: csources
|
||||
|
||||
- name: 'Build 1-stage compiler from csources'
|
||||
|
||||
@@ -67,7 +67,7 @@ jobs:
|
||||
echo $commitMsg | grep -v '\[skip ci\]' # fails if [skip ci] not in commit msg
|
||||
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'
|
||||
|
||||
- task: NodeTool@0
|
||||
|
||||
@@ -2,7 +2,7 @@ REM Some debug info
|
||||
echo "Running on %CI_RUNNER_ID% (%CI_RUNNER_DESCRIPTION%) with tags %CI_RUNNER_TAGS%."
|
||||
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
|
||||
call build64.bat
|
||||
cd ..
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
sh ci/deps.sh
|
||||
|
||||
# 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
|
||||
sh build.sh
|
||||
cd ..
|
||||
|
||||
@@ -25,7 +25,7 @@ Rem Build csources
|
||||
koch csources -d:release || exit /b
|
||||
|
||||
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%
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
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
|
||||
TInfoCCProp* = enum # properties of the C compiler:
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
## 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.
|
||||
|
||||
import std/[packedsets, algorithm, tables]
|
||||
# std/intsets would give `UnusedImport`, pending https://github.com/nim-lang/Nim/issues/14246
|
||||
import std/packedsets, algorithm, tables
|
||||
|
||||
import ".."/[ast, options, lineinfos, modulegraphs, cgendata, cgen,
|
||||
pathutils, extccomp, msgs]
|
||||
|
||||
@@ -70,7 +70,7 @@ proc addFileToLink(config: ConfigRef; m: PSym) =
|
||||
addFileToCompile(config, cf)
|
||||
|
||||
when defined(debugDce):
|
||||
import std / [os, packedsets]
|
||||
import os, std/packedsets
|
||||
|
||||
proc storeAliveSymsImpl(asymFile: AbsoluteFile; s: seq[int32]) =
|
||||
var f = rodfiles.create(asymFile.string)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
## Dead code elimination (=DCE) for IC.
|
||||
|
||||
import std / [intsets, tables]
|
||||
import intsets, tables
|
||||
import ".." / [ast, options, lineinfos, types]
|
||||
|
||||
import packed_ast, ic, bitabs
|
||||
|
||||
@@ -7,12 +7,12 @@
|
||||
# distribution, for details about the copyright.
|
||||
#
|
||||
|
||||
import std / [hashes, tables, intsets, sha1]
|
||||
import hashes, tables, intsets, std/sha1
|
||||
import packed_ast, bitabs, rodfiles
|
||||
import ".." / [ast, idents, lineinfos, msgs, ropes, options,
|
||||
pathutils, condsyms]
|
||||
#import ".." / [renderer, astalgo]
|
||||
from std / os import removeFile, isAbsolute
|
||||
from os import removeFile, isAbsolute
|
||||
|
||||
type
|
||||
PackedConfig* = object
|
||||
@@ -143,7 +143,7 @@ const
|
||||
debugConfigDiff = defined(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 =
|
||||
result = m.definedSymbols == definedSymbolsAsString(config)
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
## Integrity checking for a set of .rod files.
|
||||
## The set must cover a complete Nim project.
|
||||
|
||||
import std / sets
|
||||
import sets
|
||||
import ".." / [ast, modulegraphs]
|
||||
import packed_ast, bitabs, ic
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
## IDE-like features. It uses the set of .rod files to accomplish
|
||||
## its task. The set must cover a complete Nim project.
|
||||
|
||||
import std / sets
|
||||
import sets
|
||||
|
||||
from os import nil
|
||||
from std/private/miscdollars import toLocation
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
## use this representation directly in all the transformations,
|
||||
## it is superior.
|
||||
|
||||
import std / [hashes, tables, strtabs]
|
||||
import hashes, tables, strtabs
|
||||
import bitabs
|
||||
import ".." / [ast, options]
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
## hold all from `low(BiggestInt)` to `high(BiggestUInt)`, This
|
||||
## type is for that purpose.
|
||||
|
||||
from std/math import trunc
|
||||
from math import trunc
|
||||
|
||||
type
|
||||
Int128* = object
|
||||
@@ -378,7 +378,7 @@ proc `*`*(lhs, rhs: Int128): Int128 =
|
||||
proc `*=`*(a: var Int128, b: Int128) =
|
||||
a = a * b
|
||||
|
||||
import std/bitops
|
||||
import bitops
|
||||
|
||||
proc fastLog2*(a: Int128): int =
|
||||
if a.udata[3] != 0:
|
||||
|
||||
@@ -35,7 +35,7 @@ import
|
||||
cgmeth, lowerings, sighashes, modulegraphs, lineinfos, rodutils,
|
||||
transf, injectdestructors, sourcemap
|
||||
|
||||
import std/[json, sets, math, tables, intsets, strutils]
|
||||
import json, sets, math, tables, intsets, strutils
|
||||
|
||||
from modulegraphs import ModuleGraph, PPassContext
|
||||
|
||||
|
||||
@@ -372,7 +372,7 @@ when false:
|
||||
of 'a'..'z': result = getIdent(c.cache, toLowerAscii(x.s[0]) & x.s.substr(1))
|
||||
else: result = x
|
||||
|
||||
import std/[editdistance, heapqueue]
|
||||
import std/editdistance, heapqueue
|
||||
|
||||
type SpellCandidate = object
|
||||
dist: int
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
## represents a complete Nim project. Single modules can either be kept in RAM
|
||||
## 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 ic / [packed_ast, ic]
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#
|
||||
|
||||
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
|
||||
#
|
||||
|
||||
@@ -24,7 +24,7 @@ import
|
||||
idents, lineinfos, cmdlinehelper,
|
||||
pathutils, modulegraphs
|
||||
|
||||
from std/browsers import openDefaultBrowser
|
||||
from browsers import openDefaultBrowser
|
||||
from nodejs import findNodeJs
|
||||
|
||||
when hasTinyCBackend:
|
||||
|
||||
@@ -17,7 +17,7 @@ interpolation variables:
|
||||
Unstable API
|
||||
]##
|
||||
|
||||
import std/[os,strutils]
|
||||
import os, strutils
|
||||
|
||||
const
|
||||
docCss* = "$nimr/doc/nimdoc.css"
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#
|
||||
|
||||
## Serialization utilities for the compiler.
|
||||
import std/[strutils, math]
|
||||
import strutils, math
|
||||
|
||||
# bcc on windows doesn't have C99 functions
|
||||
when defined(windows) and defined(bcc):
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
## This module contains the data structures for the semantic checking phase.
|
||||
|
||||
import std / tables
|
||||
import tables
|
||||
|
||||
import
|
||||
intsets, options, ast, astalgo, msgs, idents, renderer,
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
# this module does the semantic checking of type declarations
|
||||
# included from sem.nim
|
||||
|
||||
import std/math
|
||||
import math
|
||||
|
||||
const
|
||||
errStringOrIdentNodeExpected = "string or ident node expected"
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
## 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.
|
||||
|
||||
import std / tables
|
||||
import tables
|
||||
|
||||
import ast, idents, options, modulegraphs, lineinfos
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
# solves the opcLdConst vs opcAsgnConst issue. Of course whether we need
|
||||
# this copy depends on the involved types.
|
||||
|
||||
import std / tables
|
||||
import tables
|
||||
|
||||
import
|
||||
strutils, ast, types, msgs, renderer, vmdef,
|
||||
|
||||
@@ -9,24 +9,24 @@
|
||||
|
||||
# Unfortunately this cannot be a module yet:
|
||||
#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,
|
||||
floor, ceil, `mod`, cbrt, arcsinh, arccosh, arctanh, erf, erfc, gamma,
|
||||
lgamma
|
||||
|
||||
when declared(math.copySign):
|
||||
from std/math import copySign
|
||||
from math import copySign
|
||||
|
||||
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
|
||||
|
||||
from std/md5 import getMD5
|
||||
from std/times import cpuTime
|
||||
from std/hashes import hash
|
||||
from std/osproc import nil
|
||||
from md5 import getMD5
|
||||
from times import cpuTime
|
||||
from hashes import hash
|
||||
from osproc import nil
|
||||
|
||||
from sighashes import symBodyDigest
|
||||
|
||||
|
||||
@@ -17,58 +17,58 @@ type
|
||||
TSpecialWord* = enum
|
||||
wInvalid = "",
|
||||
wAddr = "addr", wAnd = "and", wAs = "as", wAsm = "asm",
|
||||
wBind = "bind", wBlock = "block", wBreak = "break", wCase = "case", wCast = "cast",
|
||||
wConcept = "concept", wConst = "const", wContinue = "continue", wConverter = "converter",
|
||||
wBind = "bind", wBlock = "block", wBreak = "break", wCase = "case", wCast = "cast",
|
||||
wConcept = "concept", wConst = "const", wContinue = "continue", wConverter = "converter",
|
||||
wDefer = "defer", wDiscard = "discard", wDistinct = "distinct", wDiv = "div", wDo = "do",
|
||||
wElif = "elif", wElse = "else", wEnd = "end", wEnum = "enum", wExcept = "except",
|
||||
wExport = "export", wFinally = "finally", wFor = "for", wFrom = "from", wFunc = "func",
|
||||
wIf = "if", wImport = "import", wIn = "in", wInclude = "include", wInterface = "interface",
|
||||
wElif = "elif", wElse = "else", wEnd = "end", wEnum = "enum", wExcept = "except",
|
||||
wExport = "export", wFinally = "finally", wFor = "for", wFrom = "from", wFunc = "func",
|
||||
wIf = "if", wImport = "import", wIn = "in", wInclude = "include", wInterface = "interface",
|
||||
wIs = "is", wIsnot = "isnot", wIterator = "iterator", wLet = "let", wMacro = "macro",
|
||||
wMethod = "method", wMixin = "mixin", wMod = "mod", wNil = "nil", wNot = "not", wNotin = "notin",
|
||||
wObject = "object", wOf = "of", wOr = "or", wOut = "out", wProc = "proc", wPtr = "ptr",
|
||||
wRaise = "raise", wRef = "ref", wReturn = "return", wShl = "shl", wShr = "shr", wStatic = "static",
|
||||
wTemplate = "template", wTry = "try", wTuple = "tuple", wType = "type", wUsing = "using",
|
||||
wMethod = "method", wMixin = "mixin", wMod = "mod", wNil = "nil", wNot = "not", wNotin = "notin",
|
||||
wObject = "object", wOf = "of", wOr = "or", wOut = "out", wProc = "proc", wPtr = "ptr",
|
||||
wRaise = "raise", wRef = "ref", wReturn = "return", wShl = "shl", wShr = "shr", wStatic = "static",
|
||||
wTemplate = "template", wTry = "try", wTuple = "tuple", wType = "type", wUsing = "using",
|
||||
wVar = "var", wWhen = "when", wWhile = "while", wXor = "xor", wYield = "yield",
|
||||
|
||||
wColon = ":", wColonColon = "::", wEquals = "=", wDot = ".", wDotDot = "..",
|
||||
wStar = "*", wMinus = "-",
|
||||
wMagic = "magic", wThread = "thread", wFinal = "final", wProfiler = "profiler",
|
||||
wMagic = "magic", wThread = "thread", wFinal = "final", wProfiler = "profiler",
|
||||
wMemTracker = "memtracker", wObjChecks = "objchecks",
|
||||
wIntDefine = "intdefine", wStrDefine = "strdefine", wBoolDefine = "booldefine",
|
||||
wIntDefine = "intdefine", wStrDefine = "strdefine", wBoolDefine = "booldefine",
|
||||
wCursor = "cursor", wNoalias = "noalias",
|
||||
|
||||
wImmediate = "immediate", wConstructor = "constructor", wDestructor = "destructor",
|
||||
wImmediate = "immediate", wConstructor = "constructor", wDestructor = "destructor",
|
||||
wDelegator = "delegator", wOverride = "override", wImportCpp = "importcpp",
|
||||
wCppNonPod = "cppNonPod",
|
||||
wCppNonPod = "cppNonPod",
|
||||
wImportObjC = "importobjc", wImportCompilerProc = "importcompilerproc",
|
||||
wImportc = "importc", wImportJs = "importjs", wExportc = "exportc", wExportCpp = "exportcpp",
|
||||
wImportc = "importc", wImportJs = "importjs", wExportc = "exportc", wExportCpp = "exportcpp",
|
||||
wExportNims = "exportnims",
|
||||
wIncompleteStruct = "incompleteStruct", # deprecated
|
||||
wCompleteStruct = "completeStruct", wRequiresInit = "requiresInit", wAlign = "align",
|
||||
wNodecl = "nodecl", wPure = "pure", wSideEffect = "sideEffect", wHeader = "header",
|
||||
wNoSideEffect = "noSideEffect", wGcSafe = "gcsafe", wNoreturn = "noreturn",
|
||||
wNosinks = "nosinks", wMerge = "merge", wLib = "lib", wDynlib = "dynlib",
|
||||
wCompilerProc = "compilerproc", wCore = "core", wProcVar = "procvar",
|
||||
wBase = "base", wUsed = "used", wFatal = "fatal", wError = "error", wWarning = "warning",
|
||||
wCompilerProc = "compilerproc", wCore = "core", wProcVar = "procvar",
|
||||
wBase = "base", wUsed = "used", wFatal = "fatal", wError = "error", wWarning = "warning",
|
||||
wHint = "hint",
|
||||
wWarningAsError = "warningAsError",
|
||||
wHintAsError = "hintAsError",
|
||||
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",
|
||||
wLinksys = "linksys", wDeprecated = "deprecated", wVarargs = "varargs", wCallconv = "callconv",
|
||||
wDebugger = "debugger", wNimcall = "nimcall", wStdcall = "stdcall", wCdecl = "cdecl",
|
||||
wLinksys = "linksys", wDeprecated = "deprecated", wVarargs = "varargs", wCallconv = "callconv",
|
||||
wDebugger = "debugger", wNimcall = "nimcall", wStdcall = "stdcall", wCdecl = "cdecl",
|
||||
wSafecall = "safecall", wSyscall = "syscall", wInline = "inline", wNoInline = "noinline",
|
||||
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",
|
||||
wFloatChecks = "floatChecks", wNanChecks = "nanChecks", wInfChecks = "infChecks",
|
||||
wFloatChecks = "floatChecks", wNanChecks = "nanChecks", wInfChecks = "infChecks",
|
||||
wStyleChecks = "styleChecks", wStaticBoundchecks = "staticBoundChecks",
|
||||
wNonReloadable = "nonReloadable", wExecuteOnReload = "executeOnReload",
|
||||
|
||||
wAssertions = "assertions", wPatterns = "patterns", wTrMacros = "trmacros",
|
||||
wAssertions = "assertions", wPatterns = "patterns", wTrMacros = "trmacros",
|
||||
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",
|
||||
wRequires = "requires", wEnsures = "ensures", wInvariant = "invariant",
|
||||
wAssume = "assume", wAssert = "assert",
|
||||
@@ -76,34 +76,34 @@ type
|
||||
wSafecode = "safecode", wPackage = "package", wNoForward = "noforward", wReorder = "reorder",
|
||||
wNoRewrite = "norewrite", wNoDestroy = "nodestroy", wPragma = "pragma",
|
||||
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",
|
||||
wShallow = "shallow", wUnroll = "unroll", wLinearScanEnd = "linearScanEnd",
|
||||
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",
|
||||
wAsmNoStackFrame = "asmNoStackFrame", wImplicitStatic = "implicitStatic",
|
||||
wGlobal = "global", wCodegenDecl = "codegenDecl", wUnchecked = "unchecked",
|
||||
wGuard = "guard", wLocks = "locks", wPartial = "partial", wExplain = "explain",
|
||||
wLiftLocals = "liftlocals",
|
||||
|
||||
wAuto = "auto", wBool = "bool", wCatch = "catch", wChar = "char",
|
||||
wClass = "class", wCompl = "compl", wConst_cast = "const_cast", wDefault = "default",
|
||||
wDelete = "delete", wDouble = "double", wDynamic_cast = "dynamic_cast",
|
||||
wAuto = "auto", wBool = "bool", wCatch = "catch", wChar = "char",
|
||||
wClass = "class", wCompl = "compl", wConst_cast = "const_cast", wDefault = "default",
|
||||
wDelete = "delete", wDouble = "double", wDynamic_cast = "dynamic_cast",
|
||||
wExplicit = "explicit", wExtern = "extern", wFalse = "false", wFloat = "float",
|
||||
wFriend = "friend", wGoto = "goto", wInt = "int", wLong = "long", wMutable = "mutable",
|
||||
wNamespace = "namespace", wNew = "new", wOperator = "operator", wPrivate = "private",
|
||||
wProtected = "protected", wPublic = "public", wRegister = "register",
|
||||
wReinterpret_cast = "reinterpret_cast", wRestrict = "restrict", wShort = "short",
|
||||
wSigned = "signed", wSizeof = "sizeof", wStatic_cast = "static_cast", wStruct = "struct",
|
||||
wSwitch = "switch", wThis = "this", wThrow = "throw", wTrue = "true", wTypedef = "typedef",
|
||||
wFriend = "friend", wGoto = "goto", wInt = "int", wLong = "long", wMutable = "mutable",
|
||||
wNamespace = "namespace", wNew = "new", wOperator = "operator", wPrivate = "private",
|
||||
wProtected = "protected", wPublic = "public", wRegister = "register",
|
||||
wReinterpret_cast = "reinterpret_cast", wRestrict = "restrict", wShort = "short",
|
||||
wSigned = "signed", wSizeof = "sizeof", wStatic_cast = "static_cast", wStruct = "struct",
|
||||
wSwitch = "switch", wThis = "this", wThrow = "throw", wTrue = "true", wTypedef = "typedef",
|
||||
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",
|
||||
|
||||
wAlignas = "alignas", wAlignof = "alignof", wConstexpr = "constexpr", wDecltype = "decltype",
|
||||
wAlignas = "alignas", wAlignof = "alignof", wConstexpr = "constexpr", wDecltype = "decltype",
|
||||
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",
|
||||
|
||||
wStdIn = "stdin", wStdOut = "stdout", wStdErr = "stderr",
|
||||
@@ -134,14 +134,14 @@ const enumUtilsExist = compiles:
|
||||
when enumUtilsExist:
|
||||
from std/enumutils import genEnumCaseStmt
|
||||
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)
|
||||
|
||||
else:
|
||||
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
|
||||
for i in a..b:
|
||||
if cmpIgnoreStyle($i, s) == 0:
|
||||
return i
|
||||
result = default
|
||||
result = default
|
||||
@@ -29,7 +29,7 @@
|
||||
## writeLine(stdout, "your password: " & myData["password"])
|
||||
## writeLine(stdout, "</body></html>")
|
||||
|
||||
import std/[strutils, os, strtabs, cookies, uri]
|
||||
import strutils, os, strtabs, cookies, uri
|
||||
export uri.encodeUrl, uri.decodeUrl
|
||||
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ runnableExamples:
|
||||
|
||||
import std/private/since
|
||||
|
||||
import std/math
|
||||
import math
|
||||
|
||||
type
|
||||
Deque*[T] = object
|
||||
|
||||
@@ -196,7 +196,7 @@ runnableExamples:
|
||||
|
||||
|
||||
import std/private/since
|
||||
import std/[hashes, math, algorithm]
|
||||
import hashes, math, algorithm
|
||||
|
||||
type
|
||||
KeyValuePair[A, B] = tuple[hcode: Hash, key: A, val: B]
|
||||
|
||||
@@ -36,7 +36,7 @@ runnableExamples:
|
||||
{.push checks: off, line_dir: off, stack_trace: off, debugger: off.}
|
||||
# the user does not want to trace a part of the standard library!
|
||||
|
||||
import std/math
|
||||
import math
|
||||
|
||||
type
|
||||
Complex*[T: SomeFloat] = object
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
## This module implements helper procs for parsing Cookies.
|
||||
|
||||
import std/[strtabs, times, options]
|
||||
import strtabs, times, options
|
||||
|
||||
|
||||
type
|
||||
@@ -25,7 +25,7 @@ proc parseCookies*(s: string): StringTableRef =
|
||||
## "Set-Cookie" header set by servers.
|
||||
runnableExamples:
|
||||
import std/strtabs
|
||||
let cookieJar = parseCookies("a=1; foo=bar")
|
||||
let cookieJar = parseCookies("a=1; foo=bar")
|
||||
assert cookieJar["a"] == "1"
|
||||
assert cookieJar["foo"] == "bar"
|
||||
|
||||
@@ -46,7 +46,7 @@ proc parseCookies*(s: string): StringTableRef =
|
||||
|
||||
proc setCookie*(key, value: string, domain = "", path = "",
|
||||
expires = "", noName = false,
|
||||
secure = false, httpOnly = false,
|
||||
secure = false, httpOnly = false,
|
||||
maxAge = none(int), sameSite = SameSite.Default): string =
|
||||
## Creates a command in the format of
|
||||
## `Set-Cookie: key=value; Domain=...; ...`
|
||||
|
||||
@@ -27,11 +27,11 @@
|
||||
##
|
||||
## 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):
|
||||
from std/osproc import execProcess
|
||||
from std/os import existsEnv
|
||||
from osproc import execProcess
|
||||
from os import existsEnv
|
||||
|
||||
type
|
||||
Distribution* {.pure.} = enum ## the list of known distributions
|
||||
|
||||
@@ -159,10 +159,9 @@ runnableExamples:
|
||||
a1, a2, a0, a3, a4: int
|
||||
doAssert $(%* Foo()) == """{"a1":0,"a2":0,"a0":0,"a3":0,"a4":0}"""
|
||||
|
||||
import
|
||||
std/[hashes, tables, strutils, lexbase, streams, macros, parsejson]
|
||||
import 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
|
||||
|
||||
export
|
||||
@@ -921,7 +920,7 @@ proc parseJson*(s: Stream, filename: string = ""; rawIntegers = false, rawFloats
|
||||
p.close()
|
||||
|
||||
when defined(js):
|
||||
from std/math import `mod`
|
||||
from math import `mod`
|
||||
from std/jsffi import JSObject, `[]`, to
|
||||
from std/private/jsutils import getProtoName, isInteger, isSafeInteger
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ Please use alternative packages for serialization.
|
||||
It is possible to reimplement this module using generics and type traits.
|
||||
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.} =
|
||||
result = cast[int](x) # don't skip alignment
|
||||
|
||||
@@ -58,7 +58,7 @@ import std/private/since
|
||||
{.push debugger: off.} # the user does not want to trace a part
|
||||
# of the standard library!
|
||||
|
||||
import std/[bitops, fenv]
|
||||
import bitops, fenv
|
||||
|
||||
when defined(c) or defined(cpp):
|
||||
proc c_isnan(x: float): bool {.importc: "isnan", header: "<math.h>".}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
## This implementation calls `initRand()` for the first call of
|
||||
## `genOid`.
|
||||
|
||||
import std/[hashes, times, endians, random]
|
||||
import hashes, times, endians, random
|
||||
from std/private/decode_helpers import handleHexChar
|
||||
|
||||
type
|
||||
|
||||
@@ -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`
|
||||
|
||||
|
||||
import std/typetraits
|
||||
import typetraits
|
||||
|
||||
when (NimMajor, NimMinor) >= (1, 1):
|
||||
type
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
include system/inclrtl
|
||||
import std/private/since
|
||||
|
||||
import std/[strutils, pathnorm]
|
||||
import strutils, pathnorm
|
||||
|
||||
const weirdTarget = defined(nimscript) or defined(js)
|
||||
|
||||
@@ -65,9 +65,9 @@ since (1, 1):
|
||||
when weirdTarget:
|
||||
discard
|
||||
elif defined(windows):
|
||||
import std/[winlean, times]
|
||||
import winlean, times
|
||||
elif defined(posix):
|
||||
import std/[posix, times]
|
||||
import posix, times
|
||||
|
||||
proc toTime(ts: Timespec): times.Time {.inline.} =
|
||||
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
|
||||
## convention; also, both ``~/`` and ``~\`` are handled.
|
||||
##
|
||||
##
|
||||
## .. warning:: `~bob` and `~bob/` are not yet handled correctly.
|
||||
##
|
||||
## See also:
|
||||
|
||||
@@ -72,7 +72,7 @@ runnableExamples:
|
||||
## * `list of cryptographic and hashing modules <lib.html#pure-libraries-hashing>`_
|
||||
## in the standard library
|
||||
|
||||
import std/[algorithm, math]
|
||||
import algorithm, math
|
||||
import std/private/since
|
||||
|
||||
include system/inclrtl
|
||||
@@ -625,7 +625,7 @@ proc shuffle*[T](x: var openArray[T]) =
|
||||
shuffle(state, x)
|
||||
|
||||
when not defined(nimscript) and not defined(standalone):
|
||||
import std/times
|
||||
import times
|
||||
|
||||
proc initRand(): Rand =
|
||||
## Initializes a new Rand state with a seed based on the current time.
|
||||
|
||||
@@ -21,7 +21,7 @@ runnableExamples:
|
||||
doAssert r1 * r2 == -3 // 8
|
||||
doAssert r1 / r2 == -2 // 3
|
||||
|
||||
import std/[math, hashes]
|
||||
import math, hashes
|
||||
|
||||
type Rational*[T] = object
|
||||
## A rational number, consisting of a numerator `num` and a denominator `den`.
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
## runtime efficiency.
|
||||
|
||||
include system/inclrtl
|
||||
import std/streams
|
||||
import streams
|
||||
|
||||
{.push debugger: off.} # the user does not want to trace a part
|
||||
# of the standard library!
|
||||
|
||||
@@ -53,7 +53,7 @@ runnableExamples:
|
||||
doAssert statistics.kurtosis() ~= -1.0
|
||||
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
|
||||
# of the standard library!
|
||||
|
||||
@@ -313,8 +313,8 @@ help with readability, since there is only so much you can cram into
|
||||
single letter DSLs.
|
||||
]##
|
||||
|
||||
import std/[macros, parseutils, unicode]
|
||||
import std/strutils except format
|
||||
import macros, parseutils, unicode
|
||||
import strutils except format
|
||||
|
||||
proc mkDigit(v: int, typ: char): string {.inline.} =
|
||||
assert(v < 26)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
## macro system.
|
||||
|
||||
import std/private/since
|
||||
import std/macros
|
||||
import macros
|
||||
|
||||
proc checkPragma(ex, prag: var NimNode) =
|
||||
since (1, 3):
|
||||
|
||||
@@ -167,7 +167,7 @@ since (1, 3, 5):
|
||||
|
||||
typeof(block: (for ai in a: ai))
|
||||
|
||||
import std/macros
|
||||
import macros
|
||||
|
||||
macro enumLen*(T: typedesc[enum]): int =
|
||||
## Returns the number of items in the enum `T`.
|
||||
|
||||
@@ -108,15 +108,15 @@
|
||||
import std/private/since
|
||||
import std/exitprocs
|
||||
|
||||
import std/[macros, strutils, streams, times, sets, sequtils]
|
||||
import macros, strutils, streams, times, sets, sequtils
|
||||
|
||||
when declared(stdout):
|
||||
import std/os
|
||||
import os
|
||||
|
||||
const useTerminal = not defined(js)
|
||||
|
||||
when useTerminal:
|
||||
import std/terminal
|
||||
import terminal
|
||||
|
||||
type
|
||||
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 3: raise newException(IOError, "I can't do that Dave.")
|
||||
else: assert 2 + 2 == 5
|
||||
|
||||
|
||||
expect IOError, OSError, ValueError, AssertionDefect:
|
||||
defectiveRobot()
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ runnableExamples:
|
||||
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]
|
||||
|
||||
|
||||
|
||||
@@ -7,16 +7,16 @@
|
||||
# distribution, for details about the copyright.
|
||||
#
|
||||
|
||||
import std/macros
|
||||
from std/typetraits import OrdinalEnum, HoleyEnum
|
||||
import macros
|
||||
from typetraits import OrdinalEnum, HoleyEnum
|
||||
|
||||
# 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 =
|
||||
# generates a case stmt, which assigns the correct enum field given
|
||||
# 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
|
||||
# `of "Foo".nimIdentNormalize: Foo`.
|
||||
# This will fail, if the enum is not defined at top level (e.g. in a block).
|
||||
|
||||
@@ -13,7 +13,7 @@ runnableExamples:
|
||||
let j = a.toJson
|
||||
assert j.jsonTo(typeof(a)).toJson == j
|
||||
|
||||
import std/[json,strutils,tables,sets,strtabs,options]
|
||||
import json, strutils, tables, sets, strtabs, options
|
||||
|
||||
#[
|
||||
Future directions:
|
||||
@@ -27,7 +27,7 @@ add a way to customize serialization, for e.g.:
|
||||
objects.
|
||||
]#
|
||||
|
||||
import std/macros
|
||||
import macros
|
||||
|
||||
type
|
||||
Joptions* = object
|
||||
@@ -106,7 +106,7 @@ proc hasField[T](obj: T, field: string): bool =
|
||||
return true
|
||||
return false
|
||||
|
||||
macro accessField(obj: typed, name: static string): untyped =
|
||||
macro accessField(obj: typed, name: static string): untyped =
|
||||
newDotExpr(obj, ident(name))
|
||||
|
||||
template fromJsonFields(newObj, oldObj, json, discKeys, opt) =
|
||||
@@ -146,7 +146,7 @@ template fromJsonFields(newObj, oldObj, json, discKeys, opt) =
|
||||
json.len == numMatched
|
||||
else:
|
||||
json.len == num and num == numMatched
|
||||
|
||||
|
||||
checkJson ok, $(json.len, num, numMatched, $T, json)
|
||||
|
||||
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]),
|
||||
jsonNode: JsonNode) =
|
||||
## Enables `fromJson` for `Table` and `OrderedTable` types.
|
||||
##
|
||||
##
|
||||
## See also:
|
||||
## * `toJsonHook proc<#toJsonHook>`_
|
||||
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) =
|
||||
## Enables `fromJson` for `HashSet` and `OrderedSet` types.
|
||||
##
|
||||
##
|
||||
## See also:
|
||||
## * `toJsonHook proc<#toJsonHook,SomeSet[A]>`_
|
||||
runnableExamples:
|
||||
@@ -360,7 +360,7 @@ proc toJsonHook*[A](s: SomeSet[A]): JsonNode =
|
||||
|
||||
proc fromJsonHook*[T](self: var Option[T], jsonNode: JsonNode) =
|
||||
## Enables `fromJson` for `Option` types.
|
||||
##
|
||||
##
|
||||
## See also:
|
||||
## * `toJsonHook proc<#toJsonHook,Option[T]>`_
|
||||
runnableExamples:
|
||||
@@ -395,7 +395,7 @@ proc toJsonHook*[T](self: Option[T]): JsonNode =
|
||||
|
||||
proc fromJsonHook*(a: var StringTableRef, b: JsonNode) =
|
||||
## Enables `fromJson` for `StringTableRef` type.
|
||||
##
|
||||
##
|
||||
## See also:
|
||||
## * `toJsonHook proc<#toJsonHook,StringTableRef>`_
|
||||
runnableExamples:
|
||||
@@ -413,7 +413,7 @@ proc fromJsonHook*(a: var StringTableRef, b: JsonNode) =
|
||||
|
||||
proc toJsonHook*(a: StringTableRef): JsonNode =
|
||||
## Enables `toJson` for `StringTableRef` type.
|
||||
##
|
||||
##
|
||||
## See also:
|
||||
## * `fromJsonHook proc<#fromJsonHook,StringTableRef,JsonNode>`_
|
||||
runnableExamples:
|
||||
|
||||
@@ -39,7 +39,7 @@ See also
|
||||
* `times module <times.html>`_
|
||||
]##
|
||||
|
||||
import std/times
|
||||
import times
|
||||
|
||||
type
|
||||
MonoTime* = object ## Represents a monotonic timestamp.
|
||||
@@ -77,7 +77,7 @@ when defined(js):
|
||||
{.pop.}
|
||||
|
||||
elif defined(posix) and not defined(osx):
|
||||
import std/posix
|
||||
import posix
|
||||
|
||||
elif defined(windows):
|
||||
proc QueryPerformanceCounter(res: var uint64) {.
|
||||
|
||||
@@ -4,7 +4,7 @@ this can eventually be moved to std/os and `walkDirRec` can be implemented in te
|
||||
to avoid duplication
|
||||
]##
|
||||
|
||||
import std/[os]
|
||||
import os
|
||||
when defined(windows):
|
||||
from strutils import replace
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
## * `std/packedsets <packedsets.html>`_
|
||||
## * `std/sets <sets.html>`_
|
||||
|
||||
import std/[typetraits, macros]
|
||||
import typetraits, macros
|
||||
|
||||
#[
|
||||
type SetElement* = char|byte|bool|int16|uint16|enum|uint8|int8
|
||||
|
||||
@@ -26,8 +26,8 @@ runnableExamples("-r:off"):
|
||||
b = parseSecureHash("10DFAEBF6BFDBC7939957068E2EFACEC4972933C")
|
||||
assert a == b, "files don't match"
|
||||
|
||||
import std/strutils
|
||||
from std/endians import bigEndian32, bigEndian64
|
||||
import strutils
|
||||
from endians import bigEndian32, bigEndian64
|
||||
|
||||
const Sha1DigestSize = 20
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
## .. 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,
|
||||
## therefore may not be secure.
|
||||
##
|
||||
##
|
||||
## `std/sysrand` generates random numbers from a secure source provided by the operating system.
|
||||
## It is a cryptographically secure pseudorandom number generator
|
||||
## and should be unpredictable enough for cryptographic applications,
|
||||
@@ -52,10 +52,10 @@ runnableExamples:
|
||||
|
||||
|
||||
when not defined(js):
|
||||
import std/os
|
||||
import os
|
||||
|
||||
when defined(posix):
|
||||
import std/posix
|
||||
import posix
|
||||
|
||||
const
|
||||
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.}
|
||||
# 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).
|
||||
# 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.} =
|
||||
## Returns random bytes suitable for cryptographic use.
|
||||
##
|
||||
##
|
||||
## .. warning:: The code hasn't been audited by cryptography experts and
|
||||
## is provided as-is without guarantees. Use at your own risks. For production
|
||||
## systems we advise you to request an external audit.
|
||||
|
||||
@@ -24,7 +24,7 @@ runnableExamples:
|
||||
|
||||
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
|
||||
|
||||
template fakeDot*(a: Option, b): untyped =
|
||||
@@ -59,7 +59,7 @@ func `[]`*[U](a: Option[U]): auto {.inline.} =
|
||||
if a2 != nil:
|
||||
result = option(a2[])
|
||||
|
||||
import std/macros
|
||||
import macros
|
||||
|
||||
func replace(n: NimNode): NimNode =
|
||||
if n.kind == nnkDotExpr:
|
||||
|
||||
Reference in New Issue
Block a user