fix: broken conditionals

This commit is contained in:
Brett Broadhurst 2026-03-30 05:44:35 -06:00
parent b231e66b49
commit 97a43f63eb
Failed to generate hash of commit
33 changed files with 358 additions and 313 deletions

View file

@ -1,23 +0,0 @@
// RUN: %ink-compiler --stdin --compile-only --dump-ast < %s | FileCheck %s
// CHECK: File "<STDIN>"
// CHECK-NEXT: `--BlockStmt <line:19, line:23>
// CHECK-NEXT: `--ContentStmt <line:19, col:1:52>
// CHECK-NEXT: `--Content <col:1, col:52>
// CHECK-NEXT: `--IfStmt <line:19, line:23>
// CHECK-NEXT: |--TrueLiteral <col:2, col:6>
// CHECK-NEXT: |--BlockStmt <line:20, line:20>
// CHECK-NEXT: | `--ContentStmt <line:20, col:5:18>
// CHECK-NEXT: | `--Content <col:5, col:18>
// CHECK-NEXT: | `--StringLiteral `Hello, world!` <col:5, col:18>
// CHECK-NEXT: `--ElseBranch <col:3, col:13>
// CHECK-NEXT: `--BlockStmt <line:22, line:22>
// CHECK-NEXT: `--ContentStmt <line:22, col:5:17>
// CHECK-NEXT: `--Content <col:5, col:17>
// CHECK-NEXT: `--StringLiteral `Unreachable!` <col:5, col:17>
{true:
Hello, world!
- else:
Unreachable!
}

View file

@ -1,16 +0,0 @@
// RUN: %ink-compiler --stdin --compile-only --dump-ast < %s | FileCheck %s
// CHECK: File "<STDIN>"
// CHECK-NEXT: `--BlockStmt <line:14, line:16>
// CHECK-NEXT: `--ContentStmt <line:14, col:1:27>
// CHECK-NEXT: `--Content <col:1, col:27>
// CHECK-NEXT: `--IfStmt <line:14, line:16>
// CHECK-NEXT: |--TrueLiteral <col:2, col:6>
// CHECK-NEXT: `--BlockStmt <line:15, line:15>
// CHECK-NEXT: `--ContentStmt <line:15, col:5:18>
// CHECK-NEXT: `--Content <col:5, col:18>
// CHECK-NEXT: `--StringLiteral `Hello, world!` <col:5, col:18>
{true:
Hello, world!
}

View file

@ -1 +0,0 @@
{true: Hello world!}

View file

@ -1,46 +0,0 @@
// RUN: %ink-compiler --stdin --compile-only --dump-ast < %s | FileCheck %s
// CHECK: File "<STDIN>"
// CHECK-NEXT: |--BlockStmt <line:39, line:39>
// CHECK-NEXT: | `--ContentStmt <line:39, col:1:18>
// CHECK-NEXT: | `--Content <col:1, col:18>
// CHECK-NEXT: | `--InlineLogicExpr <col:1, col:18>
// CHECK-NEXT: | `--CallExpr <col:3, col:17>
// CHECK-NEXT: | |--Identifier `factorial` <col:3, col:12>
// CHECK-NEXT: | `--ArgumentList <col:12, col:17>
// CHECK-NEXT: | `--NumberLiteral `10` <col:13, col:15>
// CHECK-NEXT: `--FunctionDecl <line:41, line:46>
// CHECK-NEXT: |--FunctionProto <col:1, col:25>
// CHECK-NEXT: | |--Identifier `factorial` <col:13, col:22>
// CHECK-NEXT: | `--ParamList <col:22, col:25>
// CHECK-NEXT: | `--ParamDecl `n` <col:23, col:24>
// CHECK-NEXT: `--BlockStmt <line:42, line:46>
// CHECK-NEXT: `--ContentStmt <line:42, col:3:83>
// CHECK-NEXT: `--Content <col:3, col:83>
// CHECK-NEXT: `--IfStmt <line:42, line:46>
// CHECK-NEXT: |--LogicalEqualityExpr <col:5, col:11>
// CHECK-NEXT: | |--Identifier `n` <col:5, col:6>
// CHECK-NEXT: | `--NumberLiteral `1` <col:10, col:11>
// CHECK-NEXT: |--BlockStmt <line:43, line:43>
// CHECK-NEXT: | `--ReturnStmt <line:43, col:9:17>
// CHECK-NEXT: | `--NumberLiteral `1` <col:16, col:17>
// CHECK-NEXT: `--ElseBranch <col:7, col:19>
// CHECK-NEXT: `--BlockStmt <line:45, line:45>
// CHECK-NEXT: `--ReturnStmt <line:45, col:9:38>
// CHECK-NEXT: `--MultiplyExpr <col:17, col:37>
// CHECK-NEXT: |--Identifier `n` <col:17, col:18>
// CHECK-NEXT: `--CallExpr <col:21, col:37>
// CHECK-NEXT: |--Identifier `factorial` <col:21, col:30>
// CHECK-NEXT: `--ArgumentList <col:30, col:37>
// CHECK-NEXT: `--SubtractExpr <col:31, col:36>
// CHECK-NEXT: |--Identifier `n` <col:31, col:32>
// CHECK-NEXT: `--NumberLiteral `1` <col:35, col:36>
{ factorial(10) }
== function factorial(n)
{ n == 1:
~ return 1
- else:
~ return (n * factorial(n - 1))
}

