/// <summary cref="IValueVisitor.Visit(GetViewLength)"/> public void Visit(GetViewLength value) { var target = Allocate(value); var viewSource = LoadView(value.View); using (var statement = BeginStatement(target)) { statement.Append(viewSource); statement.AppendField(viewSource.LengthFieldIndex); } }
/// <summary> /// Lowers set field operations into separate SSA values. /// </summary> private static void Lower( RewriterContext context, TypeLowering <ViewType> _, GetViewLength value) { var length = context.Builder.CreateGetField( value.Location, value.View, new FieldSpan(1)); context.ReplaceAndRemove(value, length); }
/// <summary> /// Lowers set field operations into separate SSA values. /// </summary> private static void Lower( RewriterContext context, TypeLowering <ViewType> _, GetViewLength value) { var builder = context.Builder; var length = builder.CreateGetField( value.Location, value.View, new FieldSpan(1)); // Convert to a 32bit length value if (value.Is32BitProperty) { length = builder.CreateConvertToInt32( value.Location, length); } context.ReplaceAndRemove(value, length); }
/// <summary> /// Converts a new get length node into an SSA value. /// </summary> private static void Convert <TConstructionData>( SSARewriterContext <Value> context, TConstructionData data, GetViewLength getViewLength) where TConstructionData : IConstructionData { if (!data.TryGetConverted(getViewLength.View, out var getRef)) { return; } // Get the SSA structure value var ssaValue = context.GetValue(context.Block, getRef.Source); // Get the view length from the first field (index 0) of the wrapped // array structure ssaValue = context.Builder.CreateGetField( getViewLength.Location, ssaValue, new FieldSpan(new FieldAccess(0))); context.ReplaceAndRemove(getViewLength, ssaValue); }
public void Visit(GetViewLength value) { }
/// <summary cref="IValueVisitor.Visit(GetViewLength)"/> public void Visit(GetViewLength value) => throw new InvalidCodeGenerationException();
/// <summary cref="IValueVisitor.Visit(GetViewLength)"/> public void Visit(GetViewLength value) { var viewSource = LoadAs <ViewImplementationRegister>(value.View); Bind(value, viewSource.Length); }
/// <summary cref="IValueVisitor.Visit(GetViewLength)"/> public void Visit(GetViewLength value) { var viewSource = LoadAs <ViewVariable>(value.View); Bind(value, viewSource.Length); }