From f2ab791334abe75807c4bff32b17fa379b466193 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 13 Jun 2023 20:35:55 +0100 Subject: Put namespace name onto namespace nodes --- .../java/org/shedlang/compiler/ast/typed/Typed.java | 10 +++++++++- .../org/shedlang/compiler/ast/untyped/Untyped.java | 3 ++- .../compiler/parser/ParserNamespaceTests.java | 11 ++++++++--- .../stackir/StackCompilerNamespaceTests.java | 21 ++++++++++++--------- 4 files changed, 31 insertions(+), 14 deletions(-) (limited to 'src/test/java') 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 3b12bac6..a36c9679 100644 --- a/src/test/java/org/shedlang/compiler/ast/typed/Typed.java +++ b/src/test/java/org/shedlang/compiler/ast/typed/Typed.java @@ -1,6 +1,7 @@ package org.shedlang.compiler.ast.typed; import org.shedlang.compiler.sources.Sources; +import org.shedlang.compiler.types.NamespaceName; import org.shedlang.compiler.types.Type; import org.shedlang.compiler.types.TypeLevelValue; import org.shedlang.compiler.types.Types; @@ -43,7 +44,14 @@ public class Typed { } public static TypedNamespaceNode namespace(List body) { - return new TypedNamespaceNode(body, Sources.NULL); + return namespace(NamespaceName.of("DefaultNamespaceName"), body); + } + + public static TypedNamespaceNode namespace( + NamespaceName namespaceName, + List body + ) { + return new TypedNamespaceNode(namespaceName, body, Sources.NULL); } public static TypedStringLiteralNode stringLiteral(String value) { diff --git a/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java b/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java index 0107348d..1f2f5c95 100644 --- a/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java +++ b/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java @@ -1,6 +1,7 @@ package org.shedlang.compiler.ast.untyped; import org.shedlang.compiler.sources.Sources; +import org.shedlang.compiler.types.NamespaceName; import java.math.BigInteger; import java.util.List; @@ -50,7 +51,7 @@ public class Untyped { } public static UntypedNamespaceNode namespace(List body) { - return new UntypedNamespaceNode(body, Sources.NULL); + return new UntypedNamespaceNode(NamespaceName.of("Example"), body, Sources.NULL); } public static UntypedReferenceNode reference(String name) { diff --git a/src/test/java/org/shedlang/compiler/parser/ParserNamespaceTests.java b/src/test/java/org/shedlang/compiler/parser/ParserNamespaceTests.java index 7770575f..9c14e5b4 100644 --- a/src/test/java/org/shedlang/compiler/parser/ParserNamespaceTests.java +++ b/src/test/java/org/shedlang/compiler/parser/ParserNamespaceTests.java @@ -2,6 +2,7 @@ package org.shedlang.compiler.parser; import org.junit.jupiter.api.Test; import org.shedlang.compiler.ast.untyped.UntypedNamespaceNode; +import org.shedlang.compiler.types.NamespaceName; import static org.shedlang.compiler.ast.untyped.UntypedNodeMatchers.isUntypedFunctionDefinitionNode; import static org.shedlang.compiler.parser.ParserTesting.parseString; @@ -15,10 +16,14 @@ public class ParserNamespaceTests { var node = parseString( source, - Parser::parseNamespace + tokens -> Parser.parseNamespace(tokens, NamespaceName.of("Example", "Project")) ); - assertThat(node, instanceOf(UntypedNamespaceNode.class)); + assertThat(node, instanceOf( + UntypedNamespaceNode.class, + has("namespaceName", x -> x.namespaceName(), equalTo(NamespaceName.of("Example", "Project"))), + has("body", x -> x.body(), isSequence()) + )); } @Test @@ -33,7 +38,7 @@ public class ParserNamespaceTests { var node = parseString( source, - Parser::parseNamespace + tokens -> Parser.parseNamespace(tokens, NamespaceName.of("Example", "Project")) ); assertThat(node, instanceOf( diff --git a/src/test/java/org/shedlang/compiler/stackir/StackCompilerNamespaceTests.java b/src/test/java/org/shedlang/compiler/stackir/StackCompilerNamespaceTests.java index a3b34c55..32ff72ba 100644 --- a/src/test/java/org/shedlang/compiler/stackir/StackCompilerNamespaceTests.java +++ b/src/test/java/org/shedlang/compiler/stackir/StackCompilerNamespaceTests.java @@ -18,16 +18,19 @@ public class StackCompilerNamespaceTests { public void bodyOfNamespaceIsCompiledWithNamesBeingExported() { var namespaceName = new NamespaceName(List.of("Example")); - var node = Typed.namespace(List.of( - TypedFunctionDefinitionNode.builder() - .withName("f") - .addPositionalParam("x", Typed.typeLevelReference("String", Types.STRING)) - .addNamedParam("y", Typed.typeLevelReference("Int", Types.INT)) - .addStatement(Typed.expressionStatement(Typed.stringLiteral("hello"))) - .build() - )); + var node = Typed.namespace( + namespaceName, + List.of( + TypedFunctionDefinitionNode.builder() + .withName("f") + .addPositionalParam("x", Typed.typeLevelReference("String", Types.STRING)) + .addNamedParam("y", Typed.typeLevelReference("Int", Types.INT)) + .addStatement(Typed.expressionStatement(Typed.stringLiteral("hello"))) + .build() + ) + ); - var instructions = StackCompiler.compileNamespace(node, namespaceName); + var instructions = StackCompiler.compileNamespace(node); assertThat(instructions, isSequence( instanceOf( -- cgit v1.2.3