Пример #1
0
        /// <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);
        }
Пример #2
0
 /// <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();
     }
 }