mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
164 lines
2.3 KiB
Nim
164 lines
2.3 KiB
Nim
discard """
|
|
output: '''24
|
|
(bar: "bar")
|
|
1244
|
|
6
|
|
abcdefghijklmnopqrstuvwxyz
|
|
145 23
|
|
3
|
|
2'''
|
|
"""
|
|
|
|
import strutils
|
|
|
|
const fac4 = (var x = 1; for i in 1..4: x *= i; x)
|
|
|
|
echo fac4
|
|
|
|
when true:
|
|
proc test(foo: proc (x, y: int): bool) =
|
|
echo foo(5, 5)
|
|
|
|
|
|
type Foo = object
|
|
bar: string
|
|
|
|
proc newfoo(): Foo =
|
|
result.bar = "bar"
|
|
|
|
echo($newfoo())
|
|
|
|
|
|
proc retInt(x, y: int): int =
|
|
if (var yy = 0; yy != 0):
|
|
echo yy
|
|
else:
|
|
echo(try: parseInt("1244") except ValueError: -1)
|
|
result = case x
|
|
of 23: 3
|
|
of 64:
|
|
case y
|
|
of 1: 2
|
|
of 2: 3
|
|
of 3: 6
|
|
else: 8
|
|
else: 1
|
|
|
|
echo retInt(64, 3)
|
|
|
|
proc buildString(): string =
|
|
result = ""
|
|
for x in 'a'..'z':
|
|
result.add(x)
|
|
|
|
echo buildString()
|
|
|
|
#test(
|
|
# proc (x, y: int): bool =
|
|
# if x == 5: return true
|
|
# if x == 2: return false
|
|
# if y == 78: return true
|
|
#)
|
|
|
|
proc q(): int {.discardable.} = 145
|
|
proc p(): int =
|
|
q()
|
|
|
|
proc p2(a: int): int =
|
|
# result enforces a void context:
|
|
if a == 2:
|
|
result = 23
|
|
q()
|
|
|
|
echo p(), " ", p2(2)
|
|
|
|
proc semiProblem() =
|
|
if false: echo "aye"; echo "indeed"
|
|
|
|
semiProblem()
|
|
|
|
|
|
# bug #844
|
|
|
|
import json
|
|
proc parseResponse(): JsonNode =
|
|
result = % { "key1": % { "key2": % "value" } }
|
|
for key, val in result["key1"]:
|
|
var excMsg = key & "("
|
|
if (var n=result["key2"]; n != nil):
|
|
excMsg &= n.str
|
|
raise newException(CatchableError, excMsg)
|
|
|
|
|
|
|
|
#bug #992
|
|
var se = @[1,2]
|
|
let b = (se[1] = 1; 1)
|
|
|
|
|
|
# bug #1161
|
|
|
|
type
|
|
PFooBase = ref object of RootRef
|
|
field: int
|
|
|
|
PFoo[T] = ref object of PFooBase
|
|
field2: T
|
|
|
|
var testIf =
|
|
if true:
|
|
2
|
|
else:
|
|
3
|
|
|
|
var testCase =
|
|
case 8
|
|
of 8: 9
|
|
else: 10
|
|
|
|
var testTry =
|
|
try:
|
|
PFoo[string](field: 3, field2: "asfasf")
|
|
except:
|
|
PFooBase(field: 5)
|
|
|
|
echo(testTry.field)
|
|
|
|
# bug #6166
|
|
|
|
proc quo(op: proc (x: int): bool): int =
|
|
result =
|
|
if op(3):
|
|
2
|
|
else:
|
|
0
|
|
|
|
echo(
|
|
if true:
|
|
quo do (a: int) -> bool:
|
|
a mod 2 != 0
|
|
else:
|
|
quo do (a: int) -> bool:
|
|
a mod 3 != 0
|
|
)
|
|
|
|
# bug #6980
|
|
|
|
proc fooBool: bool {.discardable.} =
|
|
true
|
|
|
|
if true:
|
|
fooBool()
|
|
else:
|
|
raise newException(ValueError, "argh")
|
|
|
|
# bug #5374
|
|
|
|
proc test1(): int64 {.discardable.} = discard
|
|
proc test2(): int {.discardable.} = discard
|
|
|
|
if true:
|
|
test1()
|
|
else:
|
|
test2()
|