From a1d3da9e2c2e0526a2d004cda035e761626b2f85 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 6 Nov 2026 15:16:20 +0000 Subject: Tokenize == --- .../java/org/zwobble/hobgoblin/compiler/parser/TokenType.java | 1 + .../java/org/zwobble/hobgoblin/compiler/parser/Tokenizer.java | 4 ++++ .../org/zwobble/hobgoblin/compiler/parser/TokenizerTests.java | 11 +++++++++++ 3 files changed, 16 insertions(+) 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 e38f3c7..12626cc 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/parser/TokenType.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/parser/TokenType.java @@ -21,6 +21,7 @@ enum TokenType { SYMBOL_DOLLAR, SYMBOL_DOT, SYMBOL_DOT_DOT, + SYMBOL_EQUALS_EQUALS, SYMBOL_FAT_ARROW, SYMBOL_FORWARD_SLASH, SYMBOL_PAREN_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 0b88b5c..63973a6 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/parser/Tokenizer.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/parser/Tokenizer.java @@ -156,6 +156,10 @@ class Tokenizer { tokenType = TokenType.SYMBOL_FAT_ARROW; iterator.skip(); iterator.skip(); + } else if ("==".contentEquals(iterator.peekSequence(2))) { + tokenType = TokenType.SYMBOL_EQUALS_EQUALS; + iterator.skip(); + iterator.skip(); } else { switch (iterator.peek()) { case '{': 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 86fb1f9..1e7025d 100644 --- a/src/test/java/org/zwobble/hobgoblin/compiler/parser/TokenizerTests.java +++ b/src/test/java/org/zwobble/hobgoblin/compiler/parser/TokenizerTests.java @@ -194,6 +194,17 @@ public class TokenizerTests { )); } + @Test + public void symbolEqualsEqualsIsTokenized() { + var sourceText = SourceText.fromString("", "=="); + + var tokens = Tokenizer.tokenize(sourceText); + + assertThat(tokens.tokens(), isSequence( + equalTo(new Token(TokenType.SYMBOL_EQUALS_EQUALS, sourceRange(sourceText, 0, 2))) + )); + } + @Test public void symbolFatArrowIsTokenized() { var sourceText = SourceText.fromString("", "=>"); -- cgit v1.2.3