summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedImportNode.java18
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java7
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedImportNodeMatcher.java4
3 files changed, 21 insertions, 8 deletions
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
}