diff --git a/contributors.txt b/contributors.txt index 8ffda95f7b..ac8c193d94 100644 --- a/contributors.txt +++ b/contributors.txt @@ -317,4 +317,4 @@ YYYY/MM/DD, github id, Full name, email 2021/09/08, jmcken8, Joel McKenzie, joel.b.mckenzie@gmail.com 2021/09/23, skalt, Steven Kalt, kalt.steven@gmail.com 2021/10/10, tools4origins, Erwan Guyomarc'h, contact@erwan-guyomarch.fr -2021/10/25, jcking, Justin King, jcking@google.com \ No newline at end of file +2021/10/19, jcking, Justin King, jcking@google.com \ No newline at end of file diff --git a/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.cpp b/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.cpp index a406c4e135..d070cd9d61 100755 --- a/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.cpp +++ b/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.cpp @@ -7,7 +7,7 @@ using namespace antlr4::atn; -ATNDeserializationOptions ATNDeserializationOptions::defaultOptions; +const ATNDeserializationOptions ATNDeserializationOptions::defaultOptions; ATNDeserializationOptions::ATNDeserializationOptions() { InitializeInstanceFields(); diff --git a/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.h b/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.h index 66aa37da5f..f03bdb39ad 100755 --- a/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.h +++ b/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.h @@ -12,7 +12,7 @@ namespace atn { class ANTLR4CPP_PUBLIC ATNDeserializationOptions { private: - static ATNDeserializationOptions defaultOptions; + static const ATNDeserializationOptions defaultOptions; bool readOnly; bool verifyATN; diff --git a/runtime/Cpp/runtime/src/atn/LexerATNSimulator.cpp b/runtime/Cpp/runtime/src/atn/LexerATNSimulator.cpp index 827c3d59f1..381351a95a 100755 --- a/runtime/Cpp/runtime/src/atn/LexerATNSimulator.cpp +++ b/runtime/Cpp/runtime/src/atn/LexerATNSimulator.cpp @@ -47,7 +47,7 @@ void LexerATNSimulator::SimState::InitializeInstanceFields() { charPos = INVALID_INDEX; } -int LexerATNSimulator::match_calls = 0; +std::atomic LexerATNSimulator::match_calls(0); LexerATNSimulator::LexerATNSimulator(const ATN &atn, std::vector &decisionToDFA, @@ -69,7 +69,7 @@ void LexerATNSimulator::copyState(LexerATNSimulator *simulator) { } size_t LexerATNSimulator::match(CharStream *input, size_t mode) { - match_calls++; + match_calls.fetch_add(1, std::memory_order_relaxed); _mode = mode; ssize_t mark = input->mark(); diff --git a/runtime/Cpp/runtime/src/atn/LexerATNSimulator.h b/runtime/Cpp/runtime/src/atn/LexerATNSimulator.h index c050d516c0..cfe2d913be 100755 --- a/runtime/Cpp/runtime/src/atn/LexerATNSimulator.h +++ b/runtime/Cpp/runtime/src/atn/LexerATNSimulator.h @@ -5,6 +5,8 @@ #pragma once +#include + #include "atn/ATNSimulator.h" #include "atn/LexerATNConfig.h" #include "atn/ATNConfigSet.h" @@ -89,7 +91,7 @@ namespace atn { SimState _prevAccept; public: - static int match_calls; + static std::atomic match_calls; LexerATNSimulator(const ATN &atn, std::vector &decisionToDFA, PredictionContextCache &sharedContextCache); LexerATNSimulator(Lexer *recog, const ATN &atn, std::vector &decisionToDFA, PredictionContextCache &sharedContextCache); diff --git a/runtime/Cpp/runtime/src/atn/PredictionContext.cpp b/runtime/Cpp/runtime/src/atn/PredictionContext.cpp index 860a18056d..126d403fe4 100755 --- a/runtime/Cpp/runtime/src/atn/PredictionContext.cpp +++ b/runtime/Cpp/runtime/src/atn/PredictionContext.cpp @@ -20,12 +20,12 @@ using namespace antlr4::atn; using namespace antlrcpp; -size_t PredictionContext::globalNodeCount = 0; +std::atomic PredictionContext::globalNodeCount(0); const Ref PredictionContext::EMPTY = std::make_shared(); //----------------- PredictionContext ---------------------------------------------------------------------------------- -PredictionContext::PredictionContext(size_t cachedHashCode) : id(globalNodeCount++), cachedHashCode(cachedHashCode) { +PredictionContext::PredictionContext(size_t cachedHashCode) : id(globalNodeCount.fetch_add(1, std::memory_order_relaxed)), cachedHashCode(cachedHashCode) { } PredictionContext::~PredictionContext() { diff --git a/runtime/Cpp/runtime/src/atn/PredictionContext.h b/runtime/Cpp/runtime/src/atn/PredictionContext.h index e8dfc23f77..887c53ba50 100755 --- a/runtime/Cpp/runtime/src/atn/PredictionContext.h +++ b/runtime/Cpp/runtime/src/atn/PredictionContext.h @@ -5,6 +5,8 @@ #pragma once +#include + #include "Recognizer.h" #include "atn/ATN.h" #include "atn/ATNState.h" @@ -48,7 +50,7 @@ namespace atn { #endif public: - static size_t globalNodeCount; + static std::atomic globalNodeCount; const size_t id; ///