storeValue method

void storeValue(
  1. Value? lhs,
  2. Value? value
)

Implementation

void storeValue(Value? lhs, Value? value) {
  if (lhs is ValTemp) {
    setTemp(lhs.tempNum, value);
  } else if (lhs is ValVar) {
    setVar(lhs.identifier, value);
  } else if (lhs is ValSeqElem) {
    final seq = lhs.sequence!.val(this);
    if (seq == null) {
      throw RuntimeException("can't set indexed element of null");
    }
    if (!seq.canSetElem()) {
      throw RuntimeException("can't set indexed element in this type");
    }
    var index = lhs.index;
    if (index is ValVar || index is ValSeqElem || index is ValTemp) {
      index = index!.val(this);
    }
    seq.setElem(index, value);
  } else if (lhs != null) {
    throw RuntimeException("not an lvalue");
  }
}