From 99bfde40214711b05043907ad773304bd8ea5e93 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 17 Sep 2023 16:26:01 +0100 Subject: Add untyped tuple target --- .../java/org/shedlang/compiler/ast/untyped/UntypedTargetNode.java | 3 +++ .../java/org/shedlang/compiler/typechecker/DeclaredVariables.java | 7 +++++++ src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java | 4 ++++ 3 files changed, 14 insertions(+) (limited to 'src/main/java') 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 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(), -- cgit v1.2.3