forked from jasder/antlr
cleanup, simplify array ctx equals
This commit is contained in:
parent
43424cd5df
commit
8695210903
|
@ -160,15 +160,8 @@ public class ArrayPredictionContext extends PredictionContext {
|
|||
}
|
||||
|
||||
ArrayPredictionContext a = (ArrayPredictionContext)o;
|
||||
if ( invokingStates.length != a.invokingStates.length ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (int i=0; i< invokingStates.length; i++) {
|
||||
if ( invokingStates[i]!=a.invokingStates[i] ) return false;
|
||||
if ( !parents[i].equals(a.parents[i]) ) return false;
|
||||
}
|
||||
return true;
|
||||
return Arrays.equals(invokingStates, a.invokingStates) &&
|
||||
Arrays.equals(parents, a.parents);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -204,23 +204,29 @@ public abstract class PredictionContext implements Iterable<SingletonPredictionC
|
|||
boolean rootIsWildcard)
|
||||
{
|
||||
if ( a.equals(b) ) return a; // share same graph if both same
|
||||
|
||||
if ( a instanceof SingletonPredictionContext && b instanceof SingletonPredictionContext) {
|
||||
return mergeSingletons((SingletonPredictionContext)a,
|
||||
(SingletonPredictionContext)b, rootIsWildcard);
|
||||
(SingletonPredictionContext)b,
|
||||
rootIsWildcard);
|
||||
}
|
||||
// at least one of a or b is array; convert one so both are arrays
|
||||
// unless one is $ and rootIsWildcard, which means we return $ as * wildcard
|
||||
|
||||
// At least one of a or b is array
|
||||
// If one is $ and rootIsWildcard, return $ as * wildcard
|
||||
if ( rootIsWildcard ) {
|
||||
if ( a instanceof EmptyPredictionContext ) return a;
|
||||
if ( b instanceof EmptyPredictionContext ) return b;
|
||||
}
|
||||
|
||||
// convert singleton so both are arrays to normalize
|
||||
if ( a instanceof SingletonPredictionContext ) {
|
||||
a = new ArrayPredictionContext((SingletonPredictionContext)a);
|
||||
}
|
||||
if ( b instanceof SingletonPredictionContext) {
|
||||
b = new ArrayPredictionContext((SingletonPredictionContext)b);
|
||||
}
|
||||
return mergeArrays((ArrayPredictionContext)a, (ArrayPredictionContext)b, rootIsWildcard);
|
||||
return mergeArrays((ArrayPredictionContext)a, (ArrayPredictionContext)b,
|
||||
rootIsWildcard);
|
||||
}
|
||||
|
||||
// http://www.antlr.org/wiki/download/attachments/32014352/singleton-merge.png
|
||||
|
|
Loading…
Reference in New Issue