View file

@ -1,62 +0,0 @@
// RUN: %ink-compiler --stdin --compile-only --dump-ast < %s | FileCheck %s
// CHECK: File "<STDIN>"
// CHECK-NEXT: |--BlockStmt <line:52, line:52>
// CHECK-NEXT: | `--ContentStmt <line:52, col:1:12>
// CHECK-NEXT: | `--Content <col:1, col:12>
// CHECK-NEXT: | `--InlineLogicExpr <col:1, col:12>
// CHECK-NEXT: | `--CallExpr <col:3, col:11>
// CHECK-NEXT: | |--Identifier `fib` <col:3, col:6>
// CHECK-NEXT: | `--ArgumentList <col:6, col:11>
// CHECK-NEXT: | `--NumberLiteral `10` <col:7, col:9>
// CHECK-NEXT: `--FunctionDecl <line:54, line:62>
// CHECK-NEXT: |--FunctionProto <col:1, col:19>
// CHECK-NEXT: | |--Identifier `fib` <col:13, col:16>
// CHECK-NEXT: | `--ParamList <col:16, col:19>
// CHECK-NEXT: | `--ParamDecl `n` <col:17, col:18>
// CHECK-NEXT: `--BlockStmt <line:55, line:62>
// CHECK-NEXT: `--ContentStmt <line:55, col:3:121>
// CHECK-NEXT: `--Content <col:3, col:121>
// CHECK-NEXT: `--MultiIfStmt <line:55, line:62>
// CHECK-NEXT: |--IfBranch <col:7, col:21>
// CHECK-NEXT: | |--LogicalEqualityExpr <col:7, col:13>
// CHECK-NEXT: | | |--Identifier `n` <col:7, col:8>
// CHECK-NEXT: | | `--NumberLiteral `0` <col:12, col:13>
// CHECK-NEXT: | `--BlockStmt <line:57, line:57>
// CHECK-NEXT: | `--ReturnStmt <line:57, col:9:17>
// CHECK-NEXT: | `--NumberLiteral `0` <col:16, col:17>
// CHECK-NEXT: |--IfBranch <col:7, col:21>
// CHECK-NEXT: | |--LogicalEqualityExpr <col:7, col:13>
// CHECK-NEXT: | | |--Identifier `n` <col:7, col:8>
// CHECK-NEXT: | | `--NumberLiteral `1` <col:12, col:13>
// CHECK-NEXT: | `--BlockStmt <line:59, line:59>
// CHECK-NEXT: | `--ReturnStmt <line:59, col:9:17>
// CHECK-NEXT: | `--NumberLiteral `1` <col:16, col:17>
// CHECK-NEXT: `--ElseBranch <col:7, col:19>
// CHECK-NEXT: `--BlockStmt <line:61, line:61>
// CHECK-NEXT: `--ReturnStmt <line:61, col:9:39>
// CHECK-NEXT: `--AddExpr <col:16, col:39>
// CHECK-NEXT: |--CallExpr <col:16, col:27>
// CHECK-NEXT: | |--Identifier `fib` <col:16, col:19>
// CHECK-NEXT: | `--ArgumentList <col:19, col:27>
// CHECK-NEXT: | `--SubtractExpr <col:20, col:25>
// CHECK-NEXT: | |--Identifier `n` <col:20, col:21>
// CHECK-NEXT: | `--NumberLiteral `1` <col:24, col:25>
// CHECK-NEXT: `--CallExpr <col:29, col:39>
// CHECK-NEXT: |--Identifier `fib` <col:29, col:32>
// CHECK-NEXT: `--ArgumentList <col:32, col:39>
// CHECK-NEXT: `--SubtractExpr <col:33, col:38>
// CHECK-NEXT: |--Identifier `n` <col:33, col:34>
// CHECK-NEXT: `--NumberLiteral `2` <col:37, col:38>
{ fib(10) }
== function fib(n)
{
- n == 0:
~ return 0
- n == 1:
~ return 1
- else:
~ return fib(n - 1) + fib(n - 2)
}

View file

