From 7d16438a195ee7d2b47a7e8480f8f413a0bd2333 Mon Sep 17 00:00:00 2001 From: parrt Date: Wed, 30 Mar 2016 09:48:33 -0700 Subject: [PATCH] only gen "set stop token" if finally/after actions exist. --- .../v4/codegen/DefaultOutputModelFactory.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/tool/src/org/antlr/v4/codegen/DefaultOutputModelFactory.java b/tool/src/org/antlr/v4/codegen/DefaultOutputModelFactory.java index 03841f6e8..c8a149817 100644 --- a/tool/src/org/antlr/v4/codegen/DefaultOutputModelFactory.java +++ b/tool/src/org/antlr/v4/codegen/DefaultOutputModelFactory.java @@ -79,15 +79,18 @@ public abstract class DefaultOutputModelFactory extends BlankOutputModelFactory @Override public List rulePostamble(RuleFunction function, Rule r) { - // See OutputModelController.buildLeftRecursiveRuleFunction - // and Parser.exitRule for other places which set stop. - CodeGenerator gen = getGenerator(); - STGroup codegenTemplates = gen.getTemplates(); - ST setStopTokenAST = codegenTemplates.getInstanceOf("recRuleSetStopToken"); - Action setStopTokenAction = new Action(this, function.ruleCtx, setStopTokenAST); - List ops = new ArrayList(1); - ops.add(setStopTokenAction); - return ops; + if ( r.namedActions.containsKey("after") || r.namedActions.containsKey("finally") ) { + // See OutputModelController.buildLeftRecursiveRuleFunction + // and Parser.exitRule for other places which set stop. + CodeGenerator gen = getGenerator(); + STGroup codegenTemplates = gen.getTemplates(); + ST setStopTokenAST = codegenTemplates.getInstanceOf("recRuleSetStopToken"); + Action setStopTokenAction = new Action(this, function.ruleCtx, setStopTokenAST); + List ops = new ArrayList(1); + ops.add(setStopTokenAction); + return ops; + } + return super.rulePostamble(function, r); } // Convenience methods