When I match these rules:

p6rule("<LAG::Parser::parenlist> <LAG::Parser::codeblock>", classname, "attrdef")
    p6rule("\( \s* x \s* \)", classname, "parenlist")
    p6rule("{ \s* y \s* }", classname, "codeblock")

against this string "(x) { y }", I get the following error:

src/inter_call.c:129: failed assertion `PObj_is_PMC_TEST(sig_pmc)'
Abort trap

When I change the two subrule calls to an inline pattern, the match fails (as it should), but doesn't give the error.

    p6rule("\( \s* x \s* \)  { \s* y \s* }", classname, "attrdef")

When I add in whitespace between the two subrules, the rule matches successfully with no errors:

p6rule("<LAG::Parser::parenlist> \s* <LAG::Parser::codeblock>", classname, "attrdef")

Any thoughts on the cause of the error? I've run across it several other times as well, this was just a nice small example. It seems to always involve a failed match with calls to subrules.

Allison

Reply via email to