From 54a80d031c95ada10c7fdc272ef106fb68b5d883 Mon Sep 17 00:00:00 2001
From: dgelessus <dgelessus@users.noreply.github.com>
Date: Wed, 18 Sep 2024 12:52:33 +0200
Subject: [PATCH] Set realMsg consistently for all ParserExceptions

---
 .../org/sablecc/sablecc/parser/Parser.java    |  8 +++-----
 .../sablecc/parser/ParserException.java       | 12 ++++++++---
 .../resources/org/sablecc/sablecc/parser.txt  | 20 +++++++++++--------
 3 files changed, 24 insertions(+), 16 deletions(-)

diff --git a/src/main/java/org/sablecc/sablecc/parser/Parser.java b/src/main/java/org/sablecc/sablecc/parser/Parser.java
index 6f04f9d..a56e567 100644
--- a/src/main/java/org/sablecc/sablecc/parser/Parser.java
+++ b/src/main/java/org/sablecc/sablecc/parser/Parser.java
@@ -1799,7 +1799,7 @@ public class Parser implements IParser
                         }
                         break;
                         default:
-                            throw new ParserException(lastToken, "[" + lastToken.getLine() + "," + lastToken.getPos() + "] Internal parser error: invalid action table REDUCE destination " + destination + ", current state " + state());
+                            throw new ParserException(lastToken, "Internal parser error: invalid action table REDUCE destination " + destination + ", current state " + state());
                     }
                     break;
 
@@ -1809,12 +1809,10 @@ public class Parser implements IParser
                     return new Start(top, eof);
 
                 case ERROR:
-                    throw new ParserException(lastToken,
-                        "[" + lastToken.getLine() + "," + lastToken.getPos() + "] " ,
-                        Parser.errorMessages[Parser.errors[destination]]);
+                    throw new ParserException(lastToken, Parser.errorMessages[Parser.errors[destination]]);
 
                 default:
-                    throw new ParserException(lastToken, "[" + lastToken.getLine() + "," + lastToken.getPos() + "] Internal parser error: invalid action table entry " + action + ", destination " + destination + ", current state " + state());
+                    throw new ParserException(lastToken, "Internal parser error: invalid action table entry " + action + ", destination " + destination + ", current state " + state());
             }
         }
     }
diff --git a/src/main/java/org/sablecc/sablecc/parser/ParserException.java b/src/main/java/org/sablecc/sablecc/parser/ParserException.java
index 518b8ec..e743678 100644
--- a/src/main/java/org/sablecc/sablecc/parser/ParserException.java
+++ b/src/main/java/org/sablecc/sablecc/parser/ParserException.java
@@ -7,15 +7,21 @@ import org.sablecc.sablecc.node.*;
 @SuppressWarnings("serial")
 public class ParserException extends Exception
 {
-    Token token;
-    String realMsg;
+    private final Token token;
+    private final String realMsg;
 
     public ParserException(Token token, String message)
     {
-        super(message);
+        super("[" + token.getLine() + "," + token.getPos() + "] " + message);
         this.token = token;
+        this.realMsg = message;
     }
 
+    /**
+     * @deprecated Use {@link #ParserException(Token, String)} instead.
+     *     The token position info is now added automatically to the message.
+     */
+    @Deprecated
     public ParserException(Token token, String prefix, String message)
     {
         super(prefix+message);
diff --git a/src/main/resources/org/sablecc/sablecc/parser.txt b/src/main/resources/org/sablecc/sablecc/parser.txt
index 72b1419..9d595ef 100644
--- a/src/main/resources/org/sablecc/sablecc/parser.txt
+++ b/src/main/resources/org/sablecc/sablecc/parser.txt
@@ -207,7 +207,7 @@ $
 
 Macro:ParserParseTail
                         default:
-                            throw new ParserException(lastToken, "[" + lastToken.getLine() + "," + lastToken.getPos() + "] Internal parser error: invalid action table REDUCE destination " + destination + ", current state " + state());
+                            throw new ParserException(lastToken, "Internal parser error: invalid action table REDUCE destination " + destination + ", current state " + state());
                     }
                     break;
 
@@ -217,12 +217,10 @@ Macro:ParserParseTail
                     return new Start(top, eof);
 
                 case ERROR:
-                    throw new ParserException(lastToken,
-                        "[" + lastToken.getLine() + "," + lastToken.getPos() + "] " ,
-                        Parser.errorMessages[Parser.errors[destination]]);
+                    throw new ParserException(lastToken, Parser.errorMessages[Parser.errors[destination]]);
 
                 default:
-                    throw new ParserException(lastToken, "[" + lastToken.getLine() + "," + lastToken.getPos() + "] Internal parser error: invalid action table entry " + action + ", destination " + destination + ", current state " + state());
+                    throw new ParserException(lastToken, "Internal parser error: invalid action table entry " + action + ", destination " + destination + ", current state " + state());
             }
         }
     }
@@ -511,15 +509,21 @@ import $0$node.*;
 @SuppressWarnings("serial")
 public class ParserException extends Exception
 {
-    Token token;
-    String realMsg;
+    private final Token token;
+    private final String realMsg;
 
     public ParserException(Token token, String message)
     {
-        super(message);
+        super("[" + token.getLine() + "," + token.getPos() + "] " + message);
         this.token = token;
+        this.realMsg = message;
     }
 
+    /**
+     * @deprecated Use {@link #ParserException(Token, String)} instead.
+     *     The token position info is now added automatically to the message.
+     */
+    @Deprecated
     public ParserException(Token token, String prefix, String message)
     {
         super(prefix+message);
-- 
GitLab