Implementation
RegisterWriteOpArg({required int maxDigit, required this.f})
: super(synonyms: Operations15._letterAndRegisterISynonyms, children: [
KeyArg(
key: Arg.kParenI,
child: ArgDone((m) {
final mi = m.memory.registers.index.asMatrix;
if (mi == null) {
m.memory.registers.indirectIndex =
f(m, m.memory.registers.indirectIndex, m.x);
} else {
// See bottom of page 173
_forMatrix(m as Model15, mi, f);
}
})),
KeyArg(
key: Arg.kI,
child: ArgDone((m) => m.memory.registers.index =
f(m, m.memory.registers.index, m.x))),
DigitArg(
max: maxDigit,
calc: (m, i) =>
m.memory.registers[i] = f(m, m.memory.registers[i], m.x)),
...List.generate(
_letterLabelsList.length,
(i) => KeyArg(
key: _letterLabelsList[i],
child: ArgDone((m) {
_forMatrix(m as Model15, i, f);
}))),
]);