expressir 1.2.3 → 1.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/rake.yml +30 -17
- data/.gitignore +1 -0
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/CMakeLists.txt +30 -5
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2019.vcxproj +8 -0
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/project.pbxproj +31 -15
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/xcshareddata/xcschemes/antlr4.xcscheme +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/xcshareddata/xcschemes/antlr4_ios.xcscheme +1 -5
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/xcshareddata/xcschemes/antlr4_static.xcscheme +1 -5
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRFileStream.cpp +1 -6
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRFileStream.h +9 -6
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.cpp +26 -12
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.h +10 -3
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenFactory.cpp +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenFactory.h +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/IntStream.h +7 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.cpp +2 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.h +23 -10
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ListTokenSource.cpp +2 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ListTokenSource.h +2 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.cpp +4 -4
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.h +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.cpp +3 -3
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.h +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ProxyErrorListener.cpp +4 -4
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.h +8 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuntimeMetaData.cpp +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Token.h +39 -7
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenSource.h +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.cpp +5 -5
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.h +9 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.cpp +11 -19
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.h +2 -3
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-common.h +4 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.cpp +2 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.h +7 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.cpp +0 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.h +8 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.cpp +0 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.h +7 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSerializer.cpp +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.cpp +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.h +9 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.cpp +8 -10
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.h +7 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.h +9 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.cpp +6 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.h +14 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.cpp +2 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.cpp +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.cpp +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.cpp +9 -9
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.h +7 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.h +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Arrays.cpp +2 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.cpp +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.cpp +11 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.h +40 -18
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.h +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.h +29 -5
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/Trees.cpp +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePattern.cpp +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPath.cpp +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathRuleElement.cpp +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathTokenElement.cpp +1 -1
- data/ext/express-parser/express_parser.cpp +20 -164
- data/ext/express-parser/extconf.rb +3 -4
- data/lib/expressir/express/parser.rb +17 -14
- data/lib/expressir/express/visitor.rb +3 -1
- data/lib/expressir/version.rb +1 -1
- metadata +2 -2
@@ -38,8 +38,15 @@ namespace atn {
|
|
38
38
|
|
39
39
|
|
40
40
|
public:
|
41
|
-
|
42
|
-
static
|
41
|
+
#if __cplusplus >= 201703L
|
42
|
+
static constexpr size_t MIN_DFA_EDGE = 0;
|
43
|
+
static constexpr size_t MAX_DFA_EDGE = 127; // forces unicode to stay in ATN
|
44
|
+
#else
|
45
|
+
enum : size_t {
|
46
|
+
MIN_DFA_EDGE = 0,
|
47
|
+
MAX_DFA_EDGE = 127, // forces unicode to stay in ATN
|
48
|
+
};
|
49
|
+
#endif
|
43
50
|
|
44
51
|
protected:
|
45
52
|
/// <summary>
|
@@ -774,7 +774,7 @@ std::pair<ATNConfigSet *, ATNConfigSet *> ParserATNSimulator::splitAccordingToSe
|
|
774
774
|
BitSet ParserATNSimulator::evalSemanticContext(std::vector<dfa::DFAState::PredPrediction*> predPredictions,
|
775
775
|
ParserRuleContext *outerContext, bool complete) {
|
776
776
|
BitSet predictions;
|
777
|
-
for (auto prediction : predPredictions) {
|
777
|
+
for (auto *prediction : predPredictions) {
|
778
778
|
if (prediction->pred == SemanticContext::NONE) {
|
779
779
|
predictions.set(prediction->alt);
|
780
780
|
if (!complete) {
|
@@ -1348,7 +1348,9 @@ Parser* ParserATNSimulator::getParser() {
|
|
1348
1348
|
return parser;
|
1349
1349
|
}
|
1350
1350
|
|
1351
|
-
#
|
1351
|
+
#ifdef _MSC_VER
|
1352
|
+
#pragma warning (disable:4996) // 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead.
|
1353
|
+
#endif
|
1352
1354
|
|
1353
1355
|
bool ParserATNSimulator::getLrLoopSetting() {
|
1354
1356
|
char *var = std::getenv("TURN_OFF_LR_LOOP_ENTRY_BRANCH_OPT");
|
@@ -1358,7 +1360,9 @@ bool ParserATNSimulator::getLrLoopSetting() {
|
|
1358
1360
|
return value == "true" || value == "1";
|
1359
1361
|
}
|
1360
1362
|
|
1363
|
+
#ifdef _MSC_VER
|
1361
1364
|
#pragma warning (default:4996)
|
1365
|
+
#endif
|
1362
1366
|
|
1363
1367
|
void ParserATNSimulator::InitializeInstanceFields() {
|
1364
1368
|
_mode = PredictionMode::LL;
|
@@ -30,10 +30,22 @@ namespace atn {
|
|
30
30
|
// ml: originally Integer.MAX_VALUE, which would be -1 for us, but this is already used in places where
|
31
31
|
// -1 is converted to unsigned, so we use a different value here. Any value does the job provided it doesn't
|
32
32
|
// conflict with real return states.
|
33
|
-
|
33
|
+
#if __cplusplus >= 201703L
|
34
|
+
static constexpr size_t EMPTY_RETURN_STATE = std::numeric_limits<size_t>::max() - 9;
|
35
|
+
#else
|
36
|
+
enum : size_t {
|
37
|
+
EMPTY_RETURN_STATE = static_cast<size_t>(-10), // std::numeric_limits<size_t>::max() - 9; doesn't work in VS 2013
|
38
|
+
};
|
39
|
+
#endif
|
34
40
|
|
35
41
|
private:
|
36
|
-
|
42
|
+
#if __cplusplus >= 201703L
|
43
|
+
static constexpr size_t INITIAL_HASH = 1;
|
44
|
+
#else
|
45
|
+
enum : size_t {
|
46
|
+
INITIAL_HASH = 1,
|
47
|
+
};
|
48
|
+
#endif
|
37
49
|
|
38
50
|
public:
|
39
51
|
static size_t globalNodeCount;
|
@@ -46,7 +46,7 @@ DFA::DFA(DFA &&other) : atnStartState(other.atnStartState), decision(other.decis
|
|
46
46
|
|
47
47
|
DFA::~DFA() {
|
48
48
|
bool s0InList = (s0 == nullptr);
|
49
|
-
for (auto state : states) {
|
49
|
+
for (auto *state : states) {
|
50
50
|
if (state == s0)
|
51
51
|
s0InList = true;
|
52
52
|
delete state;
|
@@ -88,7 +88,7 @@ void DFA::setPrecedenceStartState(int precedence, DFAState *startState, SingleWr
|
|
88
88
|
|
89
89
|
std::vector<DFAState *> DFA::getStates() const {
|
90
90
|
std::vector<DFAState *> result;
|
91
|
-
for (auto state : states)
|
91
|
+
for (auto *state : states)
|
92
92
|
result.push_back(state);
|
93
93
|
|
94
94
|
std::sort(result.begin(), result.end(), [](DFAState *o1, DFAState *o2) -> bool {
|
@@ -27,7 +27,7 @@ std::string DFASerializer::toString() const {
|
|
27
27
|
|
28
28
|
std::stringstream ss;
|
29
29
|
std::vector<DFAState *> states = _dfa->getStates();
|
30
|
-
for (auto s : states) {
|
30
|
+
for (auto *s : states) {
|
31
31
|
for (size_t i = 0; i < s->edges.size(); i++) {
|
32
32
|
DFAState *t = s->edges[i];
|
33
33
|
if (t != nullptr && t->stateNumber != INT32_MAX) {
|
@@ -112,7 +112,7 @@ void IntervalSet::add(const Interval &addition) {
|
|
112
112
|
|
113
113
|
IntervalSet IntervalSet::Or(const std::vector<IntervalSet> &sets) {
|
114
114
|
IntervalSet result;
|
115
|
-
for (auto &s : sets) {
|
115
|
+
for (const auto &s : sets) {
|
116
116
|
result.addAll(s);
|
117
117
|
}
|
118
118
|
return result;
|
@@ -271,7 +271,7 @@ bool IntervalSet::contains(ssize_t el) const {
|
|
271
271
|
if (el < _intervals[0].a) // list is sorted and el is before first interval; not here
|
272
272
|
return false;
|
273
273
|
|
274
|
-
for (auto &interval : _intervals) {
|
274
|
+
for (const auto &interval : _intervals) {
|
275
275
|
if (el >= interval.a && el <= interval.b) {
|
276
276
|
return true; // found in this interval
|
277
277
|
}
|
@@ -315,7 +315,7 @@ std::vector<Interval> const& IntervalSet::getIntervals() const {
|
|
315
315
|
|
316
316
|
size_t IntervalSet::hashCode() const {
|
317
317
|
size_t hash = MurmurHash::initialize();
|
318
|
-
for (auto &interval : _intervals) {
|
318
|
+
for (const auto &interval : _intervals) {
|
319
319
|
hash = MurmurHash::update(hash, interval.a);
|
320
320
|
hash = MurmurHash::update(hash, interval.b);
|
321
321
|
}
|
@@ -349,7 +349,7 @@ std::string IntervalSet::toString(bool elemAreChar) const {
|
|
349
349
|
}
|
350
350
|
|
351
351
|
bool firstEntry = true;
|
352
|
-
for (auto &interval : _intervals) {
|
352
|
+
for (const auto &interval : _intervals) {
|
353
353
|
if (!firstEntry)
|
354
354
|
ss << ", ";
|
355
355
|
firstEntry = false;
|
@@ -395,7 +395,7 @@ std::string IntervalSet::toString(const dfa::Vocabulary &vocabulary) const {
|
|
395
395
|
}
|
396
396
|
|
397
397
|
bool firstEntry = true;
|
398
|
-
for (auto &interval : _intervals) {
|
398
|
+
for (const auto &interval : _intervals) {
|
399
399
|
if (!firstEntry)
|
400
400
|
ss << ", ";
|
401
401
|
firstEntry = false;
|
@@ -436,7 +436,7 @@ std::string IntervalSet::elementName(const dfa::Vocabulary &vocabulary, ssize_t
|
|
436
436
|
|
437
437
|
size_t IntervalSet::size() const {
|
438
438
|
size_t result = 0;
|
439
|
-
for (auto &interval : _intervals) {
|
439
|
+
for (const auto &interval : _intervals) {
|
440
440
|
result += size_t(interval.b - interval.a + 1);
|
441
441
|
}
|
442
442
|
return result;
|
@@ -444,7 +444,7 @@ size_t IntervalSet::size() const {
|
|
444
444
|
|
445
445
|
std::vector<ssize_t> IntervalSet::toList() const {
|
446
446
|
std::vector<ssize_t> result;
|
447
|
-
for (auto &interval : _intervals) {
|
447
|
+
for (const auto &interval : _intervals) {
|
448
448
|
ssize_t a = interval.a;
|
449
449
|
ssize_t b = interval.b;
|
450
450
|
for (ssize_t v = a; v <= b; v++) {
|
@@ -456,7 +456,7 @@ std::vector<ssize_t> IntervalSet::toList() const {
|
|
456
456
|
|
457
457
|
std::set<ssize_t> IntervalSet::toSet() const {
|
458
458
|
std::set<ssize_t> result;
|
459
|
-
for (auto &interval : _intervals) {
|
459
|
+
for (const auto &interval : _intervals) {
|
460
460
|
ssize_t a = interval.a;
|
461
461
|
ssize_t b = interval.b;
|
462
462
|
for (ssize_t v = a; v <= b; v++) {
|
@@ -468,7 +468,7 @@ std::set<ssize_t> IntervalSet::toSet() const {
|
|
468
468
|
|
469
469
|
ssize_t IntervalSet::get(size_t i) const {
|
470
470
|
size_t index = 0;
|
471
|
-
for (auto &interval : _intervals) {
|
471
|
+
for (const auto &interval : _intervals) {
|
472
472
|
ssize_t a = interval.a;
|
473
473
|
ssize_t b = interval.b;
|
474
474
|
for (ssize_t v = a; v <= b; v++) {
|
@@ -13,7 +13,13 @@ namespace misc {
|
|
13
13
|
class ANTLR4CPP_PUBLIC MurmurHash {
|
14
14
|
|
15
15
|
private:
|
16
|
-
|
16
|
+
#if __cplusplus >= 201703L
|
17
|
+
static constexpr size_t DEFAULT_SEED = 0;
|
18
|
+
#else
|
19
|
+
enum : size_t {
|
20
|
+
DEFAULT_SEED = 0,
|
21
|
+
};
|
22
|
+
#endif
|
17
23
|
|
18
24
|
/// Initialize the hash using the default seed value.
|
19
25
|
/// Returns the intermediate hash value.
|
@@ -16,7 +16,7 @@ std::string Arrays::listToString(const std::vector<std::string> &list, const std
|
|
16
16
|
bool firstEntry = true;
|
17
17
|
|
18
18
|
ss << '[';
|
19
|
-
for (auto &entry : list) {
|
19
|
+
for (const auto &entry : list) {
|
20
20
|
ss << entry;
|
21
21
|
if (firstEntry) {
|
22
22
|
ss << separator;
|
@@ -32,7 +32,7 @@ template <>
|
|
32
32
|
std::string Arrays::toString(const std::vector<antlr4::tree::ParseTree*> &source) {
|
33
33
|
std::string result = "[";
|
34
34
|
bool firstEntry = true;
|
35
|
-
for (auto value : source) {
|
35
|
+
for (auto *value : source) {
|
36
36
|
result += value->toStringTree();
|
37
37
|
if (firstEntry) {
|
38
38
|
result += ", ";
|
@@ -20,16 +20,26 @@ void replaceAll(std::string& str, std::string const& from, std::string const& to
|
|
20
20
|
}
|
21
21
|
|
22
22
|
std::string ws2s(std::wstring const& wstr) {
|
23
|
+
#ifndef USE_UTF8_INSTEAD_OF_CODECVT
|
23
24
|
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
|
24
25
|
std::string narrow = converter.to_bytes(wstr);
|
26
|
+
#else
|
27
|
+
std::string narrow;
|
28
|
+
utf8::utf32to8(wstr.begin(), wstr.end(), std::back_inserter(narrow));
|
29
|
+
#endif
|
25
30
|
|
26
31
|
return narrow;
|
27
32
|
}
|
28
33
|
|
29
34
|
std::wstring s2ws(const std::string &str) {
|
35
|
+
#ifndef USE_UTF8_INSTEAD_OF_CODECVT
|
30
36
|
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
|
31
37
|
std::wstring wide = converter.from_bytes(str);
|
32
|
-
|
38
|
+
#else
|
39
|
+
std::wstring wide;
|
40
|
+
utf8::utf8to32(str.begin(), str.end(), std::back_inserter(wide));
|
41
|
+
#endif
|
42
|
+
|
33
43
|
return wide;
|
34
44
|
}
|
35
45
|
|
@@ -7,43 +7,65 @@
|
|
7
7
|
|
8
8
|
#include "antlr4-common.h"
|
9
9
|
|
10
|
+
#ifdef USE_UTF8_INSTEAD_OF_CODECVT
|
11
|
+
#include "utf8.h"
|
12
|
+
#endif
|
13
|
+
|
10
14
|
namespace antlrcpp {
|
11
15
|
|
12
16
|
// For all conversions utf8 <-> utf32.
|
17
|
+
// I wouldn't prefer wstring_convert because: according to
|
18
|
+
// https://en.cppreference.com/w/cpp/locale/wstring_convert,
|
19
|
+
// wstring_convert is deprecated in C++17.
|
20
|
+
// utfcpp (https://github.com/nemtrif/utfcpp) is a substitution.
|
21
|
+
#ifndef USE_UTF8_INSTEAD_OF_CODECVT
|
13
22
|
// VS 2015 and VS 2017 have different bugs in std::codecvt_utf8<char32_t> (VS 2013 works fine).
|
14
|
-
#if defined(_MSC_VER) && _MSC_VER >= 1900 && _MSC_VER < 2000
|
15
|
-
|
16
|
-
#else
|
17
|
-
|
23
|
+
#if defined(_MSC_VER) && _MSC_VER >= 1900 && _MSC_VER < 2000
|
24
|
+
typedef std::wstring_convert<std::codecvt_utf8<__int32>, __int32> UTF32Converter;
|
25
|
+
#else
|
26
|
+
typedef std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> UTF32Converter;
|
27
|
+
#endif
|
18
28
|
#endif
|
19
|
-
|
29
|
+
|
20
30
|
// The conversion functions fails in VS2017, so we explicitly use a workaround.
|
21
31
|
template<typename T>
|
22
32
|
inline std::string utf32_to_utf8(T const& data)
|
23
33
|
{
|
24
|
-
|
25
|
-
|
34
|
+
#ifndef USE_UTF8_INSTEAD_OF_CODECVT
|
35
|
+
// Don't make the converter static or we have to serialize access to it.
|
36
|
+
thread_local UTF32Converter converter;
|
26
37
|
|
27
|
-
|
28
|
-
|
29
|
-
|
38
|
+
#if defined(_MSC_VER) && _MSC_VER >= 1900 && _MSC_VER < 2000
|
39
|
+
const auto p = reinterpret_cast<const int32_t *>(data.data());
|
40
|
+
return converter.to_bytes(p, p + data.size());
|
41
|
+
#else
|
42
|
+
return converter.to_bytes(data);
|
43
|
+
#endif
|
30
44
|
#else
|
31
|
-
|
45
|
+
std::string narrow;
|
46
|
+
utf8::utf32to8(data.begin(), data.end(), std::back_inserter(narrow));
|
47
|
+
return narrow;
|
32
48
|
#endif
|
33
49
|
}
|
34
50
|
|
35
51
|
inline UTF32String utf8_to_utf32(const char* first, const char* last)
|
36
52
|
{
|
37
|
-
|
53
|
+
#ifndef USE_UTF8_INSTEAD_OF_CODECVT
|
54
|
+
thread_local UTF32Converter converter;
|
38
55
|
|
39
|
-
|
40
|
-
|
41
|
-
|
56
|
+
#if defined(_MSC_VER) && _MSC_VER >= 1900 && _MSC_VER < 2000
|
57
|
+
auto r = converter.from_bytes(first, last);
|
58
|
+
i32string s = reinterpret_cast<const int32_t *>(r.data());
|
59
|
+
return s;
|
60
|
+
#else
|
61
|
+
std::u32string s = converter.from_bytes(first, last);
|
62
|
+
return s;
|
63
|
+
#endif
|
42
64
|
#else
|
43
|
-
|
65
|
+
UTF32String wide;
|
66
|
+
utf8::utf8to32(first, last, std::back_inserter(wide));
|
67
|
+
return wide;
|
44
68
|
#endif
|
45
|
-
|
46
|
-
return s;
|
47
69
|
}
|
48
70
|
|
49
71
|
void replaceAll(std::string &str, std::string const& from, std::string const& to);
|
@@ -15,15 +15,39 @@ namespace tree {
|
|
15
15
|
static ParseTreeWalker &DEFAULT;
|
16
16
|
|
17
17
|
virtual ~ParseTreeWalker();
|
18
|
-
|
18
|
+
|
19
|
+
/**
|
20
|
+
* <summary>
|
21
|
+
* Performs a walk on the given parse tree starting at the root and going down recursively
|
22
|
+
* with depth-first search. On each node, <seealso cref="ParseTreeWalker#enterRule"/> is called before
|
23
|
+
* recursively walking down into child nodes, then
|
24
|
+
* <seealso cref="ParseTreeWalker#exitRule"/> is called after the recursive call to wind up.
|
25
|
+
* </summary>
|
26
|
+
* <param name='listener'> The listener used by the walker to process grammar rules </param>
|
27
|
+
* <param name='t'> The parse tree to be walked on </param>
|
28
|
+
*/
|
19
29
|
virtual void walk(ParseTreeListener *listener, ParseTree *t) const;
|
20
30
|
|
21
31
|
protected:
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
32
|
+
|
33
|
+
/**
|
34
|
+
* <summary>
|
35
|
+
* Enters a grammar rule by first triggering the generic event <seealso cref="ParseTreeListener#enterEveryRule"/>
|
36
|
+
* then by triggering the event specific to the given parse tree node
|
37
|
+
* </summary>
|
38
|
+
* <param name='listener'> The listener responding to the trigger events </param>
|
39
|
+
* <param name='r'> The grammar rule containing the rule context </param>
|
40
|
+
*/
|
26
41
|
virtual void enterRule(ParseTreeListener *listener, ParseTree *r) const;
|
42
|
+
|
43
|
+
/**
|
44
|
+
* <summary>
|
45
|
+
* Exits a grammar rule by first triggering the event specific to the given parse tree node
|
46
|
+
* then by triggering the generic event <seealso cref="ParseTreeListener#exitEveryRule"/>
|
47
|
+
* </summary>
|
48
|
+
* <param name='listener'> The listener responding to the trigger events </param>
|
49
|
+
* <param name='r'> The grammar rule containing the rule context </param>
|
50
|
+
*/
|
27
51
|
virtual void exitRule(ParseTreeListener *listener, ParseTree *r) const;
|
28
52
|
};
|
29
53
|
|
@@ -192,7 +192,7 @@ std::vector<ParseTree *> Trees::getDescendants(ParseTree *t) {
|
|
192
192
|
std::size_t n = t->children.size();
|
193
193
|
for (size_t i = 0 ; i < n ; i++) {
|
194
194
|
auto descentants = getDescendants(t->children[i]);
|
195
|
-
for (auto entry: descentants) {
|
195
|
+
for (auto *entry: descentants) {
|
196
196
|
nodes.push_back(entry);
|
197
197
|
}
|
198
198
|
}
|
data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePattern.cpp
CHANGED
@@ -37,7 +37,7 @@ std::vector<ParseTreeMatch> ParseTreePattern::findAll(ParseTree *tree, const std
|
|
37
37
|
xpath::XPath finder(_matcher->getParser(), xpath);
|
38
38
|
std::vector<ParseTree *> subtrees = finder.evaluate(tree);
|
39
39
|
std::vector<ParseTreeMatch> matches;
|
40
|
-
for (auto t : subtrees) {
|
40
|
+
for (auto *t : subtrees) {
|
41
41
|
ParseTreeMatch aMatch = match(t);
|
42
42
|
if (aMatch.succeeded()) {
|
43
43
|
matches.push_back(aMatch);
|
@@ -137,7 +137,7 @@ std::vector<ParseTree *> XPath::evaluate(ParseTree *t) {
|
|
137
137
|
|
138
138
|
while (i < elements.size()) {
|
139
139
|
std::vector<ParseTree *> next;
|
140
|
-
for (auto node : work) {
|
140
|
+
for (auto *node : work) {
|
141
141
|
if (!node->children.empty()) {
|
142
142
|
// only try to match next element if it has children
|
143
143
|
// e.g., //func/*/stat might have a token node for which
|
data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathRuleElement.cpp
CHANGED
@@ -18,7 +18,7 @@ XPathRuleElement::XPathRuleElement(const std::string &ruleName, size_t ruleIndex
|
|
18
18
|
std::vector<ParseTree *> XPathRuleElement::evaluate(ParseTree *t) {
|
19
19
|
// return all children of t that match nodeName
|
20
20
|
std::vector<ParseTree *> nodes;
|
21
|
-
for (auto c : t->children) {
|
21
|
+
for (auto *c : t->children) {
|
22
22
|
if (antlrcpp::is<ParserRuleContext *>(c)) {
|
23
23
|
ParserRuleContext *ctx = dynamic_cast<ParserRuleContext *>(c);
|
24
24
|
if ((ctx->getRuleIndex() == _ruleIndex && !_invert) || (ctx->getRuleIndex() != _ruleIndex && _invert)) {
|
data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathTokenElement.cpp
CHANGED
@@ -21,7 +21,7 @@ XPathTokenElement::XPathTokenElement(const std::string &tokenName, size_t tokenT
|
|
21
21
|
std::vector<ParseTree *> XPathTokenElement::evaluate(ParseTree *t) {
|
22
22
|
// return all children of t that match nodeName
|
23
23
|
std::vector<ParseTree *> nodes;
|
24
|
-
for (auto c : t->children) {
|
24
|
+
for (auto *c : t->children) {
|
25
25
|
if (antlrcpp::is<TerminalNode *>(c)) {
|
26
26
|
TerminalNode *tnode = dynamic_cast<TerminalNode *>(c);
|
27
27
|
if ((tnode->getSymbol()->getType() == _tokenType && !_invert) || (tnode->getSymbol()->getType() != _tokenType && _invert)) {
|