From a60881d9311645311c67db6870c0bde0fa1043e8 Mon Sep 17 00:00:00 2001
From: dgelessus <dgelessus@users.noreply.github.com>
Date: Thu, 20 Jul 2023 21:31:35 +0200
Subject: [PATCH] Refactor code generation for simple terms

---
 .../GenerateAlternativeCodeForParser.java     | 89 ++++---------------
 1 file changed, 16 insertions(+), 73 deletions(-)

diff --git a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
index 79eee43..d8ab8f0 100644
--- a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
+++ b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
@@ -168,27 +168,26 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
     }
   }
 
-  @Override
-  public void inASimpleTerm(ASimpleTerm node)
+  private void generateSimpleTerm(Node node, TId id, TId simpleTermTail)
   {
     try
     {
       String type_name = lookupInternalTypeName(node);
       int position = CG.getTermNumbers().get(node).intValue();
-      String termKey = currentAlt+"."+node.getId().getText();
+      String termKey = currentAlt + "." + id.getText();
       int elemPosition = CTP.elems_position.get(termKey);
       int positionMap = 0;
 
-      if(node.getSimpleTermTail() != null )
+      if(simpleTermTail != null)
       {
         // FIXME This condition is always false, because listSimpleTermTransform contains ASimpleTerm/ASimpleListTerm and not String! Is it safe to remove this?
-        if( !listSimpleTermTransform.contains(node.getId().getText() ) )
+        if(!listSimpleTermTransform.contains(id.getText()))
         {
-          String type = CTP.positionsMap.get( realcurrentAlt+"."+node.getId().getText() );
+          String type = CTP.positionsMap.get(realcurrentAlt + "." + id.getText());
           List<String> list = transformIds.getProdTransformIds().prod_transforms.get(type);
-          if( list.indexOf( node.getSimpleTermTail().getText() ) >= 0 )
+          if(list.indexOf(simpleTermTail.getText()) >= 0)
           {
-            positionMap = list.indexOf( node.getSimpleTermTail().getText() );
+            positionMap = list.indexOf(simpleTermTail.getText());
           }
         }
 
@@ -196,9 +195,9 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
         {
           String type = simpleTermOrsimpleListTermTypes.get(node);
           List<String> list = transformIds.getProdTransformIds().prod_transforms.get(type);
-          if( list.indexOf( node.getSimpleTermTail().getText() ) >= 0 )
+          if(list.indexOf(simpleTermTail.getText()) >= 0)
           {
-            positionMap = list.indexOf( node.getSimpleTermTail().getText() );
+            positionMap = list.indexOf(simpleTermTail.getText());
           }
         }
       }
@@ -234,71 +233,15 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
   }
 
   @Override
-  public void inASimpleListTerm(ASimpleListTerm node)
+  public void inASimpleTerm(ASimpleTerm node)
   {
-    try
-    {
-      String type_name = lookupInternalTypeName(node);
-
-      String termKey = currentAlt+"."+node.getId().getText();
-      int position = CG.getTermNumbers().get(node);
-
-      int elemPosition = CTP.elems_position.get(termKey);
-
-      int positionMap = 0;
-
-      if(node.getSimpleTermTail() != null )
-      {
-        // FIXME This condition is always false, because listSimpleTermTransform contains ASimpleTerm/ASimpleListTerm and not String! Is it safe to remove this?
-        if( !listSimpleTermTransform.contains(node.getId().getText()) )
-        {
-          String type = CTP.positionsMap.get( realcurrentAlt+"."+node.getId().getText() );
-          List<String> list = transformIds.getProdTransformIds().prod_transforms.get(type);
-          if( list.indexOf( node.getSimpleTermTail().getText() ) >= 0 )
-          {
-            positionMap = list.indexOf( node.getSimpleTermTail().getText() );
-          }
-        }
-
-        if(simpleTermOrsimpleListTermTypes.get(node) != null)
-        {
-          String type = simpleTermOrsimpleListTermTypes.get(node);
-          List<String> list = transformIds.getProdTransformIds().prod_transforms.get(type);
-          if( list.indexOf( node.getSimpleTermTail().getText() ) >= 0 )
-          {
-            positionMap = list.indexOf( node.getSimpleTermTail().getText() );
-          }
-        }
-      }
-
-      String type;
-      if(type_name.startsWith("L"))
-      {
-        type_name = "list";
-        type = "LinkedList";
-      }
-      else if(type_name.equals("null"))
-      {
-        type_name = "null";
-        type = "Object";
-      }
-      else
-      {
-        type = type_name;
-      }
+    generateSimpleTerm(node, node.getId(), node.getSimpleTermTail());
+  }
 
-      macros.apply(file, "ParserSimpleTerm", new String[]
-                   {
-                     type_name.toLowerCase(), ""+position,
-                     type, ""+elemPosition, ""+positionMap
-                   }
-                  );
-    }
-    catch(IOException e)
-    {
-      throw new RuntimeException("An error occured while writing to " +
-                                 new File(pkgDir, "Parser.java").getAbsolutePath(), e);
-    }
+  @Override
+  public void inASimpleListTerm(ASimpleListTerm node)
+  {
+    generateSimpleTerm(node, node.getId(), node.getSimpleTermTail());
   }
 
   @Override
-- 
GitLab