diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-06-19 17:19:38 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-06-19 17:19:38 +0100 |
| commit | 470aefa3f110ac987c4a8c4e77977db8dfc2ea3d (patch) | |
| tree | bd826d072abeab539ec2f686941a09d80329a63b | |
| parent | 141e8568755d0e82a3a23f7791469031a6d017fa (diff) | |
Add source to UntypedImportNode
4 files changed, 22 insertions, 8 deletions
diff --git a/hobgoblin/src/ast/untyped.hob b/hobgoblin/src/ast/untyped.hob index 98292a6..3a2b12e 100644 --- a/hobgoblin/src/ast/untyped.hob +++ b/hobgoblin/src/ast/untyped.hob @@ -13,6 +13,7 @@ struct UntypedImportNode { field importedNames: List[String]; field ancestorDepth: Option[Int32]; field namespaceName: NamespaceName; + field source: Source; } sum UntypedNamespaceStatementNode { diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedImportNode.java b/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedImportNode.java index 1d312df..07069dd 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedImportNode.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedImportNode.java @@ -2,26 +2,30 @@ package org.zwobble.hobgoblin.compiler.ast.untyped; -public record UntypedImportNode(java.util.List<String> importedNames, java.util.Optional<java.lang.Integer> ancestorDepth, org.zwobble.hobgoblin.compiler.types.NamespaceName namespaceName) { +public record UntypedImportNode(java.util.List<String> importedNames, java.util.Optional<java.lang.Integer> ancestorDepth, org.zwobble.hobgoblin.compiler.types.NamespaceName namespaceName, org.zwobble.hobgoblin.compiler.sources.Source source) { public static org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNode.Builder arbitrary() { - return new org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNode.Builder(java.util.List.of(), java.util.Optional.empty(), org.zwobble.hobgoblin.compiler.types.Native.arbitraryNamespaceName()); + return new org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNode.Builder(java.util.List.of(), java.util.Optional.empty(), org.zwobble.hobgoblin.compiler.types.Native.arbitraryNamespaceName(), org.zwobble.hobgoblin.compiler.sources.Native.arbitrarySource()); } - public record Builder(java.util.List<String> importedNames, java.util.Optional<java.lang.Integer> ancestorDepth, org.zwobble.hobgoblin.compiler.types.NamespaceName namespaceName) { + public record Builder(java.util.List<String> importedNames, java.util.Optional<java.lang.Integer> ancestorDepth, org.zwobble.hobgoblin.compiler.types.NamespaceName namespaceName, org.zwobble.hobgoblin.compiler.sources.Source source) { public org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNode build() { - return new org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNode(importedNames, ancestorDepth, namespaceName); + return new org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNode(importedNames, ancestorDepth, namespaceName, source); } public org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNode.Builder withImportedNames(java.util.List<String> importedNames) { - return new org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNode.Builder(importedNames, ancestorDepth, namespaceName); + return new org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNode.Builder(importedNames, ancestorDepth, namespaceName, source); } public org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNode.Builder withAncestorDepth(java.util.Optional<java.lang.Integer> ancestorDepth) { - return new org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNode.Builder(importedNames, ancestorDepth, namespaceName); + return new org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNode.Builder(importedNames, ancestorDepth, namespaceName, source); } public org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNode.Builder withNamespaceName(org.zwobble.hobgoblin.compiler.types.NamespaceName namespaceName) { - return new org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNode.Builder(importedNames, ancestorDepth, namespaceName); + return new org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNode.Builder(importedNames, ancestorDepth, namespaceName, source); + } + + public org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNode.Builder withSource(org.zwobble.hobgoblin.compiler.sources.Source source) { + return new org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNode.Builder(importedNames, ancestorDepth, namespaceName, source); } // Custom area start: org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNode.Builder body diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java b/src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java index 72bd60e..f3cb123 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java @@ -57,6 +57,8 @@ public class Parser { } private static UntypedImportNode parseImport(TokenIterator tokens) { + var start = tokens.startPosition(); + tokens.skip(TokenType.KEYWORD_IMPORT); tokens.skip(TokenType.SYMBOL_BRACE_OPEN); @@ -90,7 +92,10 @@ public class Parser { tokens.skip(TokenType.SYMBOL_SEMICOLON); - return new UntypedImportNode(importedNames, ancestorDepth, namespaceName); + var end = tokens.endPosition(); + var source = createSource(start, end); + + return new UntypedImportNode(importedNames, ancestorDepth, namespaceName, source); } static UntypedNamespaceStatementNode parseNamespaceStatement( diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedImportNodeMatcher.java b/src/test/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedImportNodeMatcher.java index e902170..33aaccc 100644 --- a/src/test/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedImportNodeMatcher.java +++ b/src/test/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedImportNodeMatcher.java @@ -37,6 +37,10 @@ public class UntypedImportNodeMatcher implements org.zwobble.precisely.Matcher<j return new org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNodeMatcher(java.util.stream.Stream.concat(this.submatchers.stream(), java.util.stream.Stream.of(org.zwobble.precisely.Matchers.has("namespaceName", org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNode::namespaceName, namespaceName))).toList()); } + public org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNodeMatcher withSource(org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.sources.Source> source) { + return new org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNodeMatcher(java.util.stream.Stream.concat(this.submatchers.stream(), java.util.stream.Stream.of(org.zwobble.precisely.Matchers.has("source", org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNode::source, source))).toList()); + } + // Custom area start: org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNodeMatcher body // Custom area end: org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNodeMatcher body } |
