diff options
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(), |
