diff options
| author | Michael Williamson <mike@zwobble.org> | 2024-12-22 10:01:51 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2024-12-22 10:01:51 +0000 |
| commit | 867dd179530e90ae16fe481c0abc58dc8f023f94 (patch) | |
| tree | 66ebe9e2df599bceeecb36506cdf65563c85a895 /src/test/java | |
| parent | 2dba29dfa74c32a3102a9317455e16cd9a5a35a7 (diff) | |
Add Shid instructions to store and load methods
Diffstat (limited to 'src/test/java')
5 files changed, 62 insertions, 5 deletions
diff --git a/src/test/java/org/shedlang/compiler/shid/ShidCodeGenNamespaceTests.java b/src/test/java/org/shedlang/compiler/shid/ShidCodeGenNamespaceTests.java index e760bdae..e389a34c 100644 --- a/src/test/java/org/shedlang/compiler/shid/ShidCodeGenNamespaceTests.java +++ b/src/test/java/org/shedlang/compiler/shid/ShidCodeGenNamespaceTests.java @@ -156,7 +156,7 @@ public class ShidCodeGenNamespaceTests { ), isShidLocalStore("$methods__Example_Project__User__name__0"), isShidLocalLoad("$methods__Example_Project__User__name__0"), - isShidNamespaceFieldStore(namespaceName, "$methods__Example_Project__User__name__0") + isShidMethodStore(structType, "name") ))); } } diff --git a/src/test/java/org/shedlang/compiler/shid/ShidCodeGenStructDefinitionTests.java b/src/test/java/org/shedlang/compiler/shid/ShidCodeGenStructDefinitionTests.java index 0ffea260..df6dee0e 100644 --- a/src/test/java/org/shedlang/compiler/shid/ShidCodeGenStructDefinitionTests.java +++ b/src/test/java/org/shedlang/compiler/shid/ShidCodeGenStructDefinitionTests.java @@ -82,10 +82,7 @@ public class ShidCodeGenStructDefinitionTests { ), isShidLocalStore("$methods__Example_Project__User__name__0"), isShidLocalLoad("$methods__Example_Project__User__name__0"), - isShidNamespaceFieldStore( - NamespaceName.of("Example", "Project"), - "$methods__Example_Project__User__name__0" - ) + isShidMethodStore(structType, "name") )); } } diff --git a/src/test/java/org/shedlang/compiler/shid/ShidSerializerTests.java b/src/test/java/org/shedlang/compiler/shid/ShidSerializerTests.java index e97a503a..6018fa88 100644 --- a/src/test/java/org/shedlang/compiler/shid/ShidSerializerTests.java +++ b/src/test/java/org/shedlang/compiler/shid/ShidSerializerTests.java @@ -328,6 +328,30 @@ public class ShidSerializerTests { } @Test + public void canSerializeMethodLoad() { + var instruction = Shid.methodLoad( + Types.struct(NamespaceName.of("Example", "Lib"), "User"), + "name" + ); + + var string = serialize(instruction); + + assertThat(string, equalTo("(method-load \"Example/Lib.User\" \"name\")")); + } + + @Test + public void canSerializeMethodStore() { + var instruction = Shid.methodStore( + Types.struct(NamespaceName.of("Example", "Lib"), "User"), + "name" + ); + + var string = serialize(instruction); + + assertThat(string, equalTo("(method-store \"Example/Lib.User\" \"name\")")); + } + + @Test public void canSerializeNamespaceFieldStore() { var instruction = Shid.namespaceFieldStore( new NamespaceName(List.of("Example", "Lib")), diff --git a/src/test/java/org/shedlang/compiler/shid/instructions/Shid.java b/src/test/java/org/shedlang/compiler/shid/instructions/Shid.java index ee78a3e3..70db156b 100644 --- a/src/test/java/org/shedlang/compiler/shid/instructions/Shid.java +++ b/src/test/java/org/shedlang/compiler/shid/instructions/Shid.java @@ -127,6 +127,20 @@ public class Shid { return new ShidLoopContinue(Sources.NULL); } + public static ShidInstruction methodLoad( + SimpleStructType type, + String methodName + ) { + return new ShidMethodLoad(type, methodName, Sources.NULL); + } + + public static ShidInstruction methodStore( + SimpleStructType type, + String methodName + ) { + return new ShidMethodStore(type, methodName, Sources.NULL); + } + public static ShidInstruction namespaceFieldStore(NamespaceName namespaceName, String fieldName) { return new ShidNamespaceFieldStore(namespaceName, fieldName, Sources.NULL); } diff --git a/src/test/java/org/shedlang/compiler/shid/instructions/ShidMatchers.java b/src/test/java/org/shedlang/compiler/shid/instructions/ShidMatchers.java index 43226831..8b4a212d 100644 --- a/src/test/java/org/shedlang/compiler/shid/instructions/ShidMatchers.java +++ b/src/test/java/org/shedlang/compiler/shid/instructions/ShidMatchers.java @@ -134,6 +134,28 @@ public class ShidMatchers { return instanceOf(ShidLoopContinue.class); } + public static Matcher<ShidInstruction> isShidMethodLoad( + SimpleStructType type, + String methodName + ) { + return instanceOf( + ShidMethodLoad.class, + has("type", x -> x.type(), equalTo(type)), + has("methodName", x -> x.methodName(), equalTo(methodName)) + ); + } + + public static Matcher<ShidInstruction> isShidMethodStore( + SimpleStructType type, + String methodName + ) { + return instanceOf( + ShidMethodStore.class, + has("type", x -> x.type(), equalTo(type)), + has("methodName", x -> x.methodName(), equalTo(methodName)) + ); + } + public static Matcher<ShidInstruction> isShidNamespaceFieldStore( NamespaceName namespaceName, String fieldName |
