File: tbyvar.nim

package info (click to toggle)
nim 0.19.4-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 462,356 kB
  • sloc: sh: 11,089; ansic: 4,699; makefile: 706; python: 309; sql: 297; asm: 141; xml: 13
file content (122 lines) | stat: -rw-r--r-- 1,851 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
discard """
  output: '''foo 12
bar 12
2
foo 12
bar 12
2
12.5
(nums: @[5, 5, 10, 5, 5, 5, 5, 5, 5, 5])
(nums: @[5, 5, 50, 5, 5, 5, 5, 5, 5, 5])
(nums: @[5, 5, 45, 5, 5, 5, 5, 5, 5, 5])
(nums: @[5, 5, 9, 5, 5, 5, 5, 5, 5, 5])
asd
'''
"""

# bug #1489
proc foo(x: int) = echo "foo ", x
proc bar(y: var int) = echo "bar ", y

var x = 12
foo(x)
bar(x)

# bug #1490
var y = 1
y *= 2
echo y

proc main =
  var x = 12
  foo(x)
  bar(x)

  var y = 1
  y *= 2
  echo y

main()

# Test: pass var seq to var openarray
var s = @[2, 1]
proc foo(a: var openarray[int]) = a[0] = 123

proc bar(s: var seq[int], a: int) =
  doAssert(a == 5)
  foo(s)
s.bar(5)
doAssert(s == @[123, 1])

import tables
block: # Test get addr of byvar return value
  var t = initTable[string, int]()
  t["hi"] = 5
  let a = addr t["hi"]
  a[] = 10
  doAssert(t["hi"] == 10)

block: # Test var arg inside case expression. #5244
  proc foo(a: var string) =
    a = case a
    of "a": "error"
    of "b": "error"
    else: a
  var a = "ok"
  foo(a)
  doAssert(a == "ok")


proc mainowar =
  var x = 9.0
  x += 3.5
  echo x

mainowar()


# bug #5608

type Foo = object
    nums : seq[float]

proc newFoo(len : int, default = 0.0) : Foo =
    result = Foo()
    result.nums = newSeq[float](len)
    for i in 0..(len - 1):
        result.nums[i] = default

proc `[]=`(f : var Foo, i : int, v : float) =
    f.nums[i] = v

proc `[]`(f : Foo, i : int) : float = f.nums[i]

proc `[]`(f : var Foo, i : int) : var float = f.nums[i]

var f = newFoo(10,5)

f[2] += 5
echo f
f[2] *= 5
echo f
f[2] -= 5
echo f
f[2] /= 5
echo f

# regression for #5608
import tables

type
  SomeObj = ref object
    s: cstring

var a = initTable[cstring, Table[cstring, SomeObj]]()

var b = initTable[cstring, SomeObj]()

b.add(cstring"b", SomeObj(s: cstring"asd"))

a.add(cstring"a", b)

echo a[cstring"a"][cstring"b"].s