aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-12-20 10:36:49 +0000
committerMichael Williamson <mike@zwobble.org>2024-12-20 10:36:57 +0000
commitabfae536a732ba3a7299aaf3811de701ed73799b (patch)
treef5b10b3c8a9b43998f75b8046dfcc56c16342449 /src/test/java
parentfd8ec8d57f27a669e657d80c4534dd09dc922b4f (diff)
Store member kind in type member access nodes
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/ast/typed/Typed.java22
-rw-r--r--src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java2
-rw-r--r--src/test/java/org/shedlang/compiler/shid/ShidCodeGenMemberAccessTests.java8
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerMemberAccessTests.java8
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)