mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-20 22:35:24 +00:00
enable experimental:strictDefs (#24225)
This commit is contained in:
@@ -3,3 +3,5 @@ switch("styleCheck", "error")
|
||||
switch("define", "nimPreviewSlimSystem")
|
||||
switch("define", "nimPreviewCstringConversion")
|
||||
switch("define", "nimPreviewProcConversion")
|
||||
switch("warningAserror", "ProveInit")
|
||||
switch("warningAserror", "Uninit")
|
||||
|
||||
@@ -124,7 +124,7 @@ proc main() =
|
||||
var x = @[1, 7, 8, 11, 21, 33, 45, 99]
|
||||
var y = @[6, 7, 9, 12, 57, 66]
|
||||
|
||||
var merged: seq[int]
|
||||
var merged: seq[int] = @[]
|
||||
merged.merge(x, y)
|
||||
doAssert merged.isSorted
|
||||
doAssert merged == sorted(x & y)
|
||||
@@ -133,7 +133,7 @@ proc main() =
|
||||
var x = @[111, 88, 76, 56, 45, 31, 22, 19, 11, 3]
|
||||
var y = @[99, 85, 83, 82, 69, 64, 48, 42, 33, 31, 26, 13]
|
||||
|
||||
var merged: seq[int]
|
||||
var merged: seq[int] = @[]
|
||||
merged.merge(x, y, (x, y) => -system.cmp(x, y))
|
||||
doAssert merged.isSorted((x, y) => -system.cmp(x, y))
|
||||
doAssert merged == sorted(x & y, SortOrder.Descending)
|
||||
@@ -142,7 +142,7 @@ proc main() =
|
||||
var x: seq[int] = @[]
|
||||
var y = @[1]
|
||||
|
||||
var merged: seq[int]
|
||||
var merged: seq[int] = @[]
|
||||
merged.merge(x, y)
|
||||
doAssert merged.isSorted
|
||||
doAssert merged.isSorted(SortOrder.Descending)
|
||||
@@ -152,7 +152,7 @@ proc main() =
|
||||
var x = [1, 3, 5, 5, 7]
|
||||
var y: seq[int] = @[]
|
||||
|
||||
var merged: seq[int]
|
||||
var merged: seq[int] = @[]
|
||||
merged.merge(x, y)
|
||||
doAssert merged.isSorted
|
||||
doAssert merged == @x
|
||||
@@ -167,26 +167,26 @@ proc main() =
|
||||
|
||||
|
||||
block:
|
||||
var x: array[0, int]
|
||||
var x = default(array[0, int])
|
||||
var y = [1, 4, 6, 7, 9]
|
||||
|
||||
var merged: seq[int]
|
||||
var merged: seq[int] = @[]
|
||||
merged.merge(x, y)
|
||||
doAssert merged.isSorted
|
||||
doAssert merged == @y
|
||||
|
||||
block:
|
||||
var x: array[0, int]
|
||||
var y: array[0, int]
|
||||
var x: array[0, int] = []
|
||||
var y: array[0, int] = []
|
||||
|
||||
var merged: seq[int]
|
||||
var merged: seq[int] = @[]
|
||||
merged.merge(x, y)
|
||||
doAssert merged.isSorted
|
||||
doAssert merged.len == 0
|
||||
|
||||
block:
|
||||
var x: array[0, int]
|
||||
var y: array[0, int]
|
||||
var x: array[0, int] = []
|
||||
var y: array[0, int] = []
|
||||
|
||||
var merged: seq[int] = @[99, 99, 99]
|
||||
merged.setLen(0)
|
||||
@@ -195,10 +195,10 @@ proc main() =
|
||||
doAssert merged.len == 0
|
||||
|
||||
block:
|
||||
var x: seq[int]
|
||||
var y: seq[int]
|
||||
var x: seq[int] = @[]
|
||||
var y: seq[int] = @[]
|
||||
|
||||
var merged: seq[int]
|
||||
var merged: seq[int] = @[]
|
||||
merged.merge(x, y)
|
||||
doAssert merged.isSorted
|
||||
doAssert merged.len == 0
|
||||
@@ -245,7 +245,7 @@ proc main() =
|
||||
var x = @[r(-12), r(1), r(3), r(8), r(13), r(88)]
|
||||
var y = @[r(4), r(7), r(12), r(13), r(77), r(99)]
|
||||
|
||||
var merged: seq[Record]
|
||||
var merged: seq[Record] = @[]
|
||||
merged.setLen(0)
|
||||
merged.merge(x, y, ascendingCmp)
|
||||
doAssert merged.isSorted(ascendingCmp)
|
||||
@@ -267,7 +267,7 @@ proc main() =
|
||||
doAssert merged == sorted(x & y, ascendingCmp)
|
||||
|
||||
|
||||
var x: seq[(int, int)]
|
||||
var x: seq[(int, int)] = @[]
|
||||
x.merge([(1,1)], [(1,2)], (a,b) => a[0] - b[0])
|
||||
doAssert x == @[(1, 1), (1, 2)]
|
||||
|
||||
|
||||
@@ -173,7 +173,7 @@ proc main() =
|
||||
|
||||
block:
|
||||
# basic mask operations (mutating)
|
||||
var v: uint8
|
||||
var v: uint8 = 0'u8
|
||||
v.setMask(0b1100_0000)
|
||||
v.setMask(0b0000_1100)
|
||||
doAssert v == 0b1100_1100
|
||||
@@ -254,7 +254,7 @@ proc main() =
|
||||
doAssert a.clearMasked(3 .. 6) == 0b1000_0100
|
||||
block:
|
||||
# single bit operations
|
||||
var v: uint8
|
||||
var v: uint8 = 0'u8
|
||||
v.setBit(0)
|
||||
doAssert v == 0x0000_0001
|
||||
v.setBit(1)
|
||||
@@ -269,7 +269,7 @@ proc main() =
|
||||
doAssert not v.testBit(6)
|
||||
block:
|
||||
# multi bit operations
|
||||
var v: uint8
|
||||
var v: uint8 = 0'u8
|
||||
v.setBits(0, 1, 7)
|
||||
doAssert v == 0b1000_0011
|
||||
v.flipBits(2, 3)
|
||||
@@ -278,11 +278,11 @@ proc main() =
|
||||
doAssert v == 0b0000_1100
|
||||
block:
|
||||
# signed
|
||||
var v: int8
|
||||
var v: int8 = 0'i8
|
||||
v.setBit(7)
|
||||
doAssert v == -128
|
||||
block:
|
||||
var v: uint64
|
||||
var v: uint64 = 0'u64
|
||||
v.setBit(63)
|
||||
doAssert v == 0b1000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000'u64
|
||||
|
||||
@@ -335,7 +335,7 @@ proc main() =
|
||||
|
||||
block: # not ready for vm because exception is compile error
|
||||
try:
|
||||
var v: uint32
|
||||
var v: uint32 = 0'u32
|
||||
var i = 32
|
||||
v.setBit(i)
|
||||
doAssert false
|
||||
|
||||
@@ -190,7 +190,7 @@ proc main() =
|
||||
doAssert $a == "[10, 20, 30]"
|
||||
|
||||
block:
|
||||
var a, b: Deque[int]
|
||||
var a, b: Deque[int] = initDeque[int]()
|
||||
for i in 1 .. 256:
|
||||
a.addLast(i)
|
||||
for i in 1 .. 255:
|
||||
|
||||
@@ -8,6 +8,7 @@ import std/strutils
|
||||
import std/assertions
|
||||
|
||||
proc testHelper(f: seq[Item]): string =
|
||||
result = ""
|
||||
for it in f:
|
||||
result.add(
|
||||
$it.deletedA & "." & $it.insertedB & "." & $it.startA & "." & $it.startB & "*"
|
||||
|
||||
@@ -25,7 +25,7 @@ proc leakCheck(f: AsyncFD | int | FileHandle | SocketHandle, msg: string,
|
||||
var args = @[$f.int, msg, $expectLeak]
|
||||
|
||||
when defined(windows):
|
||||
var refFd: Handle
|
||||
var refFd: Handle = default(Handle)
|
||||
# NOTE: This function shouldn't be used to duplicate sockets,
|
||||
# as this function may mess with the socket internal refcounting.
|
||||
# but due to the lack of type segmentation in the stdlib for
|
||||
@@ -51,7 +51,7 @@ proc leakCheck(f: AsyncFD | int | FileHandle | SocketHandle, msg: string,
|
||||
proc isValidHandle(f: int): bool =
|
||||
## Check if a handle is valid. Requires OS-native handles.
|
||||
when defined(windows):
|
||||
var flags: DWORD
|
||||
var flags: DWORD = default(DWORD)
|
||||
result = getHandleInformation(f.Handle, addr flags) != 0
|
||||
else:
|
||||
result = fcntl(f.cint, F_GETFD) != -1
|
||||
@@ -88,7 +88,7 @@ proc main() =
|
||||
defer: close client
|
||||
client.connect("127.0.0.1", port)
|
||||
|
||||
var input: Socket
|
||||
var input: Socket = default(Socket)
|
||||
server.accept(input)
|
||||
|
||||
leakCheck(input.getFd, "accept()")
|
||||
|
||||
@@ -12,12 +12,12 @@ when manualTest:
|
||||
import strformat
|
||||
|
||||
proc frexp_test(lo, hi, step: float64) =
|
||||
var exp: int
|
||||
var exp: int = 0
|
||||
var frac: float64
|
||||
|
||||
var eps = 1e-15.float64
|
||||
|
||||
var x:float64 = lo
|
||||
var x: float64 = lo
|
||||
while x <= hi:
|
||||
frac = frexp(x.float, exp)
|
||||
let rslt = pow(2.0, float(exp)) * frac
|
||||
|
||||
@@ -54,7 +54,7 @@ proc main =
|
||||
x.a = val
|
||||
|
||||
m1()
|
||||
var x0: Foo
|
||||
var x0: Foo = Foo()
|
||||
x0.a1 = 10
|
||||
doAssert x0 == Foo(a: 10)
|
||||
|
||||
|
||||
@@ -112,7 +112,7 @@ proc main() =
|
||||
|
||||
when sizeof(int) == 8 or defined(js):
|
||||
block:
|
||||
var s: seq[Hash]
|
||||
var s: seq[Hash] = @[]
|
||||
for a in [0.0, 1.0, -1.0, 1000.0, -1000.0]:
|
||||
let b = hash(a)
|
||||
doAssert b notin s
|
||||
@@ -197,7 +197,7 @@ proc main() =
|
||||
doAssert hash(Obj5(t: false, x: 1)) != hash(Obj5(t: true, y: 2))
|
||||
|
||||
block: # hash(ref|ptr|pointer)
|
||||
var a: array[10, uint8]
|
||||
var a: array[10, uint8] = default(array[10, uint8])
|
||||
# disableVm:
|
||||
whenVMorJs:
|
||||
# pending fix proposed in https://github.com/nim-lang/Nim/issues/15952#issuecomment-786312417
|
||||
|
||||
@@ -45,7 +45,7 @@ when not defined(windows) and not disableSSLTesting():
|
||||
proc runServer(port: Port): bool {.thread.} =
|
||||
## Run a trivial HTTPS server in a {.thread.}
|
||||
## Exit after serving one request
|
||||
|
||||
result = false
|
||||
var socket = newSocket()
|
||||
socket.setSockOpt(OptReusePort, true)
|
||||
socket.bindAddr(port)
|
||||
@@ -55,7 +55,7 @@ when not defined(windows) and not disableSSLTesting():
|
||||
## Handle one connection
|
||||
socket.listen()
|
||||
|
||||
var client: Socket
|
||||
var client: Socket = default(Socket)
|
||||
var address = ""
|
||||
|
||||
log "server: ready"
|
||||
|
||||
@@ -125,7 +125,7 @@ proc main(moveZeroesOut: static bool) =
|
||||
doAssert data.extract.id == 12
|
||||
|
||||
block:
|
||||
var x: seq[Isolated[JsonNode]]
|
||||
var x: seq[Isolated[JsonNode]] = @[]
|
||||
x.add isolate(newJString("1234"))
|
||||
|
||||
doAssert $x == """@[(value: "1234")]"""
|
||||
|
||||
@@ -15,7 +15,7 @@ proc testRoundtrip[T](t: T, expected: string) =
|
||||
let j = t.toJson
|
||||
doAssert $j == expected, "\n" & $j & "\n" & expected
|
||||
doAssert j.jsonTo(T).toJson == j
|
||||
var t2: T
|
||||
var t2: T = default(T)
|
||||
t2.fromJson(j)
|
||||
doAssert t2.toJson == j
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ block: # bug #17454
|
||||
block: # unpackVarargs
|
||||
block:
|
||||
proc bar1(a: varargs[int]): string =
|
||||
result = ""
|
||||
for ai in a: result.add " " & $ai
|
||||
proc bar2(a: varargs[int]) =
|
||||
let s1 = bar1(a)
|
||||
|
||||
@@ -94,10 +94,10 @@ block: # "IpAddress/Sockaddr conversion"
|
||||
|
||||
doAssert($ipaddrstr == $ipaddr_1)
|
||||
|
||||
var sockaddr: Sockaddr_storage
|
||||
var socklen: SockLen
|
||||
var ipaddr_2: IpAddress
|
||||
var port_2: Port
|
||||
var sockaddr: Sockaddr_storage = default(Sockaddr_storage)
|
||||
var socklen: SockLen = default(SockLen)
|
||||
var ipaddr_2: IpAddress = default(IpAddress)
|
||||
var port_2: Port = default(Port)
|
||||
|
||||
toSockAddr(ipaddr_1, Port(0), sockaddr, socklen)
|
||||
fromSockAddr(sockaddr, socklen, ipaddr_2, port_2)
|
||||
@@ -108,11 +108,11 @@ block: # "IpAddress/Sockaddr conversion"
|
||||
doAssert($ipaddr_1 == $ipaddr_2)
|
||||
|
||||
if sockaddr.ss_family.cint == AF_INET.toInt:
|
||||
var sockaddr4: Sockaddr_in
|
||||
var sockaddr4: Sockaddr_in = default(Sockaddr_in)
|
||||
copyMem(addr sockaddr4, addr sockaddr, sizeof(sockaddr4))
|
||||
fromSockAddr(sockaddr4, socklen, ipaddr_2, port_2)
|
||||
elif sockaddr.ss_family.cint == AF_INET6.toInt:
|
||||
var sockaddr6: Sockaddr_in6
|
||||
var sockaddr6: Sockaddr_in6 = default(Sockaddr_in6)
|
||||
copyMem(addr sockaddr6, addr sockaddr, sizeof(sockaddr6))
|
||||
fromSockAddr(sockaddr6, socklen, ipaddr_2, port_2)
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ proc testThread() {.thread.} =
|
||||
|
||||
proc test() =
|
||||
let serverFd = initIPv6Server("::1", port)
|
||||
var t: Thread[void]
|
||||
var t: Thread[void] = default(Thread[void])
|
||||
createThread(t, testThread)
|
||||
|
||||
var done = false
|
||||
|
||||
@@ -47,6 +47,7 @@ proc main() =
|
||||
|
||||
block example:
|
||||
proc find(haystack: string, needle: char): Option[int] =
|
||||
result = none(int)
|
||||
for i, c in haystack:
|
||||
if c == needle:
|
||||
return some i
|
||||
@@ -105,7 +106,7 @@ proc main() =
|
||||
block filter:
|
||||
doAssert(some(123).filter(proc (v: int): bool = v == 123) == some(123))
|
||||
doAssert(some(456).filter(proc (v: int): bool = v == 123).isNone)
|
||||
doAssert(intNone.filter(proc (v: int): bool = doAssert false).isNone)
|
||||
doAssert(intNone.filter(proc (v: int): bool = raiseAssert "false").isNone)
|
||||
|
||||
block flatMap:
|
||||
proc addOneIfNotZero(v: int): Option[int] =
|
||||
@@ -136,7 +137,7 @@ proc main() =
|
||||
doAssert(some(0).flatMap(maybeToString).flatMap(maybeExclaim) == none(string))
|
||||
|
||||
block SomePointer:
|
||||
var intref: ref int
|
||||
var intref: ref int = nil
|
||||
doAssert(option(intref).isNone)
|
||||
intref.new
|
||||
doAssert(option(intref).isSome)
|
||||
|
||||
@@ -44,12 +44,12 @@ proc test() =
|
||||
doAssert(parseSaturatedNatural("1_000_000", value) == 9)
|
||||
doAssert value == 1_000_000
|
||||
|
||||
var i64Value: int64
|
||||
var i64Value: int64 = 0'i64
|
||||
discard parseBiggestInt("9223372036854775807", i64Value)
|
||||
doAssert i64Value == 9223372036854775807
|
||||
|
||||
block:
|
||||
var f: float
|
||||
var f: float = 0.0
|
||||
let res = collect:
|
||||
for x in ["9.123456789012345+","11.123456789012345+","9.123456789012345-","8.123456789012345+","9.12345678901234-","9.123456789012345"]:
|
||||
(parseFloat(x, f, 0), $f)
|
||||
|
||||
@@ -192,7 +192,7 @@ block:
|
||||
expr.rule = sequence(capture(ident), *sequence(
|
||||
nonterminal(ws), term('+'), nonterminal(ws), nonterminal(expr)))
|
||||
|
||||
var c: Captures
|
||||
var c: Captures = default(Captures)
|
||||
var s = "a+b + c +d+e+f"
|
||||
doAssert rawMatch(s, expr.rule, 0, c) == len(s)
|
||||
var a = ""
|
||||
@@ -208,7 +208,7 @@ block:
|
||||
doAssert match("_______ana", peg"A <- 'ana' / . A")
|
||||
doAssert match("abcs%%%", peg"A <- ..A / .A / '%'")
|
||||
|
||||
var matches: array[0..MaxSubpatterns-1, string]
|
||||
var matches: array[0..MaxSubpatterns-1, string] = default(array[0..MaxSubpatterns-1, string])
|
||||
if "abc" =~ peg"{'a'}'bc' 'xyz' / {\ident}":
|
||||
doAssert matches[0] == "abc"
|
||||
else:
|
||||
@@ -325,7 +325,7 @@ block:
|
||||
call()
|
||||
call()
|
||||
"""
|
||||
var c: Captures
|
||||
var c: Captures = default(Captures)
|
||||
doAssert program.len == program.rawMatch(grammar, 0, c)
|
||||
doAssert c.ml == 1
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ when not defined(js):
|
||||
randomize(233)
|
||||
|
||||
proc main() =
|
||||
var occur: array[1000, int]
|
||||
var occur: array[1000, int] = default(array[1000, int])
|
||||
|
||||
for i in 0..100_000:
|
||||
let x = rand(high(occur))
|
||||
|
||||
@@ -23,7 +23,7 @@ proc testAll() =
|
||||
doAssert find("_____abc_______", re"abc") == 5
|
||||
doAssert findBounds("_____abc_______", re"abc") == (5,7)
|
||||
|
||||
var matches: array[6, string]
|
||||
var matches: array[6, string] = default(array[6, string])
|
||||
if match("abcdefg", re"c(d)ef(g)", matches, 2):
|
||||
doAssert matches[0] == "d"
|
||||
doAssert matches[1] == "g"
|
||||
@@ -85,7 +85,7 @@ proc testAll() =
|
||||
doAssert("XYZ".match(re"^\d*") == true)
|
||||
|
||||
block:
|
||||
var matches: array[16, string]
|
||||
var matches: array[16, string] = default(array[16, string])
|
||||
if match("abcdefghijklmnop", re"(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)", matches):
|
||||
for i in 0..matches.high:
|
||||
doAssert matches[i] == $chr(i + 'a'.ord)
|
||||
|
||||
@@ -41,11 +41,13 @@ proc toAst(input: string,
|
||||
warnings: ref seq[string] = nil): string =
|
||||
## If `error` is nil then no errors should be generated.
|
||||
## The same goes for `warnings`.
|
||||
result = ""
|
||||
|
||||
proc testMsgHandler(filename: string, line, col: int, msgkind: MsgKind,
|
||||
arg: string) =
|
||||
let mc = msgkind.whichMsgClass
|
||||
let a = $msgkind % arg
|
||||
var message: string
|
||||
var message: string = ""
|
||||
toLocation(message, filename, line, col + ColRstOffset)
|
||||
message.add " $1: $2" % [$mc, a]
|
||||
if mc == mcError:
|
||||
|
||||
@@ -22,11 +22,13 @@ proc toHtml(input: string,
|
||||
warnings: ref seq[string] = nil): string =
|
||||
## If `error` is nil then no errors should be generated.
|
||||
## The same goes for `warnings`.
|
||||
result = ""
|
||||
|
||||
proc testMsgHandler(filename: string, line, col: int, msgkind: MsgKind,
|
||||
arg: string) =
|
||||
let mc = msgkind.whichMsgClass
|
||||
let a = $msgkind % arg
|
||||
var message: string
|
||||
var message: string = ""
|
||||
toLocation(message, filename, line, col + ColRstOffset)
|
||||
message.add " $1: $2" % [$mc, a]
|
||||
if mc == mcError:
|
||||
|
||||
@@ -275,7 +275,10 @@ block: # toSeq test
|
||||
numeric = @[1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||||
oddNumbers = toSeq(filter(numeric) do (x: int) -> bool:
|
||||
if x mod 2 == 1:
|
||||
result = true)
|
||||
result = true
|
||||
else:
|
||||
result = false
|
||||
)
|
||||
doAssert oddNumbers == @[1, 3, 5, 7, 9]
|
||||
|
||||
block:
|
||||
|
||||
@@ -15,6 +15,7 @@ suite "test sort, sorted, and isSorted procs":
|
||||
age: int
|
||||
|
||||
func newUser(name: string, age: int): User =
|
||||
result = default(User)
|
||||
result.name = name
|
||||
result.age = age
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ proc main() =
|
||||
when defined(posix):
|
||||
var
|
||||
ignoreAction = Sigaction(sa_handler: SIG_IGN)
|
||||
oldSigPipeHandler: Sigaction
|
||||
oldSigPipeHandler: Sigaction = default(Sigaction)
|
||||
if sigemptyset(ignoreAction.sa_mask) == -1:
|
||||
raiseOSError(osLastError(), "Couldn't create an empty signal set")
|
||||
if sigaction(SIGPIPE, ignoreAction, oldSigPipeHandler) == -1:
|
||||
@@ -58,10 +58,10 @@ proc main() =
|
||||
let (_, port) = server.getLocalAddr()
|
||||
server.listen()
|
||||
|
||||
var clientThread: Thread[Port]
|
||||
var clientThread: Thread[Port] = default(Thread[Port])
|
||||
createThread(clientThread, abruptShutdown, port)
|
||||
|
||||
var peer: Socket
|
||||
var peer: Socket = default(Socket)
|
||||
try:
|
||||
server.accept(peer)
|
||||
peer.send(DummyData)
|
||||
@@ -88,10 +88,10 @@ proc main() =
|
||||
let (_, port) = server.getLocalAddr()
|
||||
server.listen()
|
||||
|
||||
var clientThread: Thread[Port]
|
||||
var clientThread: Thread[Port] = default(Thread[Port])
|
||||
createThread(clientThread, abruptShutdown, port)
|
||||
|
||||
var peer: Socket
|
||||
var peer: Socket = default(Socket)
|
||||
try:
|
||||
server.accept(peer)
|
||||
peer.send(DummyData)
|
||||
@@ -115,10 +115,10 @@ proc main() =
|
||||
let (_, port) = server.getLocalAddr()
|
||||
server.listen()
|
||||
|
||||
var clientThread: Thread[Port]
|
||||
var clientThread: Thread[Port] = default(Thread[Port])
|
||||
createThread(clientThread, notifiedShutdown, port)
|
||||
|
||||
var peer: Socket
|
||||
var peer: Socket = default(Socket)
|
||||
try:
|
||||
server.accept(peer)
|
||||
peer.send(DummyData)
|
||||
|
||||
@@ -159,7 +159,7 @@ block tsegfaults:
|
||||
var crashes = 0
|
||||
proc main =
|
||||
try:
|
||||
var x: ptr int
|
||||
var x: ptr int = nil
|
||||
echo x[]
|
||||
try:
|
||||
raise newException(ValueError, "not a crash")
|
||||
|
||||
@@ -95,6 +95,7 @@ proc main() =
|
||||
a0.add b0.toOpenArray(1,3)
|
||||
doAssert a0 == "hioob"
|
||||
proc fn(c: openArray[char]): string =
|
||||
result = ""
|
||||
result.add c
|
||||
doAssert fn("def") == "def"
|
||||
doAssert fn(['d','\0', 'f'])[2] == 'f'
|
||||
|
||||
@@ -24,7 +24,7 @@ proc main() =
|
||||
template formatValue(result: var string; value: Obj; specifier: string) =
|
||||
result.formatValue($value, specifier)
|
||||
|
||||
var o: Obj
|
||||
var o: Obj = default(Obj)
|
||||
doAssert fmt"{o}" == "foobar"
|
||||
doAssert fmt"{o:10}" == "foobar "
|
||||
|
||||
@@ -292,7 +292,7 @@ proc main() =
|
||||
let x = 3.14
|
||||
doAssert fmt"{(if x!=0: 1.0/x else: 0):.5}" == "0.31847"
|
||||
doAssert fmt"""{(block:
|
||||
var res: string
|
||||
var res: string = ""
|
||||
for i in 1..15:
|
||||
res.add (if i mod 15 == 0: "FizzBuzz"
|
||||
elif i mod 5 == 0: "Buzz"
|
||||
@@ -564,7 +564,7 @@ proc main() =
|
||||
doAssert fmt"""{(if true: "'" & ')' else: "")}""" == "')"
|
||||
|
||||
block: # issue #20381
|
||||
var ss: seq[string]
|
||||
var ss: seq[string] = @[]
|
||||
template myTemplate(s: string) =
|
||||
ss.add s
|
||||
ss.add s
|
||||
|
||||
@@ -113,6 +113,7 @@ block:
|
||||
while start+result < input.len and input[start+result] in seps: inc result
|
||||
|
||||
proc demangle(s: string; res: var string; start: int): int =
|
||||
result = 0
|
||||
while result+start < s.len and s[result+start] in {'_', '@'}: inc result
|
||||
res = ""
|
||||
while result+start < s.len and s[result+start] > ' ' and s[result+start] != '_':
|
||||
|
||||
@@ -22,6 +22,7 @@ type
|
||||
PRadixNodeLeaf = ref TRadixNodeLeaf
|
||||
|
||||
proc search(r: PRadixNode, s: string): PRadixNode =
|
||||
result = default(PRadixNode)
|
||||
var r = r
|
||||
var i = 0
|
||||
while r != nil:
|
||||
@@ -55,7 +56,7 @@ proc contains*(r: PRadixNode, s: string): bool =
|
||||
return search(r, s) != nil
|
||||
|
||||
proc testOrIncl*(r: var PRadixNode, s: string): bool =
|
||||
nil
|
||||
result = false
|
||||
|
||||
proc incl*(r: var PRadixNode, s: string) = discard testOrIncl(r, s)
|
||||
|
||||
|
||||
@@ -291,7 +291,7 @@ template main() =
|
||||
|
||||
block: # bug #20704
|
||||
proc test() =
|
||||
var xs, ys: seq[int]
|
||||
var xs, ys: seq[int] = @[]
|
||||
for i in 0..5:
|
||||
xs.add(i)
|
||||
|
||||
|
||||
@@ -513,12 +513,12 @@ block:
|
||||
|
||||
proc testReturnValues() =
|
||||
let t = toTask returnsSomething(2233, 11)
|
||||
var res: int
|
||||
var res: int = 0
|
||||
t.invoke(addr res)
|
||||
doAssert res == 2233+11
|
||||
|
||||
let tb = toTask noArgsButReturnsSomething()
|
||||
var resB: string
|
||||
var resB: string = ""
|
||||
tb.invoke(addr resB)
|
||||
doAssert resB == "abcdef"
|
||||
|
||||
|
||||
@@ -12,11 +12,13 @@ proc staticTz(hours, minutes, seconds: int = 0): Timezone {.noSideEffect.} =
|
||||
let offset = hours * 3600 + minutes * 60 + seconds
|
||||
|
||||
proc zonedTimeFromAdjTime(adjTime: Time): ZonedTime =
|
||||
result = default(ZonedTime)
|
||||
result.isDst = false
|
||||
result.utcOffset = offset
|
||||
result.time = adjTime + initDuration(seconds = offset)
|
||||
|
||||
proc zonedTimeFromTime(time: Time): ZonedTime =
|
||||
result = default(ZonedTime)
|
||||
result.isDst = false
|
||||
result.utcOffset = offset
|
||||
result.time = time
|
||||
|
||||
@@ -78,7 +78,7 @@ block:
|
||||
block: # bug #23556
|
||||
proc test =
|
||||
var
|
||||
t: seq[int]
|
||||
t: seq[int] = @[]
|
||||
aseq = toAny(t)
|
||||
|
||||
invokeNewSeq(aseq, 0)
|
||||
|
||||
@@ -6,7 +6,7 @@ import std/assertions
|
||||
|
||||
template main =
|
||||
proc hello(x: varargs[string]): seq[string] =
|
||||
var s: seq[string]
|
||||
var s: seq[string] = @[]
|
||||
s.add x
|
||||
s
|
||||
|
||||
|
||||
@@ -33,9 +33,9 @@ proc main() =
|
||||
|
||||
proc fun(a: Bar): auto = a.b2
|
||||
|
||||
var a: Foo
|
||||
var a: Foo = nil
|
||||
|
||||
var x6: ptr Bar
|
||||
var x6: ptr Bar = nil
|
||||
when nimvm: discard # pending https://github.com/timotheecour/Nim/issues/568
|
||||
else:
|
||||
x6 = create(Bar)
|
||||
@@ -107,7 +107,7 @@ proc main() =
|
||||
d2: D
|
||||
proc identity[T](a: T): T = a
|
||||
proc identity2[T](a: T, ignore: int): T = a
|
||||
var a: A
|
||||
var a: A = default(A)
|
||||
doAssert ?.a.b.c.d.e.f == 0
|
||||
doAssert ?.a.b.c.d.e.d2.d3[].d3.e.d2.e.f == 0
|
||||
doAssert ?.a.b.c.d.d3[].e.f == 0
|
||||
@@ -174,7 +174,7 @@ proc main() =
|
||||
doAssert ?.identity(d) == nil
|
||||
doAssert ?.identity(d[]) == default(typeof(d[]))
|
||||
doAssert ?.identity(d[]).i4 == 0
|
||||
var a: A
|
||||
var a: A = default(A)
|
||||
doAssert ?.identity(a) == default(A)
|
||||
doAssert ?.identity(a.a0) == 0
|
||||
doAssert ?.identity(a.d) == nil
|
||||
@@ -195,7 +195,7 @@ proc main() =
|
||||
b1: float
|
||||
|
||||
block:
|
||||
var a: A
|
||||
var a: A = default(A)
|
||||
doAssert ?.a.a0.a1[0].a2.addr == nil
|
||||
a = A(a2: 3)
|
||||
doAssert ?.a.a0.a1[0].a2.addr == nil
|
||||
|
||||
@@ -5,6 +5,7 @@ type MyType* [T] = object
|
||||
lock: Lock
|
||||
|
||||
proc createMyType*[T]: MyType[T] =
|
||||
result = default(MyType[T])
|
||||
initLock(result.lock)
|
||||
|
||||
proc use* (m: var MyType): int =
|
||||
|
||||
Reference in New Issue
Block a user