From a1a38173d5417da1728eed75e72d6e8f34b36654 Mon Sep 17 00:00:00 2001
From: dgelessus <dgelessus@users.noreply.github.com>
Date: Fri, 21 Jul 2023 13:28:44 +0200
Subject: [PATCH] Combine two halves of New and list term code generation

---
 .../GenerateAlternativeCodeForParser.java     | 63 ++++++-------------
 1 file changed, 19 insertions(+), 44 deletions(-)

diff --git a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
index 190c343..eb6de91 100644
--- a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
+++ b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
@@ -181,23 +181,6 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
     }
   }
 
-  private void generateNewTermDeclarations(List<PTerm> params)
-  {
-    try
-    {
-      macros.apply(file, "ParserBraceOpening");
-      for(PTerm term : params)
-      {
-        generateVariableDeclaration(term);
-      }
-    }
-    catch(IOException e)
-    {
-      throw new RuntimeException("An error occured while writing to " +
-                                 new File(pkgDir, "Parser.java").getAbsolutePath(), e);
-    }
-  }
-
   private void generateSimpleTerm(Node node, TId id, TId simpleTermTail)
   {
     try
@@ -267,19 +250,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
   }
 
   @Override
-  public void inANewTerm(ANewTerm node)
-  {
-    generateNewTermDeclarations(node.getParams());
-  }
-
-  @Override
-  public void inANewListTerm(ANewListTerm node)
-  {
-    generateNewTermDeclarations(node.getParams());
-  }
-
-  @Override
-  public void inAListTerm(AListTerm node)
+  public void caseAListTerm(AListTerm node)
   {
     try
     {
@@ -288,19 +259,12 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
       {
         generateVariableDeclaration(term);
       }
-    }
-    catch(IOException e)
-    {
-      throw new RuntimeException("An error occured while writing to " +
-                                 new File(pkgDir, "Parser.java").getAbsolutePath(), e);
-    }
-  }
 
-  @Override
-  public void outAListTerm(AListTerm node)
-  {
-    try
-    {
+      for(PListTerm listTerm : node.getListTerms())
+      {
+        listTerm.apply(this);
+      }
+
       for(PListTerm listTerm : node.getListTerms())
       {
         String type_name = lookupInternalTypeName(listTerm);
@@ -332,6 +296,17 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
 
     try
     {
+      macros.apply(file, "ParserBraceOpening");
+      for(PTerm term : params)
+      {
+        generateVariableDeclaration(term);
+      }
+      
+      for(PTerm param : params)
+      {
+        param.apply(this);
+      }
+
       macros.apply(file, "ParserNewBodyNew", new String[] {getVariableName(node), newAltName});
 
       if(!params.isEmpty())
@@ -356,13 +331,13 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
   }
 
   @Override
-  public void outANewTerm(ANewTerm node)
+  public void caseANewTerm(ANewTerm node)
   {
     generateNewTerm(node, (AProdName)node.getProdName(), node.getParams());
   }
 
   @Override
-  public void outANewListTerm(ANewListTerm node)
+  public void caseANewListTerm(ANewListTerm node)
   {
     generateNewTerm(node, (AProdName)node.getProdName(), node.getParams());
   }
-- 
GitLab