From f66ab11456244b12c48ee9231cec5c8b54b47efe Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Mon, 10 Aug 2026 11:11:18 -0700 Subject: Chapter 29: Tech Debt Cleanup Co-authored-by: Hsiang-Ying Fu <66062782+fuhsnn@users.noreply.github.com> Co-authored-by: fuhsnn <66062782+fuhsnn@users.noreply.github.com> Co-authored-by: Symious <14933944+symious@users.noreply.github.com> Co-authored-by: Jun Kawasaki Co-authored-by: Claude Opus 5 --- .../java/com/seaofnodes/simple/BoundaryTest.java | 1 + .../java/com/seaofnodes/simple/Chapter10Test.java | 1 + .../java/com/seaofnodes/simple/Chapter17bTest.java | 1 + .../java/com/seaofnodes/simple/Chapter18Test.java | 2 ++ .../java/com/seaofnodes/simple/Chapter22Test.java | 1 + .../simple/ClassInitDependenciesTest.java | 1 + .../seaofnodes/simple/CompoundAssignmentTest.java | 1 + src/test/java/com/seaofnodes/simple/Eval2.java | 1 + .../seaofnodes/simple/FinalConstructionTest.java | 1 + .../java/com/seaofnodes/simple/ParserTest.java | 33 ++++++++++++++++++++++ .../seaofnodes/simple/SelectiveLoadingTest.java | 1 + .../java/com/seaofnodes/simple/fuzzer/Fuzzer.java | 2 +- .../com/seaofnodes/simple/fuzzer/FuzzerUtils.java | 2 +- .../seaofnodes/simple/fuzzer/ScriptGenerator.java | 4 +-- 14 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 src/test/java/com/seaofnodes/simple/ParserTest.java (limited to 'src/test') diff --git a/src/test/java/com/seaofnodes/simple/BoundaryTest.java b/src/test/java/com/seaofnodes/simple/BoundaryTest.java index e196b93f..de502371 100644 --- a/src/test/java/com/seaofnodes/simple/BoundaryTest.java +++ b/src/test/java/com/seaofnodes/simple/BoundaryTest.java @@ -1,5 +1,6 @@ package com.seaofnodes.simple; +import com.seaofnodes.simple.parser.Parser; import com.seaofnodes.simple.codegen.CodeGen; import com.seaofnodes.simple.node.*; import com.seaofnodes.simple.type.*; diff --git a/src/test/java/com/seaofnodes/simple/Chapter10Test.java b/src/test/java/com/seaofnodes/simple/Chapter10Test.java index 6892db0c..2c9a69a7 100644 --- a/src/test/java/com/seaofnodes/simple/Chapter10Test.java +++ b/src/test/java/com/seaofnodes/simple/Chapter10Test.java @@ -1,5 +1,6 @@ package com.seaofnodes.simple; +import com.seaofnodes.simple.parser.Parser; import com.seaofnodes.simple.codegen.CodeGen; import org.junit.Test; import static org.junit.Assert.assertEquals; diff --git a/src/test/java/com/seaofnodes/simple/Chapter17bTest.java b/src/test/java/com/seaofnodes/simple/Chapter17bTest.java index 4019fd38..1e99bcd9 100644 --- a/src/test/java/com/seaofnodes/simple/Chapter17bTest.java +++ b/src/test/java/com/seaofnodes/simple/Chapter17bTest.java @@ -1,5 +1,6 @@ package com.seaofnodes.simple; +import com.seaofnodes.simple.parser.Parser; import com.seaofnodes.simple.codegen.CodeGen; import org.junit.Ignore; import org.junit.Test; diff --git a/src/test/java/com/seaofnodes/simple/Chapter18Test.java b/src/test/java/com/seaofnodes/simple/Chapter18Test.java index 632b9539..e5813eae 100644 --- a/src/test/java/com/seaofnodes/simple/Chapter18Test.java +++ b/src/test/java/com/seaofnodes/simple/Chapter18Test.java @@ -1,4 +1,6 @@ package com.seaofnodes.simple; +import com.seaofnodes.simple.parser.Var; +import com.seaofnodes.simple.parser.Parser; import com.seaofnodes.simple.type.*; import com.seaofnodes.simple.node.*; diff --git a/src/test/java/com/seaofnodes/simple/Chapter22Test.java b/src/test/java/com/seaofnodes/simple/Chapter22Test.java index 00d77f65..e9a668a7 100644 --- a/src/test/java/com/seaofnodes/simple/Chapter22Test.java +++ b/src/test/java/com/seaofnodes/simple/Chapter22Test.java @@ -1,5 +1,6 @@ package com.seaofnodes.simple; +import com.seaofnodes.simple.parser.Parser; import com.seaofnodes.isa.eval.EvalRisc5; import com.seaofnodes.isa.eval.EvalArm64; diff --git a/src/test/java/com/seaofnodes/simple/ClassInitDependenciesTest.java b/src/test/java/com/seaofnodes/simple/ClassInitDependenciesTest.java index 38b4d8a2..88ebb6b7 100644 --- a/src/test/java/com/seaofnodes/simple/ClassInitDependenciesTest.java +++ b/src/test/java/com/seaofnodes/simple/ClassInitDependenciesTest.java @@ -1,5 +1,6 @@ package com.seaofnodes.simple; +import com.seaofnodes.simple.parser.Parser; import com.seaofnodes.simple.codegen.*; import com.seaofnodes.simple.node.*; import com.seaofnodes.simple.type.Type; diff --git a/src/test/java/com/seaofnodes/simple/CompoundAssignmentTest.java b/src/test/java/com/seaofnodes/simple/CompoundAssignmentTest.java index e2d822d0..285d4293 100644 --- a/src/test/java/com/seaofnodes/simple/CompoundAssignmentTest.java +++ b/src/test/java/com/seaofnodes/simple/CompoundAssignmentTest.java @@ -1,5 +1,6 @@ package com.seaofnodes.simple; +import com.seaofnodes.simple.parser.Parser; import com.seaofnodes.simple.codegen.CodeGen; import org.junit.Test; import static org.junit.Assert.*; diff --git a/src/test/java/com/seaofnodes/simple/Eval2.java b/src/test/java/com/seaofnodes/simple/Eval2.java index eea5b023..6e5331b2 100644 --- a/src/test/java/com/seaofnodes/simple/Eval2.java +++ b/src/test/java/com/seaofnodes/simple/Eval2.java @@ -1,5 +1,6 @@ package com.seaofnodes.simple; +import com.seaofnodes.simple.parser.Parser; import com.seaofnodes.simple.codegen.*; import com.seaofnodes.simple.node.*; import com.seaofnodes.simple.print.IRPrinter; diff --git a/src/test/java/com/seaofnodes/simple/FinalConstructionTest.java b/src/test/java/com/seaofnodes/simple/FinalConstructionTest.java index f583e2d2..38b94693 100644 --- a/src/test/java/com/seaofnodes/simple/FinalConstructionTest.java +++ b/src/test/java/com/seaofnodes/simple/FinalConstructionTest.java @@ -1,5 +1,6 @@ package com.seaofnodes.simple; +import com.seaofnodes.simple.parser.Parser; import com.seaofnodes.simple.codegen.CodeGen; import com.seaofnodes.simple.node.StoreNode; import org.junit.Test; diff --git a/src/test/java/com/seaofnodes/simple/ParserTest.java b/src/test/java/com/seaofnodes/simple/ParserTest.java new file mode 100644 index 00000000..364979f2 --- /dev/null +++ b/src/test/java/com/seaofnodes/simple/ParserTest.java @@ -0,0 +1,33 @@ +package com.seaofnodes.simple; + +import com.seaofnodes.simple.codegen.CodeGen; +import com.seaofnodes.simple.parser.Parser; +import org.junit.Test; +import static org.junit.Assert.*; + +public class ParserTest { + @Test public void testDeferredFragments() { + // The for update is scanned before the body, then parsed after it. + // Delimiters in strings, characters and comments must not end the scan. + String[] updates = {"n=n+\") (\"#", "n=n+')'", "n=n+/* ) */2", "n=n+{ -> 2; }()"}; + String[] results = {"6", "82", "4", "4"}; + for( int i = 0; i x=\"}\"#; }; }; return new Box().x;") + .driver(CodeGen.Phase.TypeCheck); + assertEquals("1",Eval2.eval(code,0)); + } + + @Test public void testUnclosedDeferredFragment() { + try { + new CodeGen("for(int i=0; i<2; i++").driver(CodeGen.Phase.TypeCheck); + fail("Accepted an unterminated for update"); + } catch( Parser.ParseException e ) { + assertEquals("Unclosed for update",e.getMessage()); + } + } +} diff --git a/src/test/java/com/seaofnodes/simple/SelectiveLoadingTest.java b/src/test/java/com/seaofnodes/simple/SelectiveLoadingTest.java index fa14fc2c..88c11101 100644 --- a/src/test/java/com/seaofnodes/simple/SelectiveLoadingTest.java +++ b/src/test/java/com/seaofnodes/simple/SelectiveLoadingTest.java @@ -1,5 +1,6 @@ package com.seaofnodes.simple; +import com.seaofnodes.simple.parser.Parser; import com.seaofnodes.simple.codegen.*; import com.seaofnodes.simple.node.*; import com.seaofnodes.simple.type.TypeInteger; diff --git a/src/test/java/com/seaofnodes/simple/fuzzer/Fuzzer.java b/src/test/java/com/seaofnodes/simple/fuzzer/Fuzzer.java index 55c2c040..73ba6afd 100644 --- a/src/test/java/com/seaofnodes/simple/fuzzer/Fuzzer.java +++ b/src/test/java/com/seaofnodes/simple/fuzzer/Fuzzer.java @@ -1,6 +1,6 @@ package com.seaofnodes.simple.fuzzer; -import com.seaofnodes.simple.Parser; +import com.seaofnodes.simple.parser.Parser; import com.seaofnodes.simple.Eval2; import com.seaofnodes.simple.codegen.CodeGen; import com.seaofnodes.simple.node.Node; diff --git a/src/test/java/com/seaofnodes/simple/fuzzer/FuzzerUtils.java b/src/test/java/com/seaofnodes/simple/fuzzer/FuzzerUtils.java index 9fe2e405..c38c423d 100644 --- a/src/test/java/com/seaofnodes/simple/fuzzer/FuzzerUtils.java +++ b/src/test/java/com/seaofnodes/simple/fuzzer/FuzzerUtils.java @@ -1,6 +1,6 @@ package com.seaofnodes.simple.fuzzer; -import com.seaofnodes.simple.IterPeeps; +import com.seaofnodes.simple.codegen.IterPeeps; import com.seaofnodes.simple.codegen.CodeGen; import com.seaofnodes.simple.node.Node; import com.seaofnodes.simple.node.StopNode; diff --git a/src/test/java/com/seaofnodes/simple/fuzzer/ScriptGenerator.java b/src/test/java/com/seaofnodes/simple/fuzzer/ScriptGenerator.java index c5e94047..78fb8e44 100644 --- a/src/test/java/com/seaofnodes/simple/fuzzer/ScriptGenerator.java +++ b/src/test/java/com/seaofnodes/simple/fuzzer/ScriptGenerator.java @@ -1,6 +1,6 @@ package com.seaofnodes.simple.fuzzer; -import com.seaofnodes.simple.Parser; +import com.seaofnodes.simple.parser.Parser; import com.seaofnodes.simple.node.ScopeNode; import com.seaofnodes.simple.type.TypeInteger; import java.util.ArrayList; @@ -8,7 +8,7 @@ import java.util.HashSet; import java.util.List; import java.util.Random; import java.util.function.Predicate; -import static com.seaofnodes.simple.Parser.KEYWORDS; +import static com.seaofnodes.simple.parser.Parser.KEYWORDS; /** -- cgit v1.2.3