GPUB: replace variants with name for predicates

This commit is contained in:
Gregory.Shrago
2016-05-04 21:16:49 +03:00
parent 50b2d3c8bb
commit a0bd5aa11a
@@ -473,6 +473,7 @@ public class GeneratedParserUtilBase {
if (((frame.modifiers & _AND_) | (frame.modifiers & _NOT_)) != 0) {
close_marker_impl_(frame, marker, null, false);
replace_variants_with_name_(state, frame, builder, result, pinned);
state.predicateCount--;
if ((frame.modifiers & _NOT_) != 0) state.predicateSign = !state.predicateSign;
}
@@ -492,11 +493,7 @@ public class GeneratedParserUtilBase {
@Nullable Parser eatMore) {
int initialPos = builder.rawTokenIndex();
boolean willFail = !result && !pinned;
if (willFail && initialPos == frame.position && state.lastExpectedVariantPos == frame.position &&
frame.name != null && state.variants.size() - frame.variantCount > 1) {
state.clearVariants(true, frame.variantCount);
addVariantInner(state, initialPos, frame.name);
}
replace_variants_with_name_(state, frame, builder, result, pinned);
int lastErrorPos = getLastVariantPos(state, initialPos);
if (!state.suppressErrors && eatMore != null) {
state.suppressErrors = true;
@@ -652,6 +649,20 @@ public class GeneratedParserUtilBase {
}
}
private static void replace_variants_with_name_(ErrorState state,
Frame frame,
PsiBuilder builder,
boolean result,
boolean pinned) {
int initialPos = builder.rawTokenIndex();
boolean willFail = !result && !pinned;
if (willFail && initialPos == frame.position && state.lastExpectedVariantPos == frame.position &&
frame.name != null && state.variants.size() - frame.variantCount > 1) {
state.clearVariants(true, frame.variantCount);
addVariantInner(state, initialPos, frame.name);
}
}
public static boolean report_error_(PsiBuilder builder, boolean result) {
if (!result) report_error_(builder, ErrorState.get(builder), false);
return result;