From 97daf07ea93e36b5be1db2a270dcdd5d8e25cec7 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 28 Sep 2023 11:13:04 +0100 Subject: Add typed field access node --- .../org/shedlang/compiler/ast/typed/TypedExpressionNode.java | 2 +- .../shedlang/compiler/ast/typed/TypedFieldAccessNode.java | 12 ++++++++++++ .../java/org/shedlang/compiler/stackir/StackCompiler.java | 6 ++++++ 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/shedlang/compiler/ast/typed/TypedFieldAccessNode.java (limited to 'src/main/java/org') diff --git a/src/main/java/org/shedlang/compiler/ast/typed/TypedExpressionNode.java b/src/main/java/org/shedlang/compiler/ast/typed/TypedExpressionNode.java index 8d0d323e..93758ccf 100644 --- a/src/main/java/org/shedlang/compiler/ast/typed/TypedExpressionNode.java +++ b/src/main/java/org/shedlang/compiler/ast/typed/TypedExpressionNode.java @@ -4,6 +4,6 @@ import org.shedlang.compiler.types.Type; public sealed interface TypedExpressionNode extends TypedNode - permits TypedBinaryOperationNode, TypedBoolLiteralNode, TypedCallNode, TypedIfNode, TypedIntLiteralNode, TypedReferenceNode, TypedStringLiteralNode, TypedTupleNode { + permits TypedBinaryOperationNode, TypedBoolLiteralNode, TypedCallNode, TypedFieldAccessNode, TypedIfNode, TypedIntLiteralNode, TypedReferenceNode, TypedStringLiteralNode, TypedTupleNode { Type type(); } diff --git a/src/main/java/org/shedlang/compiler/ast/typed/TypedFieldAccessNode.java b/src/main/java/org/shedlang/compiler/ast/typed/TypedFieldAccessNode.java new file mode 100644 index 00000000..ca088e48 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/ast/typed/TypedFieldAccessNode.java @@ -0,0 +1,12 @@ +package org.shedlang.compiler.ast.typed; + +import org.shedlang.compiler.sources.Source; +import org.shedlang.compiler.types.Type; + +public record TypedFieldAccessNode( + TypedExpressionNode receiver, + String fieldName, + Type type, + Source source +) implements TypedExpressionNode { +} diff --git a/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java b/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java index 07180669..35d6f497 100644 --- a/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java +++ b/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java @@ -121,6 +121,9 @@ public class StackCompiler { case TypedCallNode typedCallNode -> compileCall(typedCallNode, context); + case TypedFieldAccessNode typedFieldAccessNode -> + throw new UnsupportedOperationException("TODO"); + case TypedIfNode typedIfNode -> compileIf(typedIfNode, context); @@ -340,6 +343,9 @@ public class StackCompiler { case TypedFunctionDefinitionNode functionDefinition -> compileFunctionDefinition(functionDefinition, context); + + case TypedStructDefinitionNode structDefinition -> + throw new UnsupportedOperationException("TODO"); }; } -- cgit v1.2.3