RegisterWriteOpArg constructor Null safety

RegisterWriteOpArg(
  1. {required int maxDigit,
  2. required Value f(
    1. Model<ProgramOperation> m,
    2. Value reg,
    3. Value x
    )}
)

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);
                }))),
      ]);