@ -1,42 +0,0 @@
// RUN: %ink-compiler --stdin --compile-only --dump-ast < %s | FileCheck %s
// CHECK: File "<STDIN>"
// CHECK-NEXT: `--BlockStmt <line:36, line:42>
// CHECK-NEXT: |--VarDecl <line:36, col:1:10>
// CHECK-NEXT: |  |--Identifier `x` <col:5, col:6>
// CHECK-NEXT: |  `--NumberLiteral `1` <col:9, col:10>
// CHECK-NEXT: `--ContentStmt <line:38, col:1:48>
// CHECK-NEXT: `--Content <col:1, col:48>
// CHECK-NEXT: `--MultiIfStmt <col:1, col:45>
// CHECK-NEXT: |--IfBranch <col:3, col:11>
// CHECK-NEXT: |  |--LogicalEqualityExpr <col:3, col:9>
// CHECK-NEXT: |  |  |--Identifier `x` <col:3, col:4>
// CHECK-NEXT: |  |  `--NumberLiteral `1` <col:8, col:9>
// CHECK-NEXT: |  `--BlockStmt <line:39, line:39>
// CHECK-NEXT: |   `--ContentStmt <line:39, col:11:14>
// CHECK-NEXT: |   `--Content <col:11, col:14>
// CHECK-NEXT: |   `--StringLiteral `One` <col:11, col:14>
// CHECK-NEXT: |--IfBranch <col:3, col:11>
// CHECK-NEXT: |  |--LogicalEqualityExpr <col:3, col:9>
// CHECK-NEXT: |  |  |--Identifier `x` <col:3, col:4>
// CHECK-NEXT: |  |  `--NumberLiteral `2` <col:8, col:9>
// CHECK-NEXT: |  `--BlockStmt <line:40, line:40>
// CHECK-NEXT: |   `--ContentStmt <line:40, col:11:14>
// CHECK-NEXT: |   `--Content <col:11, col:14>
// CHECK-NEXT: |   `--StringLiteral `Two` <col:11, col:14>
// CHECK-NEXT: `--IfBranch <col:3, col:11>
// CHECK-NEXT: |--LogicalEqualityExpr <col:3, col:9>
// CHECK-NEXT: |  |--Identifier `x` <col:3, col:4>
// CHECK-NEXT: |  `--NumberLiteral `3` <col:8, col:9>
// CHECK-NEXT: `--BlockStmt <line:41, line:41>
// CHECK-NEXT: `--ContentStmt <line:41, col:11:16>
// CHECK-NEXT: `--Content <col:11, col:16>
// CHECK-NEXT: `--StringLiteral `Three` <col:11, col:16>
VAR x = 1
{
- x == 1: One
- x == 2: Two
- x == 3: Three
}

View file

@ -1,47 +0,0 @@
// RUN: %ink-compiler --stdin --compile-only --dump-ast < %s | FileCheck %s
// CHECK: File "<STDIN>"
// CHECK-NEXT: `--BlockStmt <line:41, line:47>
// CHECK-NEXT: |--TempDecl <line:41, col:3:15>
// CHECK-NEXT: |  |--Identifier `foo` <col:8, col:11>
// CHECK-NEXT: |  `--NumberLiteral `3` <col:14, col:15>
// CHECK-NEXT: `--ContentStmt <line:42, col:1:97>
// CHECK-NEXT: `--Content <col:1, col:97>
// CHECK-NEXT: `--MultiIfStmt <col:5, col:94>
// CHECK-NEXT: |--IfBranch <col:7, col:17>
// CHECK-NEXT: |  |--LogicalEqualityExpr <col:7, col:15>
// CHECK-NEXT: |  |  |--Identifier `foo` <col:7, col:10>
// CHECK-NEXT: |  |  `--NumberLiteral `1` <col:14, col:15>
// CHECK-NEXT: |  `--BlockStmt <line:43, line:43>
// CHECK-NEXT: |   `--ContentStmt <line:43, col:17:21>
// CHECK-NEXT: |   `--Content <col:17, col:21>
// CHECK-NEXT: |   `--StringLiteral `One!` <col:17, col:21>
// CHECK-NEXT: |--IfBranch <col:7, col:17>
// CHECK-NEXT: |  |--LogicalEqualityExpr <col:7, col:15>
// CHECK-NEXT: |  |  |--Identifier `foo` <col:7, col:10>
// CHECK-NEXT: |  |  `--NumberLiteral `2` <col:14, col:15>
// CHECK-NEXT: |  `--BlockStmt <line:44, line:44>
// CHECK-NEXT: |   `--ContentStmt <line:44, col:17:21>
// CHECK-NEXT: |   `--Content <col:17, col:21>
// CHECK-NEXT: |   `--StringLiteral `Two!` <col:17, col:21>
// CHECK-NEXT: |--IfBranch <col:7, col:17>
// CHECK-NEXT: |  |--LogicalEqualityExpr <col:7, col:15>
// CHECK-NEXT: |  |  |--Identifier `foo` <col:7, col:10>
// CHECK-NEXT: |  |  `--NumberLiteral `3` <col:14, col:15>
// CHECK-NEXT: |  `--BlockStmt <line:45, line:45>
// CHECK-NEXT: |   `--ContentStmt <line:45, col:17:23>
// CHECK-NEXT: |   `--Content <col:17, col:23>
// CHECK-NEXT: |   `--StringLiteral `Three!` <col:17, col:23>
// CHECK-NEXT: `--ElseBranch <col:7, col:13>
// CHECK-NEXT: `--BlockStmt <line:46, line:46>
// CHECK-NEXT: `--ContentStmt <line:46, col:13:28>
// CHECK-NEXT: `--Content <col:13, col:28>
// CHECK-NEXT: `--StringLiteral `Something else!` <col:13, col:28>
~ temp foo = 3
{
- foo == 1: One!
- foo == 2: Two!
- foo == 3: Three!
- else: Something else!
}