Miscellaneous tuple simplifications (#857)

- Drop unnecessary special-casing of 0-tuples.
- Drop unused constructor.
This commit is contained in:
Geoff Romer
2021-09-27 12:10:16 -07:00
committed by GitHub
parent 5aa958345b
commit 532948d9a5
3 changed files with 5 additions and 44 deletions
@@ -413,14 +413,8 @@ auto Interpreter::StepLvalue() -> Transition {
}
}
case Expression::Kind::TupleLiteral: {
if (act->Pos() == 0) {
// { {(f1=e1,...) :: C, E, F} :: S, H}
// -> { {e1 :: (f1=[],...) :: C, E, F} :: S, H}
Nonnull<const Expression*> e1 =
cast<TupleLiteral>(*exp).Fields()[0].expression;
return Spawn{arena->New<LValAction>(e1)};
} else if (act->Pos() !=
static_cast<int>(cast<TupleLiteral>(*exp).Fields().size())) {
if (act->Pos() <
static_cast<int>(cast<TupleLiteral>(*exp).Fields().size())) {
// { { vk :: (f1=v1,..., fk=[],fk+1=ek+1,...) :: C, E, F} :: S,
// H}
// -> { { ek+1 :: (f1=v1,..., fk=vk, fk+1=[],...) :: C, E, F} :: S,
@@ -485,18 +479,8 @@ auto Interpreter::StepExp() -> Transition {
}
}
case Expression::Kind::TupleLiteral: {
if (act->Pos() == 0) {
if (cast<TupleLiteral>(*exp).Fields().size() > 0) {
// { {(f1=e1,...) :: C, E, F} :: S, H}
// -> { {e1 :: (f1=[],...) :: C, E, F} :: S, H}
Nonnull<const Expression*> e1 =
cast<TupleLiteral>(*exp).Fields()[0].expression;
return Spawn{arena->New<ExpressionAction>(e1)};
} else {
return Done{CreateTuple(act, exp)};
}
} else if (act->Pos() !=
static_cast<int>(cast<TupleLiteral>(*exp).Fields().size())) {
if (act->Pos() <
static_cast<int>(cast<TupleLiteral>(*exp).Fields().size())) {
// { { vk :: (f1=v1,..., fk=[],fk+1=ek+1,...) :: C, E, F} :: S,
// H}
// -> { { ek+1 :: (f1=v1,..., fk=vk, fk+1=[],...) :: C, E, F} :: S,
@@ -672,14 +656,7 @@ auto Interpreter::StepPattern() -> Transition {
}
case Pattern::Kind::TuplePattern: {
const auto& tuple = cast<TuplePattern>(*pattern);
if (act->Pos() == 0) {
if (tuple.Fields().empty()) {
return Done{TupleValue::Empty()};
} else {
Nonnull<const Pattern*> p1 = tuple.Fields()[0].pattern;
return Spawn{(arena->New<PatternAction>(p1))};
}
} else if (act->Pos() != static_cast<int>(tuple.Fields().size())) {
if (act->Pos() < static_cast<int>(tuple.Fields().size())) {
// { { vk :: (f1=v1,..., fk=[],fk+1=ek+1,...) :: C, E, F} :: S,
// H}
// -> { { ek+1 :: (f1=v1,..., fk=vk, fk+1=[],...) :: C, E, F} :: S,