From d7146e9c6d5ca6fd4a865007aeeb552afe51229e Mon Sep 17 00:00:00 2001
From: Andreas Lange <andreas@lange.cx>
Date: Fri, 4 Aug 2000 04:08:10 +0200
Subject: [PATCH] Improved diagnostics for mismatching grouping.

Rev: lib/modules/Parser.pmod/C.pmod:1.11
---
 lib/modules/Parser.pmod/C.pmod | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/lib/modules/Parser.pmod/C.pmod b/lib/modules/Parser.pmod/C.pmod
index 8fd8d3d558..5b43bd8113 100644
--- a/lib/modules/Parser.pmod/C.pmod
+++ b/lib/modules/Parser.pmod/C.pmod
@@ -277,7 +277,19 @@ array group(array(string|Token) tokens, void|mapping groupings)
     {
       case 0: ret+=({token}); break;
       case 1: stack->push(ret); ret=({token}); break;
-      case 2: ret=stack->pop()+({ ret + ({token}) });
+      case 2:
+	if (!sizeof(ret) || !stack->ptr ||
+	    (groupings[(string)ret[0]] != (string)token)) {
+	  // Mismatch
+	  werror(sprintf("**** Grouping mismatch token=%O\n"
+			 "**** tokens: ({ %{%O, %}})\n"
+			 "**** ret: ({ %{%O, %}})\n"
+			 "**** stackdepth: %d\n",
+			 (string)token, (array(string)) tokens,
+			 (array(string))ret, stack->ptr));
+	  return ret;
+	}
+	ret=stack->pop()+({ ret + ({token}) });
     }
   }
   return ret;
-- 
GitLab