1 /* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
2 * Use of this file is governed by the BSD 3-clause license that
3 * can be found in the LICENSE.txt file in the project root.
6 #include "atn/ParserATNSimulator.h"
8 #include "atn/PredicateTransition.h"
10 #include "atn/ATNState.h"
11 #include "support/CPPUtils.h"
13 #include "FailedPredicateException.h"
15 using namespace antlr4;
16 using namespace antlrcpp;
18 FailedPredicateException::FailedPredicateException(Parser *recognizer) : FailedPredicateException(recognizer, "", "") {
21 FailedPredicateException::FailedPredicateException(Parser *recognizer, const std::string &predicate): FailedPredicateException(recognizer, predicate, "") {
24 FailedPredicateException::FailedPredicateException(Parser *recognizer, const std::string &predicate, const std::string &message)
25 : RecognitionException(!message.empty() ? message : "failed predicate: " + predicate + "?", recognizer,
26 recognizer->getInputStream(), recognizer->getContext(), recognizer->getCurrentToken()) {
28 atn::ATNState *s = recognizer->getInterpreter<atn::ATNSimulator>()->atn.states[recognizer->getState()];
29 atn::Transition *transition = s->transitions[0];
30 if (is<atn::PredicateTransition*>(transition)) {
31 _ruleIndex = static_cast<atn::PredicateTransition *>(transition)->ruleIndex;
32 _predicateIndex = static_cast<atn::PredicateTransition *>(transition)->predIndex;
38 _predicate = predicate;
41 size_t FailedPredicateException::getRuleIndex() {
45 size_t FailedPredicateException::getPredIndex() {
46 return _predicateIndex;
49 std::string FailedPredicateException::getPredicate() {