From bd4c0c8d9fd33b35a0c4d98ca2dd641e3fafbfd3 Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Tue, 1 Oct 2024 10:36:59 -0700 Subject: Fix parsing forward ref arrays --- .../java/com/seaofnodes/simple/Chapter15Test.java | 38 +++++++++++++++++++--- .../seaofnodes/simple/fuzzer/ScriptGenerator.java | 4 +-- 2 files changed, 36 insertions(+), 6 deletions(-) (limited to 'chapter15/src/test/java') diff --git a/chapter15/src/test/java/com/seaofnodes/simple/Chapter15Test.java b/chapter15/src/test/java/com/seaofnodes/simple/Chapter15Test.java index 6ba6eed4..62e865aa 100644 --- a/chapter15/src/test/java/com/seaofnodes/simple/Chapter15Test.java +++ b/chapter15/src/test/java/com/seaofnodes/simple/Chapter15Test.java @@ -60,6 +60,36 @@ return a[0]; assertEquals(1L, Evaluator.evaluate(stop, 0)); } + @Test + public void testBasic4() { + Parser parser = new Parser( +""" +struct A { int i; } +A[] a = new A[2]; +return a; +"""); + StopNode stop = parser.parse(false).iterate(false); + assertEquals("return A[];", stop.toString()); + assertEquals("Obj {\n #=2\n []=null\n}", Evaluator.evaluate(stop, 0).toString()); + } + + @Test + public void testTree() { + Parser parser = new Parser( +""" +// Can we define a forward-reference array? +struct Tree { Tree[] _kids; } +Tree root = new Tree; +root._kids = new Tree[2]; +root._kids[0] = new Tree; +return root; +"""); + StopNode stop = parser.parse(false).iterate(false); + assertEquals("return Tree;", stop.toString()); + assertEquals("Obj {\n _kids=Obj {\n #=2\n []=Obj {\n _kids=null\n}\n}\n}", Evaluator.evaluate(stop, 0).toString()); + } + + @Test public void testRollingSum() { Parser parser = new Parser( @@ -123,9 +153,9 @@ while( j < nprimes ) { return rez; """); StopNode stop = parser.parse(false).iterate(true); - assertEquals("return []int;", stop.toString()); + assertEquals("return int[];", stop.toString()); Evaluator.Obj obj = (Evaluator.Obj)Evaluator.evaluate(stop, 20); - assertEquals("[]int {\n # :int;\n [] :int;\n}",obj.struct().toString()); + assertEquals("int[] {\n # :int;\n [] :int;\n}",obj.struct().toString()); long nprimes = (Long)obj.fields()[0]; long[] primes = new long[]{2,3,5,7,11,13,17,19}; for( int i=0; i