diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-09-17 16:26:01 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-09-17 16:26:01 +0100 |
| commit | 99bfde40214711b05043907ad773304bd8ea5e93 (patch) | |
| tree | 3b21bb7e062c70ca9c8a3c8c89e06512e753c3e9 /src/main/java | |
| parent | 70659e173011cf7ad5d7052f8a94a20e98c183b8 (diff) | |
Add untyped tuple target
Diffstat (limited to 'src/main/java')
3 files changed, 14 insertions, 0 deletions
diff --git a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedTargetNode.java b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedTargetNode.java index 4b42a82c..3cea8c2d 100644 --- a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedTargetNode.java +++ b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedTargetNode.java @@ -2,8 +2,11 @@ package org.shedlang.compiler.ast.untyped; import org.shedlang.compiler.sources.Source; +import java.util.List; + public sealed interface UntypedTargetNode extends UntypedNode { record Reassign(String name, Source source) implements UntypedTargetNode {} + record Tuple(List<UntypedTargetNode> elements, Source source) implements UntypedTargetNode {} record Val(String name, Source source) implements UntypedTargetNode, UntypedVariableDeclarationNode {} record Var(String name, Source source) implements UntypedTargetNode, UntypedVariableDeclarationNode {} } diff --git a/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariables.java b/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariables.java index 87823b46..43a087b5 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariables.java +++ b/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariables.java @@ -82,6 +82,13 @@ class DeclaredVariables { case UntypedTargetNode.Reassign reassign -> variables; + case UntypedTargetNode.Tuple tuple -> { + for (var element : tuple.elements()) { + variables = forTarget(element, variables); + } + yield variables; + } + case UntypedTargetNode.Var var -> variables.plus(new DeclaredVariable( var.name(), diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java index 5db00b44..bc5ff8b1 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java @@ -829,6 +829,10 @@ public class TypeChecker { yield context.toResult(new TypedTargetNode.Reassign(reassign.name(), target.source())); } + case UntypedTargetNode.Tuple tuple -> { + throw new UnsupportedOperationException("TODO"); + } + case UntypedTargetNode.Val val -> { context = context.define( val.name(), |
