aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/ast/untyped/UntypedStructDefinitionNode.java7
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java12
2 files changed, 18 insertions, 1 deletions
diff --git a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedStructDefinitionNode.java b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedStructDefinitionNode.java
index 210c29ee..706265ba 100644
--- a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedStructDefinitionNode.java
+++ b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedStructDefinitionNode.java
@@ -34,5 +34,12 @@ public record UntypedStructDefinitionNode(
this.fields
);
}
+
+ public Builder addField(UntypedStructFieldDefinitionNode field) {
+ return new Builder(
+ this.name,
+ this.fields.plus(field)
+ );
+ }
}
}
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
index 5af83d5f..1681ac25 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
@@ -787,9 +787,19 @@ public class TypeChecker {
return new TypeCheckSteps<TypedStructDefinitionNode>() {
@Override
public TypeCheckerResult<TypedStructDefinitionNode> define(TypeCheckerContext context) {
+ var fieldsResult = context.mapWithContext(untyped.fields(), (untypedField, fieldContext) -> {
+ return fieldContext.toResult(new TypedStructFieldDefinitionNode(
+ untypedField.name(),
+ typeCheckTypeLevelExpression(TypeSets.META_TYPE, untypedField.type(), fieldContext),
+ untypedField.source()
+ ));
+ });
+ var fields = fieldsResult.value();
+ context = fieldsResult.context();
+
return context.toResult(new TypedStructDefinitionNode(
untyped.name(),
- List.of(),
+ fields,
untyped.source()
));
}