public void VisitStore2(StoreStaticField store) { if (store.Untyped.Previous.OpCode.Code != Code.Ldnull) { Unused.Value = m_fields.Remove(store.Field.Name); } }
public void VisitStoreStaticField(StoreStaticField store) { if (m_offset < 0 && store.Index > 0) { StoreStaticField prev = m_info.Instructions[store.Index - 1] as StoreStaticField; if (prev != null && prev.Field.Name == store.Field.Name) { m_offset = store.Untyped.Offset; Log.DebugLine(this, "Matched at {0:X2}", m_offset); } } }
public void VisitStoreStatic(StoreStaticField store) { if (m_wasStatic && !m_setsState) { if (store.Field.DeclaringType.MetadataToken == m_info.Type.MetadataToken) { if (!DoAtomicField(store.Field) || !DoVolatileStore(store)) { Log.DebugLine(this, "found store at {0:X2}", store.Untyped.Offset); m_setsState = true; } } } }
public void VisitStoreStaticField(StoreStaticField store) { if (m_needsCheck) { Log.Indent(); LoadArg load = m_info.Instructions[store.Index - 1] as LoadArg; if (load != null && m_types[load.Arg] != null) { TypeReference type = store.Field.FieldType; DoUseArg(load.Arg, store.Untyped.Offset, type); } Log.Unindent(); } }
// Find the following in the count instructions starting at index: // newobj xxx // stsfld field private bool DoFindNew(int index, int count) { Log.DebugLine(this, "checking {0} instructions starting at {1:X2} for a new", count, m_info.Instructions[index].Untyped.Offset); for (int i = index; i < index + count; ++i) { StoreStaticField store = m_info.Instructions[i] as StoreStaticField; if (store != null && store.Field == m_field) { NewObj newer = m_info.Instructions[i - 1] as NewObj; if (newer != null) { Log.DebugLine(this, "found a new at {0:X2}", store.Untyped.Offset); return(true); } } } return(false); }
public void VisitSStoreField(StoreStaticField store) { DoAddField(store.Field); }
public void VisitStoreStaticField(StoreStaticField field) { DoAdd(field.Field.FieldType); }
// ldarg.0 // volatile. // stsfld bool Smokey.Tests.StaticSetterTest/Static::ms_vatomic private bool DoVolatileStore(StoreStaticField store) { TypedInstruction prior = m_info.Instructions[store.Index - 1]; return(prior.Untyped.OpCode.Code == Code.Volatile); }