parboiled icon indicating copy to clipboard operation
parboiled copied to clipboard

Stack overflow

Open metadeus opened this issue 9 years ago • 6 comments

    Rule TypeApplicationAsProxyType(@NotNull Var<IfDevNamespace> namespaceVar)
    {
        return FirstOf(PrimitiveTypeApplicationAsProxyType(),
                ArrayTypeApplicationAsProxyType(namespaceVar),
                Sequence(ElementIdAsFqn(), push(proxyDefaultNamespace((IfDevFqn) pop(),
                        namespaceVar.get()))));
    }

    Rule ArrayTypeApplicationAsProxyType(@NotNull Var<IfDevNamespace> namespaceVar)
    {
        return Sequence(Sequence('[', OptEW(), TypeApplicationAsProxyType(namespaceVar), drop(), OptEW(), ',', OptEW(), LengthFrom(),
                Optional(OptEW(), "..", OptEW(), LengthTo()), OptEW(), ']'),
                push(proxyForSystem(ImmutableIfDevName.newInstanceFromSourceName(match()))));
    }

Exception:

java.lang.StackOverflowError
    at ru.cpb9.ifdev.parser.IfDevParboiledParser$$parboiled.ArrayTypeApplicationAsProxyType(Unknown Source)
    at ru.cpb9.ifdev.parser.IfDevParboiledParser$$parboiled.TypeApplicationAsProxyType(Unknown Source)
    at ru.cpb9.ifdev.parser.IfDevParboiledParser$$parboiled.ArrayTypeApplicationAsProxyType(Unknown Source)
    at ru.cpb9.ifdev.parser.IfDevParboiledParser$$parboiled.TypeApplicationAsProxyType(Unknown Source)
    at ru.cpb9.ifdev.parser.IfDevParboiledParser$$parboiled.ArrayTypeApplicationAsProxyType(Unknown Source)
    at ru.cpb9.ifdev.parser.IfDevParboiledParser$$parboiled.TypeApplicationAsProxyType(Unknown Source)
    ...

What's wrong? Am I missing something important?

metadeus avatar Aug 13 '15 00:08 metadeus

Hmm... What happens when you flatten the nested Sequence in ArrayTypeApplicationAsProxyType? It doesn't appear to add any value, does it?

sirthias avatar Aug 13 '15 12:08 sirthias

It does, it's followed by push(match()). Flattening the nested Sequence does not fix the problem. Removing the Var<> parameters from both rules does fix the problem.

metadeus avatar Aug 13 '15 12:08 metadeus

Code to reproduce the bug:

@BuildParseTree
public class BugParser extends BaseParser<Object>
{
    Rule Root()
    {
        Var<Object> var = new Var<>();
        return Expr(var);
    }

    Rule Expr(Var<Object> var)
    {
        return SubExpr(var);
    }

    Rule SubExpr(Var<Object> var)
    {
        return Sequence('(', Expr(var), ')');
    }
}

metadeus avatar Aug 14 '15 15:08 metadeus

Ok, thank you! That looks indeed like a bug. Thanks for reporting!

sirthias avatar Aug 15 '15 11:08 sirthias

Running into similar issues, any news?

bvkatwijk avatar Jul 28 '18 16:07 bvkatwijk

Same for me.

umazalakain avatar Nov 17 '18 13:11 umazalakain