diff options
| author | Michael Williamson <mike@zwobble.org> | 2024-12-20 10:36:49 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2024-12-20 10:36:57 +0000 |
| commit | abfae536a732ba3a7299aaf3811de701ed73799b (patch) | |
| tree | f5b10b3c8a9b43998f75b8046dfcc56c16342449 /src/test/java | |
| parent | fd8ec8d57f27a669e657d80c4534dd09dc922b4f (diff) | |
Store member kind in type member access nodes
Diffstat (limited to 'src/test/java')
4 files changed, 27 insertions, 13 deletions
diff --git a/src/test/java/org/shedlang/compiler/ast/typed/Typed.java b/src/test/java/org/shedlang/compiler/ast/typed/Typed.java index f391a316..c04510a4 100644 --- a/src/test/java/org/shedlang/compiler/ast/typed/Typed.java +++ b/src/test/java/org/shedlang/compiler/ast/typed/Typed.java @@ -78,6 +78,20 @@ public class Typed { return new TypedExpressionStatementNode(expression, Sources.NULL); } + public static TypedMemberAccessNode fieldAccess( + TypedExpressionNode receiver, + String memberName, + Type type + ) { + return new TypedMemberAccessNode( + receiver, + memberName, + MemberKind.FIELD, + type, + Sources.NULL + ); + } + public static TypedFunctionReturnNode functionReturn(TypedExpressionNode expression) { return new TypedFunctionReturnNode(expression, Sources.NULL); } @@ -151,14 +165,6 @@ public class Typed { ); } - public static TypedMemberAccessNode memberAccess( - TypedExpressionNode receiver, - String memberName, - Type type - ) { - return new TypedMemberAccessNode(receiver, memberName, type, Sources.NULL); - } - public static TypedNamedArgNode namedArg(String name, TypedExpressionNode expression) { return new TypedNamedArgNode(name, expression, Sources.NULL); } diff --git a/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java b/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java index 3c67685b..2002577f 100644 --- a/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java +++ b/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java @@ -128,12 +128,14 @@ public class TypedNodeMatchers { public static Matcher<TypedExpressionNode> isTypedMemberAccessNode( Matcher<TypedExpressionNode> receiver, String memberName, + MemberKind memberKind, Type type ) { return instanceOf( TypedMemberAccessNode.class, has("receiver", x -> x.receiver(), receiver), has("memberName", x -> x.memberName(), equalTo(memberName)), + has("memberKind", x -> x.memberKind(), equalTo(memberKind)), has("type", x -> x.type(), equalTo(type)) ); } diff --git a/src/test/java/org/shedlang/compiler/shid/ShidCodeGenMemberAccessTests.java b/src/test/java/org/shedlang/compiler/shid/ShidCodeGenMemberAccessTests.java index 9c82692d..74295e01 100644 --- a/src/test/java/org/shedlang/compiler/shid/ShidCodeGenMemberAccessTests.java +++ b/src/test/java/org/shedlang/compiler/shid/ShidCodeGenMemberAccessTests.java @@ -20,7 +20,7 @@ public class ShidCodeGenMemberAccessTests { @Test public void namespaceFieldAccessIsCompiledToFieldLoad() { var namespaceType = Types.namespace(NamespaceName.of("Example", "Project")); - var node = Typed.memberAccess( + var node = Typed.fieldAccess( Typed.reference("Project", namespaceType), "name", Types.STRING @@ -42,7 +42,7 @@ public class ShidCodeGenMemberAccessTests { @Test public void structFieldAccessIsCompiledToFieldLoad() { var structType = Types.struct(NamespaceName.of("Example", "Project"), "User"); - var node = Typed.memberAccess( + var node = Typed.fieldAccess( Typed.reference("user", structType), "name", Types.STRING @@ -69,7 +69,7 @@ public class ShidCodeGenMemberAccessTests { typeConstructor, List.of(Types.STRING) ); - var node = Typed.memberAccess( + var node = Typed.fieldAccess( Typed.reference("box", constructedType), "value", Types.STRING @@ -88,7 +88,7 @@ public class ShidCodeGenMemberAccessTests { @Test public void userDefinedEffectFieldAccessIsCompiledToFieldLoad() { var effect = Effects.userDefined(NamespaceName.of("Example", "Project"), "State"); - var node = Typed.memberAccess( + var node = Typed.fieldAccess( Typed.reference("State", Types.effectType(effect)), "read", Types.STRING diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerMemberAccessTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerMemberAccessTests.java index 921358f5..4e0d31fc 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerMemberAccessTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerMemberAccessTests.java @@ -39,13 +39,14 @@ public class TypeCheckerMemberAccessTests { isTypedMemberAccessNode( isTypedReferenceNode("user", structType), "name", + MemberKind.FIELD, Types.STRING ) ); } @Test - public void canAccessMemberOnStructType() { + public void canAccessMethodOnStructType() { var untyped = Untyped.memberAccess( Untyped.reference("user"), "name" @@ -68,6 +69,7 @@ public class TypeCheckerMemberAccessTests { isTypedMemberAccessNode( isTypedReferenceNode("user", structType), "name", + MemberKind.METHOD, methodType ) ); @@ -102,6 +104,7 @@ public class TypeCheckerMemberAccessTests { isTypedMemberAccessNode( isTypedReferenceNode("x", constructedType), "size", + MemberKind.FIELD, Types.INT ) ); @@ -140,6 +143,7 @@ public class TypeCheckerMemberAccessTests { isTypedMemberAccessNode( isTypedReferenceNode("x", constructedType), "value", + MemberKind.FIELD, Types.STRING ) ); @@ -168,6 +172,7 @@ public class TypeCheckerMemberAccessTests { isTypedMemberAccessNode( isTypedReferenceNode("Example", namespaceType), "name", + MemberKind.FIELD, Types.STRING ) ); @@ -203,6 +208,7 @@ public class TypeCheckerMemberAccessTests { isTypedMemberAccessNode( isTypedReferenceNode("Effect", Types.effectType(effect)), "mark", + MemberKind.FIELD, FunctionType.builder() .addPositionalParam(Types.BOOL) .addNamedParam("x", Types.INT) |
