/// <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); }
/// <summary cref="IValueVisitor.Visit(GetArrayExtent)"/> public void Visit(GetArrayExtent value) => throw new InvalidCodeGenerationException();