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