From 3c599ed7db20aeaa18c77a6beaecec4681b8ef0e Mon Sep 17 00:00:00 2001 From: demotomohiro Date: Thu, 30 Oct 2025 21:26:39 +0900 Subject: [PATCH] adds expression test code --- compiler/icnif/nifencoder.nim | 2 +- tests/icnif/tencode_node2node.nim | 1 + tests/icnif/testcode/modtestexprs.nim | 79 +++++++++++++++++++++++++++ 3 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 tests/icnif/testcode/modtestexprs.nim diff --git a/compiler/icnif/nifencoder.nim b/compiler/icnif/nifencoder.nim index fad4e7de4d..bae7b039ad 100644 --- a/compiler/icnif/nifencoder.nim +++ b/compiler/icnif/nifencoder.nim @@ -190,7 +190,7 @@ proc toNif(c: var EncodeContext; n: PNode) = c.withNode n: discard else: - assert n.kind in {nkArgList, nkBracket, nkRecList, nkPragma} or n.len > 0, $n.kind + assert n.kind in {nkArgList, nkBracket, nkRecList, nkPragma, nkType} or n.len > 0, $n.kind c.withNode(n): for i in 0 ..< n.len: c.toNif n[i] diff --git a/tests/icnif/tencode_node2node.nim b/tests/icnif/tencode_node2node.nim index 6054368d02..564ea8606a 100644 --- a/tests/icnif/tencode_node2node.nim +++ b/tests/icnif/tencode_node2node.nim @@ -333,3 +333,4 @@ testNifEncDec(graph, "modtestpragmas.nim") testNifEncDec(graph, "modtestprocs.nim") testNifEncDec(graph, "modteststatements.nim") testNifEncDec(graph, "modtestgenerics.nim") +testNifEncDec(graph, "modtestexprs.nim") diff --git a/tests/icnif/testcode/modtestexprs.nim b/tests/icnif/testcode/modtestexprs.nim new file mode 100644 index 0000000000..1ffee62905 --- /dev/null +++ b/tests/icnif/testcode/modtestexprs.nim @@ -0,0 +1,79 @@ +type + FooEnum = enum + X, + Y, + Z + +var enumTest = X +enumTest = Y +assert enumTest == Y + +var enumSet = {X, Y} +enumSet.incl Z + +var intArray = [1, 1 + 1, 1 * 2, 0] +intArray[3] = intArray[1] + intArray[0] * intArray[2] +var strArray = ["foo", "ba" & "r", ""] +strArray[2] = $(intArray[2]) +var floatArray = [intArray[0].float, 1.0, 0.0] +floatArray[2] = floatArray[0] + floatArray[1] +var intSeq = @[3, 2] +intSeq.add 1 + +var tup1 = (foo: "Foo", bar: 123) +tup1.foo = "Bar" +tup1.bar = 321 +tup1[0] = "Baz" +assert tup1 is (string, int) +let (tup1foo, tup1bar) = tup1 +let (_, tup1bar2) = tup1 +let (tup1foo2, _) = tup1 + +var testAddr: int +var testPtr = addr testAddr +testPtr[] = 123 + +var testAddr2: array[2, int] +var testPtr2: ptr int +testPtr2 = addr testAddr2[0] +var testPointer: pointer = testPtr2 +testPtr2 = cast[ptr int](testPointer) + +var stmtListExpr = (echo "foo"; "stmtListExpr") +var cond1 = true +var testIfExpr = if cond1: 1 else: -1 +const TestWhenExpr = when sizeof(int) == 8: 1 else: -1 +var cond2: FooEnum = X +var testCaseExpr = case cond2 + of X: + 1 + of Y: + 2 + else: + 3 + +var testBlockExpr = block: + var a = "test" + a + +var testTryExpr = try: + if cond1: + 222 + else: + raise newException(CatchableError, "test") + except CatchableError: + -123 + +var testTryExpr2 = try: + if cond1: + 333 + else: + raise newException(CatchableError, "test") + except CatchableError as e: + echo e.msg + -1234 + finally: + echo "finally" + +proc getNum(a: int): int = a +echo static(getNum(123))