summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-04-23 11:27:29 +0100
committerMichael Williamson <mike@zwobble.org>2026-04-23 11:27:29 +0100
commit9c84e3365661387be283ca528cea1650ea46ae1f (patch)
tree908ab319487e821f1e5c23c0d40b4986d2d30c8b /src
parent9097b3ac138a60f6e7c708d2b452f95eb75601cb (diff)
Tokenize field keyword
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/parser/TokenType.java1
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/parser/Tokenizer.java4
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/parser/TokenizerTests.java14
3 files changed, 15 insertions, 4 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/parser/TokenType.java b/src/main/java/org/zwobble/hobgoblin/compiler/parser/TokenType.java
index 72b1e88..64be2d4 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/parser/TokenType.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/parser/TokenType.java
@@ -5,6 +5,7 @@ enum TokenType {
IDENTIFIER,
WHITESPACE,
+ KEYWORD_FIELD,
KEYWORD_STRUCT,
SYMBOL_BRACE_OPEN,
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/parser/Tokenizer.java b/src/main/java/org/zwobble/hobgoblin/compiler/parser/Tokenizer.java
index c628346..6a43a09 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/parser/Tokenizer.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/parser/Tokenizer.java
@@ -84,7 +84,9 @@ class Tokenizer {
var sourceRange = start.to(end);
TokenType tokenType;
- if (CharSequence.compare(sourceRange.charSequence(), "struct") == 0) {
+ if (CharSequence.compare(sourceRange.charSequence(), "field") == 0) {
+ tokenType = TokenType.KEYWORD_FIELD;
+ } else if (CharSequence.compare(sourceRange.charSequence(), "struct") == 0) {
tokenType = TokenType.KEYWORD_STRUCT;
} else {
tokenType = TokenType.IDENTIFIER;
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/parser/TokenizerTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/parser/TokenizerTests.java
index e564e7b..68db18d 100644
--- a/src/test/java/org/zwobble/hobgoblin/compiler/parser/TokenizerTests.java
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/parser/TokenizerTests.java
@@ -1,9 +1,6 @@
package org.zwobble.hobgoblin.compiler.parser;
import org.junit.jupiter.api.Test;
-import org.zwobble.hobgoblin.compiler.parser.Token;
-import org.zwobble.hobgoblin.compiler.parser.TokenType;
-import org.zwobble.hobgoblin.compiler.parser.Tokenizer;
import org.zwobble.sourcetext.SourceRange;
import org.zwobble.sourcetext.SourceText;
@@ -22,6 +19,17 @@ public class TokenizerTests {
}
@Test
+ public void keywordFieldIsTokenized() {
+ var sourceText = SourceText.fromString("<string>", "field");
+
+ var tokens = Tokenizer.tokenize(sourceText);
+
+ assertThat(tokens.tokens(), isSequence(
+ equalTo(new Token(TokenType.KEYWORD_FIELD, sourceRange(sourceText, 0, 5)))
+ ));
+ }
+
+ @Test
public void keywordStructIsTokenized() {
var sourceText = SourceText.fromString("<string>", "struct");