Fix resolution of shift-extra vs reduce actions

This commit is contained in:
Max Brunsfeld 2015-12-17 15:19:58 -08:00
parent 351b4f4aaa
commit a8d2585330
2 changed files with 38 additions and 14 deletions

View file

@ -21,9 +21,11 @@ pair<bool, ConflictType> ParseConflictManager::resolve(
return { true, ConflictTypeNone };
case ParseActionTypeShift:
if (new_action.type == ParseActionTypeReduce) {
if (new_action.extra)
return { false, ConflictTypeNone };
if (new_action.extra) {
return {false, ConflictTypeNone};
} else if (old_action.extra) {
return {true, ConflictTypeNone};
} else if (new_action.type == ParseActionTypeReduce) {
int min_precedence = old_action.precedence_range.min;
int max_precedence = old_action.precedence_range.max;
int new_precedence = new_action.precedence_range.max;
@ -48,15 +50,14 @@ pair<bool, ConflictType> ParseConflictManager::resolve(
return { false, ConflictTypeUnresolved };
}
}
break;
case ParseActionTypeReduce:
if (new_action.extra)
return { false, ConflictTypeNone };
if (old_action.extra)
return { true, ConflictTypeNone };
if (new_action.extra)
return { false, ConflictTypeNone };
if (new_action.type == ParseActionTypeReduce) {
if (new_action.extra)
return { false, ConflictTypeNone };
if (old_action.extra)
return { true, ConflictTypeNone };
int old_precedence = old_action.precedence_range.min;
int new_precedence = new_action.precedence_range.min;
if (new_precedence > old_precedence) {