in aws/hhvm1/state-machine/generate.hack [297:344]
function linear_state_machine(
?string $failure_state,
dict<string, State> $states,
): StateMachine {
$names = Vec\keys($states);
foreach ($names as $i => $name) {
$type = $states[$name][F::Type];
if ($type === T::Task) {
$states[$name][F::Resource] ??= Config::ARN[$name];
$states[$name][F::ResultPath] ??= path(P::Results, $name, 'success');
$states[$name][F::Retry] ??= Config::LAMBDA_RETRY_POLICY;
if ($failure_state is nonnull) {
$states[$name][F::Catch] ??= vec[
dict[
'ErrorEquals' => vec['States.ALL'],
'ResultPath' => path(P::Results, $name, 'failure'),
'Next' => $failure_state,
],
];
}
if (idx($states[$name], F::Catch) === vec[]) {
unset($states[$name][F::Catch]);
}
}
if ($type === T::Map || $type === T::Parallel) {
$states[$name][F::ResultPath] ??= path(P::Results, $name);
}
if (
$type !== T::Choice &&
!C\contains_key($states[$name], F::Next) &&
!C\contains_key($states[$name], F::End)
) {
$next = $names[$i+1] ?? null;
if ($next is nonnull) {
$states[$name][F::Next] = $next;
} else {
$states[$name][F::End] = true;
}
}
}
return shape(
'StartAt' => C\first_keyx($states),
'States' => $states,
);
}