From 56e3ba8d7d126290f202c88b864a92143d644a94 Mon Sep 17 00:00:00 2001
From: dgelessus <dgelessus@users.noreply.github.com>
Date: Thu, 20 Jul 2023 21:58:57 +0200
Subject: [PATCH] Fix codegen for Null at top level in alternative
 transformation

---
 .../GenerateAlternativeCodeForParser.java     | 19 +++++++++++--------
 .../resources/org/sablecc/sablecc/parser.txt  |  5 +++++
 2 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
index 48f59e3..1318cad 100644
--- a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
+++ b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
@@ -124,19 +124,22 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
 
         position = CG.getTermNumbers().get(term);
 
-        if(type_name.startsWith("L"))
+        if("null".equals(type_name))
         {
-          type_name = "list";
-        }
-        else if(type_name.equals("null"))
-        {
-          type_name = "null";
+          macros.apply(file, "ParserNewBodyListAddNull", null);
         }
         else
         {
-          type_name = type_name.toLowerCase();
+          if(type_name.startsWith("L"))
+          {
+            type_name = "list";
+          }
+          else
+          {
+            type_name = type_name.toLowerCase();
+          }
+          macros.apply(file, "ParserNewBodyListAdd", new String[] {type_name, "" + position});
         }
-        macros.apply(file, "ParserNewBodyListAdd", new String[] {type_name, "" + position});
 
       }
       if (popCount > 0) {
diff --git a/src/main/resources/org/sablecc/sablecc/parser.txt b/src/main/resources/org/sablecc/sablecc/parser.txt
index 0632711..2375146 100644
--- a/src/main/resources/org/sablecc/sablecc/parser.txt
+++ b/src/main/resources/org/sablecc/sablecc/parser.txt
@@ -390,6 +390,11 @@ Macro:ParserNewBodyListAdd
 
 $
 
+Macro:ParserNewBodyListAddNull
+        nodeList.add(null);
+
+$
+
 Macro:ParserNewCheck
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList$0$);
 
-- 
GitLab