Exemple #1
0
        /// <summary>
        /// Lowers array extent values.
        /// </summary>
        private static void Lower(
            RewriterContext context,
            TypeLowering <ArrayType> typeLowering,
            GetArrayExtent value)
        {
            var builder = context.Builder;

            // Create new extent structure based on all dimension entries
            int dimensions = StructureType.GetNumFields(typeLowering[value]);
            var instance   = builder.CreateDynamicStructure(value.Location, dimensions);

            // Insert all dimension values
            for (int i = 0; i < dimensions; ++i)
            {
                instance.Add(builder.CreateGetField(
                                 value.Location,
                                 value.ObjectValue,
                                 new FieldSpan(i + ArrayTypeLowering.DimensionOffset)));
            }

            var newStructure = instance.Seal();

            context.ReplaceAndRemove(value, newStructure);
        }
Exemple #2
0
 /// <summary cref="IValueVisitor.Visit(GetArrayExtent)"/>
 public void Visit(GetArrayExtent value) =>
 throw new InvalidCodeGenerationException();