Skip to content

Commit 30ef969

Browse files
authored
Merge pull request #2177 from mike-lischke/threading-fix
Patch for multi-threaded parsing with the C++ runtime
2 parents 7a2b95a + ceb4ca7 commit 30ef969

File tree

12 files changed

+57
-38
lines changed

12 files changed

+57
-38
lines changed

runtime/Cpp/demo/Mac/antlrcpp-demo.xcodeproj/project.pbxproj

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -250,8 +250,8 @@
250250
37D727A21867AF1E007B6D10 /* Project object */ = {
251251
isa = PBXProject;
252252
attributes = {
253-
LastUpgradeCheck = 0800;
254-
ORGANIZATIONNAME = "Dan McLaughlin";
253+
LastUpgradeCheck = 0920;
254+
ORGANIZATIONNAME = "ANTLR4 Project";
255255
TargetAttributes = {
256256
27C66A661C9591280021E494 = {
257257
CreatedOnToolsVersion = 7.2.1;
@@ -415,14 +415,20 @@
415415
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
416416
CLANG_CXX_LIBRARY = "libc++";
417417
CLANG_ENABLE_OBJC_ARC = YES;
418+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
418419
CLANG_WARN_BOOL_CONVERSION = YES;
420+
CLANG_WARN_COMMA = YES;
419421
CLANG_WARN_CONSTANT_CONVERSION = YES;
420422
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
421423
CLANG_WARN_EMPTY_BODY = YES;
422424
CLANG_WARN_ENUM_CONVERSION = YES;
423425
CLANG_WARN_INFINITE_RECURSION = YES;
424426
CLANG_WARN_INT_CONVERSION = YES;
427+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
428+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
425429
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
430+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
431+
CLANG_WARN_STRICT_PROTOTYPES = YES;
426432
CLANG_WARN_SUSPICIOUS_MOVE = YES;
427433
CLANG_WARN_UNREACHABLE_CODE = YES;
428434
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
@@ -469,14 +475,20 @@
469475
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
470476
CLANG_CXX_LIBRARY = "libc++";
471477
CLANG_ENABLE_OBJC_ARC = YES;
478+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
472479
CLANG_WARN_BOOL_CONVERSION = YES;
480+
CLANG_WARN_COMMA = YES;
473481
CLANG_WARN_CONSTANT_CONVERSION = YES;
474482
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
475483
CLANG_WARN_EMPTY_BODY = YES;
476484
CLANG_WARN_ENUM_CONVERSION = YES;
477485
CLANG_WARN_INFINITE_RECURSION = YES;
478486
CLANG_WARN_INT_CONVERSION = YES;
487+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
488+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
479489
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
490+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
491+
CLANG_WARN_STRICT_PROTOTYPES = YES;
480492
CLANG_WARN_SUSPICIOUS_MOVE = YES;
481493
CLANG_WARN_UNREACHABLE_CODE = YES;
482494
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;

runtime/Cpp/demo/Mac/antlrcpp-demo.xcodeproj/xcshareddata/xcschemes/antlr4-cpp-demo.xcscheme

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "0800"
3+
LastUpgradeVersion = "0920"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"
@@ -26,6 +26,7 @@
2626
buildConfiguration = "Debug"
2727
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
2828
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29+
language = ""
2930
shouldUseLaunchSchemeArgsEnv = "YES"
3031
codeCoverageEnabled = "YES">
3132
<Testables>
@@ -56,6 +57,7 @@
5657
buildConfiguration = "Debug"
5758
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
5859
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
60+
language = ""
5961
launchStyle = "0"
6062
useCustomWorkingDirectory = "NO"
6163
ignoresPersistentStateOnLaunch = "NO"

runtime/Cpp/demo/Mac/antlrcpp-demo.xcodeproj/xcshareddata/xcschemes/antlrcpp Tests.xcscheme

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "0800"
3+
LastUpgradeVersion = "0920"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"
@@ -10,6 +10,7 @@
1010
buildConfiguration = "Debug"
1111
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
1212
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
13+
language = ""
1314
shouldUseLaunchSchemeArgsEnv = "YES">
1415
<Testables>
1516
<TestableReference
@@ -30,6 +31,7 @@
3031
buildConfiguration = "Debug"
3132
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
3233
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
34+
language = ""
3335
launchStyle = "0"
3436
useCustomWorkingDirectory = "NO"
3537
ignoresPersistentStateOnLaunch = "NO"

runtime/Cpp/runtime/antlrcpp.xcodeproj/project.pbxproj

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1191,8 +1191,6 @@
11911191
27745EFB1CE49C000067C6A3 /* RuntimeMetaData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RuntimeMetaData.cpp; sourceTree = "<group>"; wrapsLines = 0; };
11921192
27745EFC1CE49C000067C6A3 /* RuntimeMetaData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RuntimeMetaData.h; sourceTree = "<group>"; };
11931193
27874F1D1CCB7A0700AF1C53 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; };
1194-
278E313E1D9D6534001C28F9 /* Tests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Tests.m; sourceTree = "<group>"; };
1195-
278E31401D9D6534001C28F9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
11961194
2793DC841F08083F00A84290 /* TokenSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TokenSource.cpp; sourceTree = "<group>"; };
11971195
2793DC881F08087500A84290 /* Chunk.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Chunk.cpp; sourceTree = "<group>"; };
11981196
2793DC8C1F08088F00A84290 /* ParseTreeListener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ParseTreeListener.cpp; sourceTree = "<group>"; };
@@ -1626,15 +1624,6 @@
16261624
name = "Linked Frameworks";
16271625
sourceTree = "<group>";
16281626
};
1629-
278E313D1D9D6534001C28F9 /* Tests */ = {
1630-
isa = PBXGroup;
1631-
children = (
1632-
278E313E1D9D6534001C28F9 /* Tests.m */,
1633-
278E31401D9D6534001C28F9 /* Info.plist */,
1634-
);
1635-
path = Tests;
1636-
sourceTree = "<group>";
1637-
};
16381627
27DB448A1D045537007E790B /* xpath */ = {
16391628
isa = PBXGroup;
16401629
children = (
@@ -1667,7 +1656,6 @@
16671656
children = (
16681657
270C67F11CDB4F1E00116E17 /* antlrcpp-ios */,
16691658
27874F221CCBB34200AF1C53 /* Linked Frameworks */,
1670-
278E313D1D9D6534001C28F9 /* Tests */,
16711659
37D727AB1867AF1E007B6D10 /* Products */,
16721660
276E5C0A1CDB57AA003FF4B4 /* runtime */,
16731661
);
@@ -2238,7 +2226,7 @@
22382226
37D727A21867AF1E007B6D10 /* Project object */ = {
22392227
isa = PBXProject;
22402228
attributes = {
2241-
LastUpgradeCheck = 0800;
2229+
LastUpgradeCheck = 0910;
22422230
ORGANIZATIONNAME = ANTLR;
22432231
TargetAttributes = {
22442232
270C67EF1CDB4F1E00116E17 = {
@@ -2855,14 +2843,18 @@
28552843
CLANG_CXX_LIBRARY = "libc++";
28562844
CLANG_ENABLE_OBJC_ARC = YES;
28572845
CLANG_WARN_ASSIGN_ENUM = YES;
2846+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
28582847
CLANG_WARN_BOOL_CONVERSION = YES;
2848+
CLANG_WARN_COMMA = YES;
28592849
CLANG_WARN_CONSTANT_CONVERSION = YES;
28602850
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
28612851
CLANG_WARN_EMPTY_BODY = YES;
28622852
CLANG_WARN_ENUM_CONVERSION = YES;
28632853
CLANG_WARN_INFINITE_RECURSION = YES;
28642854
CLANG_WARN_INT_CONVERSION = YES;
28652855
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
2856+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
2857+
CLANG_WARN_STRICT_PROTOTYPES = YES;
28662858
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
28672859
CLANG_WARN_SUSPICIOUS_MOVE = YES;
28682860
CLANG_WARN_UNREACHABLE_CODE = YES;
@@ -2908,14 +2900,18 @@
29082900
CLANG_CXX_LIBRARY = "libc++";
29092901
CLANG_ENABLE_OBJC_ARC = YES;
29102902
CLANG_WARN_ASSIGN_ENUM = YES;
2903+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
29112904
CLANG_WARN_BOOL_CONVERSION = YES;
2905+
CLANG_WARN_COMMA = YES;
29122906
CLANG_WARN_CONSTANT_CONVERSION = YES;
29132907
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
29142908
CLANG_WARN_EMPTY_BODY = YES;
29152909
CLANG_WARN_ENUM_CONVERSION = YES;
29162910
CLANG_WARN_INFINITE_RECURSION = YES;
29172911
CLANG_WARN_INT_CONVERSION = YES;
29182912
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
2913+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
2914+
CLANG_WARN_STRICT_PROTOTYPES = YES;
29192915
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
29202916
CLANG_WARN_SUSPICIOUS_MOVE = YES;
29212917
CLANG_WARN_UNREACHABLE_CODE = YES;

runtime/Cpp/runtime/antlrcpp.xcodeproj/xcshareddata/xcschemes/antlr4.xcscheme

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "0800"
3+
LastUpgradeVersion = "0910"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"
@@ -26,6 +26,7 @@
2626
buildConfiguration = "Debug"
2727
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
2828
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29+
language = ""
2930
shouldUseLaunchSchemeArgsEnv = "YES">
3031
<Testables>
3132
</Testables>
@@ -36,6 +37,7 @@
3637
buildConfiguration = "Debug"
3738
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
3839
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
40+
language = ""
3941
launchStyle = "0"
4042
useCustomWorkingDirectory = "NO"
4143
ignoresPersistentStateOnLaunch = "NO"

runtime/Cpp/runtime/antlrcpp.xcodeproj/xcshareddata/xcschemes/antlr4_ios.xcscheme

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "0800"
3+
LastUpgradeVersion = "0920"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"
@@ -26,6 +26,7 @@
2626
buildConfiguration = "Debug"
2727
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
2828
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29+
language = ""
2930
shouldUseLaunchSchemeArgsEnv = "YES">
3031
<Testables>
3132
</Testables>
@@ -36,6 +37,7 @@
3637
buildConfiguration = "Debug"
3738
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
3839
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
40+
language = ""
3941
launchStyle = "0"
4042
useCustomWorkingDirectory = "NO"
4143
ignoresPersistentStateOnLaunch = "NO"

runtime/Cpp/runtime/antlrcpp.xcodeproj/xcshareddata/xcschemes/antlr4_static.xcscheme

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "0800"
3+
LastUpgradeVersion = "0920"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"
@@ -26,6 +26,7 @@
2626
buildConfiguration = "Debug"
2727
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
2828
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29+
language = ""
2930
shouldUseLaunchSchemeArgsEnv = "YES">
3031
<Testables>
3132
</Testables>
@@ -36,6 +37,7 @@
3637
buildConfiguration = "Debug"
3738
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
3839
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
40+
language = ""
3941
launchStyle = "0"
4042
useCustomWorkingDirectory = "NO"
4143
ignoresPersistentStateOnLaunch = "NO"

runtime/Cpp/runtime/src/atn/ATNState.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ void ATNState::addTransition(size_t index, Transition *e) {
6666
}
6767

6868
Transition *ATNState::removeTransition(size_t index) {
69+
Transition *result = transitions[index];
6970
transitions.erase(transitions.begin() + index);
70-
return nullptr;
71+
return result;
7172
}

runtime/Cpp/runtime/src/atn/LexerATNSimulator.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
1+
/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
22
* Use of this file is governed by the BSD 3-clause license that
33
* can be found in the LICENSE.txt file in the project root.
44
*/
@@ -99,7 +99,7 @@ void LexerATNSimulator::clearDFA() {
9999
size_t size = _decisionToDFA.size();
100100
_decisionToDFA.clear();
101101
for (size_t d = 0; d < size; ++d) {
102-
_decisionToDFA.push_back(dfa::DFA(atn.getDecisionState(d), d));
102+
_decisionToDFA.emplace_back(atn.getDecisionState(d), d);
103103
}
104104
}
105105

@@ -192,7 +192,7 @@ dfa::DFAState *LexerATNSimulator::getExistingTargetState(dfa::DFAState *s, size_
192192
#endif
193193

194194
if (iterator != s->edges.end())
195-
retval = iterator->second;
195+
retval = iterator->second;
196196
}
197197
_edgeLock.readUnlock();
198198
return retval;

runtime/Cpp/runtime/src/atn/ParserATNSimulator.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
1+
/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
22
* Use of this file is governed by the BSD 3-clause license that
33
* can be found in the LICENSE.txt file in the project root.
44
*/
@@ -127,8 +127,10 @@ size_t ParserATNSimulator::adaptivePredict(TokenStream *input, size_t decision,
127127
dfa::DFAState *newState = new dfa::DFAState(std::move(s0_closure)); /* mem-check: managed by the DFA or deleted below */
128128
s0 = addDFAState(dfa, newState);
129129

130-
delete dfa.s0; // Delete existing s0 DFA state, if there's any.
131-
dfa.s0 = s0;
130+
if (dfa.s0 != s0) {
131+
delete dfa.s0; // Delete existing s0 DFA state, if there's any.
132+
dfa.s0 = s0;
133+
}
132134
if (s0 != newState) {
133135
delete newState; // If there was already a state with this config set we don't need the new one.
134136
}

0 commit comments

Comments
 (0)