From 29db69cb40c2fda992a704a50e9159a1a3e23ac9 Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Wed, 4 Sep 2024 08:14:23 -0700 Subject: Backport empty statement fix Split Ch13 tests from Chapter12Test.java Handle forward refs never defined. --- chapter14/src/main/java/com/seaofnodes/simple/Parser.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'chapter14/src/main') diff --git a/chapter14/src/main/java/com/seaofnodes/simple/Parser.java b/chapter14/src/main/java/com/seaofnodes/simple/Parser.java index 5720ff8b..b249b0a4 100644 --- a/chapter14/src/main/java/com/seaofnodes/simple/Parser.java +++ b/chapter14/src/main/java/com/seaofnodes/simple/Parser.java @@ -181,6 +181,7 @@ public class Parser { else if (matchx("continue")) return parseContinue(); else if (matchx("struct") ) return parseStruct(); else if (matchx("#showGraph")) return require(showGraph(),";"); + else if (matchx(";") ) return null; // Empty statement // declarations of vars with struct type are handled in parseExpressionStatement due // to ambiguity else return parseExpressionStatement(); @@ -637,7 +638,8 @@ public class Parser { if( matchx("new") ) { String structName = requireId(); Type t = TYPES.get(structName); - if( t == null || !(t instanceof TypeStruct obj) ) throw errorSyntax("Unknown struct type '" + structName + "'"); + if( !(t instanceof TypeStruct obj) || obj._fields==null ) + throw error("Unknown struct type '" + structName + "'"); return newStruct(obj); } String name = _lexer.matchId(); -- cgit v1.2.3