From dd67005904ab8f93bacd595290159b20d10f75a5 Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Tue, 7 Jan 2025 16:38:11 -0800 Subject: Promote outside of constructors Var picks up a Real(tm) isFRef flag. Minor progress bug. --- .../src/main/java/com/seaofnodes/simple/Parser.java | 7 ++++--- .../src/main/java/com/seaofnodes/simple/Var.java | 18 +++++++++++------- .../java/com/seaofnodes/simple/node/NewNode.java | 4 ++-- .../java/com/seaofnodes/simple/node/ScopeNode.java | 2 +- .../java/com/seaofnodes/simple/node/StoreNode.java | 4 ++-- .../java/com/seaofnodes/simple/Chapter18Test.java | 20 ++++++++++++++++++++ 6 files changed, 40 insertions(+), 15 deletions(-) (limited to 'chapter18/src') diff --git a/chapter18/src/main/java/com/seaofnodes/simple/Parser.java b/chapter18/src/main/java/com/seaofnodes/simple/Parser.java index d888f17e..3f4484f5 100644 --- a/chapter18/src/main/java/com/seaofnodes/simple/Parser.java +++ b/chapter18/src/main/java/com/seaofnodes/simple/Parser.java @@ -765,13 +765,14 @@ public class Parser { int lexlen = _scope._lexSize.last(); int varlen = _scope._vars._len; StructNode s = new StructNode(); - Field[] fs = new Field[varlen-lexlen]; + Ary fs = new Ary<>(Field.class); for( int i=lexlen; i x(); return 0; }; // Do not let fref x be a field +}; +val x = { -> return 1; }; +S? s = null; +for(;;) { + if (s) return s.x; +} +"""); + try { code.parse().opto().typeCheck(); fail(); } + catch( Exception e ) { assertEquals("Accessing unknown field 'x' from '*S'",e.getMessage()); } + } + + + // Mutual recursion. Fails without SCCP to lift the recursive return types. @Ignore @Test public void testFcnMutRec() { -- cgit v1.2.3