From 6ffadb8a454dbba4d2eee1f6f58d26ab82cddea2 Mon Sep 17 00:00:00 2001
From: dgelessus <dgelessus@users.noreply.github.com>
Date: Thu, 20 Jul 2023 20:38:49 +0200
Subject: [PATCH] Refactor generating variable declarations in alternative
 codegen

---
 .../GenerateAlternativeCodeForParser.java     | 105 +++++-------------
 1 file changed, 30 insertions(+), 75 deletions(-)

diff --git a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
index a2613bd..1c5390d 100644
--- a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
+++ b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
@@ -63,40 +63,41 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
   public void caseAElem(final AElem node) {
     popCount++;
   }
+  
+  private void generateVariableDeclaration(Node term) throws IOException {
+    String typeName;
+    if(simpleTermTransformMap.get(term) != null)
+    {
+      typeName = simpleTermTransformMap.get(term);
+    }
+    else
+    {
+      typeName = CG.getAltTransformElemTypes().get(term);
+    }
+    int position = CG.getTermNumbers().get(term);
+    
+    if(typeName.startsWith("L"))
+    {
+      macros.apply(file, "ParserListVariableDeclaration", new String[] {"" + position});
+    }
+    else if(typeName.equals("null"))
+    {
+      // No intermediate variable needed for null arguments
+    }
+    else
+    {
+      macros.apply(file, "ParserSimpleVariableDeclaration", new String[] {typeName, typeName.toLowerCase(), "" + position});
+    }
+  }
 
   @Override
   public void inAAltTransform(AAltTransform node)
   {
-    String type_name;
-    int position;
-
     for(PTerm term : node.getTerms())
     {
-      if(simpleTermTransformMap.get(term) != null)
-      {
-        type_name = simpleTermTransformMap.get(term);
-      }
-      else
-      {
-        type_name = CG.getAltTransformElemTypes().get(term);
-      }
-
-      position = CG.getTermNumbers().get(term);
-
       try
       {
-        if(type_name.startsWith("L"))
-        {
-          macros.apply(file, "ParserListVariableDeclaration", new String[] {"" + position});
-        }
-        else if(type_name.equals("null"))
-        {
-          // No intermediate variable needed for null arguments
-        }
-        else
-        {
-          macros.apply(file, "ParserSimpleVariableDeclaration", new String[] {type_name, type_name.toLowerCase(), "" + position});
-        }
+        generateVariableDeclaration(term);
       }
       catch(IOException e)
       {
@@ -157,35 +158,11 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
 
   public void inAParams(List<PTerm> list_param)
   {
-    String type_name;
-    int position;
-
     for(PTerm term : list_param)
     {
-      if(simpleTermTransformMap.get(term) != null)
-      {
-        type_name = simpleTermTransformMap.get(term);
-      }
-      else
-      {
-        type_name = CG.getAltTransformElemTypes().get(term);
-      }
-      position = CG.getTermNumbers().get(term);
-
       try
       {
-        if(type_name.startsWith("L"))
-        {
-          macros.apply(file, "ParserListVariableDeclaration", new String[] {"" + position});
-        }
-        else if(type_name.equals("null"))
-        {
-          // No intermediate variable needed for null arguments
-        }
-        else
-        {
-          macros.apply(file, "ParserSimpleVariableDeclaration", new String[] {type_name, type_name.toLowerCase(), "" + position});
-        }
+        generateVariableDeclaration(term);
       }
       catch(IOException e)
       {
@@ -380,31 +357,9 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
     try
     {
       macros.apply(file, "ParserBraceOpening");
-      for(PListTerm listTerm : node.getListTerms())
+      for(Node term : node.getListTerms())
       {
-        String type_name;
-        if(simpleTermTransformMap.get(listTerm) != null)
-        {
-          type_name = simpleTermTransformMap.get(listTerm);
-        }
-        else
-        {
-          type_name = CG.getAltTransformElemTypes().get(listTerm);
-        }
-        int position = CG.getTermNumbers().get(listTerm);
-
-        if(type_name.startsWith("L"))
-        {
-          macros.apply(file, "ParserListVariableDeclaration", new String[] {"" + position});
-        }
-        else if(type_name.equals("null"))
-        {
-          // No intermediate variable needed for null arguments
-        }
-        else
-        {
-          macros.apply(file, "ParserSimpleVariableDeclaration", new String[] {type_name, type_name.toLowerCase(), "" + position});
-        }
+        generateVariableDeclaration(term);
       }
     }
     catch(IOException e)
-- 
GitLab