diff --git a/lib/modules/Parser.pmod/C.pmod b/lib/modules/Parser.pmod/C.pmod index 8fd8d3d558bf4c4275401e4706f6837f26862136..5b43bd81137884ba20b5af1f517a9db3631719d4 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;