internal void ComputeStaticFieldLayout(StaticLayoutKind layoutKind) { if (_fieldLayoutFlags.HasFlags(FieldLayoutFlags.ComputedStaticFieldsLayout | FieldLayoutFlags.ComputedStaticRegionLayout)) { return; } var computedStaticLayout = this.Context.GetLayoutAlgorithmForType(this).ComputeStaticFieldLayout(this, layoutKind); if ((computedStaticLayout.NonGcStatics.Size != 0) || (computedStaticLayout.GcStatics.Size != 0) || (computedStaticLayout.ThreadStatics.Size != 0)) { var staticBlockInfo = new StaticBlockInfo { NonGcStatics = computedStaticLayout.NonGcStatics, GcStatics = computedStaticLayout.GcStatics, ThreadStatics = computedStaticLayout.ThreadStatics }; _staticBlockInfo = staticBlockInfo; } if (computedStaticLayout.Offsets != null) { foreach (var fieldAndOffset in computedStaticLayout.Offsets) { Debug.Assert(fieldAndOffset.Field.OwningType == this); fieldAndOffset.Field.InitializeOffset(fieldAndOffset.Offset); } _fieldLayoutFlags.AddFlags(FieldLayoutFlags.ComputedStaticFieldsLayout); } _fieldLayoutFlags.AddFlags(FieldLayoutFlags.ComputedStaticRegionLayout); }
internal void ComputeStaticFieldLayout() { var computedStaticLayout = this.Context.GetLayoutAlgorithmForType(this).ComputeStaticFieldLayout(this); if (computedStaticLayout.Offsets != null) { Debug.Assert(computedStaticLayout.Offsets.Length > 0); var staticBlockInfo = new StaticBlockInfo { NonGcStatics = computedStaticLayout.NonGcStatics, GcStatics = computedStaticLayout.GcStatics, ThreadStatics = computedStaticLayout.ThreadStatics }; _staticBlockInfo = staticBlockInfo; foreach (var fieldAndOffset in computedStaticLayout.Offsets) { Debug.Assert(fieldAndOffset.Field.OwningType == this); fieldAndOffset.Field.InitializeOffset(fieldAndOffset.Offset); } } _fieldLayoutFlags.AddFlags(FieldLayoutFlags.ComputedStaticFieldLayout); }
internal void ComputeStaticFieldLayout() { var computedStaticLayout = this.Context.GetLayoutAlgorithmForType(this).ComputeStaticFieldLayout(this); if (computedStaticLayout.Offsets != null) { Debug.Assert(computedStaticLayout.Offsets.Length > 0); var staticBlockInfo = new StaticBlockInfo { NonGcStatics = computedStaticLayout.NonGcStatics, GcStatics = computedStaticLayout.GcStatics, ThreadStatics = computedStaticLayout.ThreadStatics }; _staticBlockInfo = staticBlockInfo; foreach (var fieldAndOffset in computedStaticLayout.Offsets) { Debug.Assert(fieldAndOffset.Field.OwningType == this); fieldAndOffset.Field.InitializeOffset(fieldAndOffset.Offset); } } _fieldLayoutFlags.AddFlags(FieldLayoutFlags.HasStaticFieldLayout); }
internal void ComputeStaticFieldLayout(StaticLayoutKind layoutKind) { if (_fieldLayoutFlags.HasFlags(FieldLayoutFlags.ComputedStaticFieldsLayout | FieldLayoutFlags.ComputedStaticRegionLayout)) return; var computedStaticLayout = this.Context.GetLayoutAlgorithmForType(this).ComputeStaticFieldLayout(this, layoutKind); if ((computedStaticLayout.NonGcStatics.Size != 0) || (computedStaticLayout.GcStatics.Size != 0) || (computedStaticLayout.ThreadStatics.Size != 0)) { var staticBlockInfo = new StaticBlockInfo { NonGcStatics = computedStaticLayout.NonGcStatics, GcStatics = computedStaticLayout.GcStatics, ThreadStatics = computedStaticLayout.ThreadStatics }; _staticBlockInfo = staticBlockInfo; } if (computedStaticLayout.Offsets != null) { foreach (var fieldAndOffset in computedStaticLayout.Offsets) { Debug.Assert(fieldAndOffset.Field.OwningType == this); fieldAndOffset.Field.InitializeOffset(fieldAndOffset.Offset); } _fieldLayoutFlags.AddFlags(FieldLayoutFlags.ComputedStaticFieldsLayout); } _fieldLayoutFlags.AddFlags(FieldLayoutFlags.ComputedStaticRegionLayout); }