/// <summary> /// Emits a new compound-register store operation. /// </summary> /// <param name="value">The source value.</param> /// <param name="index">The child index to update.</param> /// <param name="valueToStore">The value to store.</param> private void MakeCompoundRegisterStore( ObjectOperationValue value, int index, Value valueToStore) { var source = LoadAs <CompoundRegister>(value.ObjectValue); var storeValue = Load(valueToStore); var targetChildren = source.Children.SetItem(index, storeValue); var targetRegister = CompoundRegister.NewRegister(source, targetChildren); Bind(value, targetRegister); }
/// <summary> /// Creates a new compound-register instance. /// </summary> /// <param name="source">The source register.</param> /// <param name="registers">The updated child registers.</param> /// <returns>The created compound register.</returns> public static CompoundRegister NewRegister( CompoundRegister source, ImmutableArray<Register> registers) { switch (source) { case StructureRegister structureRegister: return new StructureRegister( structureRegister.StructureType, registers); case ArrayRegister arrayRegister: return new ArrayRegister( arrayRegister.ArrayType, registers); default: throw new InvalidCodeGenerationException(); } }