Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 9 additions & 10 deletions runtime/Java/src/org/antlr/v4/runtime/atn/LexerATNSimulator.java
Original file line number Diff line number Diff line change
Expand Up @@ -687,18 +687,17 @@ protected DFAState addDFAState(ATNConfigSet configs) {
}

DFA dfa = decisionToDFA[mode];
synchronized (dfa.states) {
DFAState existing = dfa.states.get(proposed);
if ( existing!=null ) return existing;

DFAState newState = proposed;
DFAState existing = dfa.states.get(proposed);
if ( existing!=null ) return existing;

newState.stateNumber = dfa.states.size();
configs.setReadonly(true);
newState.configs = configs;
dfa.states.put(newState, newState);
return newState;
}
DFAState newState = proposed;

newState.stateNumber = dfa.states.size();
configs.setReadonly(true);
newState.configs = configs;
dfa.states.put(newState, newState);
return newState;
}


Expand Down
28 changes: 13 additions & 15 deletions runtime/Java/src/org/antlr/v4/runtime/atn/ParserATNSimulator.java
Original file line number Diff line number Diff line change
Expand Up @@ -2101,26 +2101,24 @@ protected DFAState addDFAState(DFA dfa, DFAState D) {
return D;
}

synchronized (dfa.states) {
DFAState existing = dfa.states.get(D);
DFAState existing = dfa.states.get(D);

if ( existing!=null ) {
if ( trace_atn_sim ) System.out.println("addDFAState " + D + " exists");
return existing;
}
if ( existing!=null ) {
if ( trace_atn_sim ) System.out.println("addDFAState " + D + " exists");
return existing;
}

D.stateNumber = dfa.states.size();
D.stateNumber = dfa.states.size();

if (!D.configs.isReadonly()) {
D.configs.optimizeConfigs(this);
D.configs.setReadonly(true);
}
if (!D.configs.isReadonly()) {
D.configs.optimizeConfigs(this);
D.configs.setReadonly(true);
}

if ( trace_atn_sim ) System.out.println("addDFAState new "+D);
if ( trace_atn_sim ) System.out.println("addDFAState new "+D);

dfa.states.put(D, D);
return D;
}
dfa.states.put(D, D);
return D;
}

protected void reportAttemptingFullContext(DFA dfa, BitSet conflictingAlts, ATNConfigSet configs, int startIndex, int stopIndex) {
Expand Down
4 changes: 2 additions & 2 deletions runtime/Java/src/org/antlr/v4/runtime/dfa/DFA.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,17 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

public class DFA {
/** A set of all DFA states. Use {@link Map} so we can get old state back
* ({@link Set} only allows you to see if it's there).
*/

public final Map<DFAState, DFAState> states = new HashMap<DFAState, DFAState>();
public final Map<DFAState, DFAState> states = new ConcurrentHashMap<>();

public volatile DFAState s0;

Expand Down
Loading