protected override int VisitDecisionState(DecisionState p)
{
int predictedAlt = base.VisitDecisionState(p);
if (p.NumberOfTransitions > 1)
{
// System.out.println("decision "+p.decision+": "+predictedAlt);
if (p.decision == this.overrideDecision &&
this._input.Index == this.overrideDecisionInputIndex)
{
overrideDecisionRoot = (GrammarInterpreterRuleContext)Context;
}
}
GrammarInterpreterRuleContext ctx = (GrammarInterpreterRuleContext)_ctx;
if (decisionStatesThatSetOuterAltNumInContext.Get(p.stateNumber))
{
ctx.OuterAlternative = predictedAlt;
Rule r = g.GetRule(p.ruleIndex);
if (atn.ruleToStartState[r.index].isPrecedenceRule)
{
int[] alts = stateToAltsMap[p.stateNumber];
LeftRecursiveRule lr = (LeftRecursiveRule)g.GetRule(p.ruleIndex);
if (p.StateType == StateType.BlockStart)
{
if (alts == null)
{
alts = lr.GetPrimaryAlts();
stateToAltsMap[p.stateNumber] = alts; // cache it
}
}
else if (p.StateType == StateType.StarBlockStart)
{
if (alts == null)
{
alts = lr.GetRecursiveOpAlts();
stateToAltsMap[p.stateNumber] = alts; // cache it
}
}
ctx.OuterAlternative = alts[predictedAlt];
}
}
return predictedAlt;
}