public void VisitInitObj(InitObj init) { DBC.Assert(m_state == State.Calls, "state is {0}", m_state); if (m_types.Count > 0) { DoRemoveTypes(init.Type); } }
// ldarg.0 this // ldflda Smokey.Tests.UseDefaultInitTest/Struct Smokey.Tests.UseDefaultInitTest/BadCase3::m_struct // initobj Smokey.Tests.UseDefaultInitTest/Struct public void VisitInit(InitObj init) { if (m_needsCheck && m_offset < 0) { if (init.Type.IsValueType) { LoadFieldAddress field = m_info.Instructions[init.Index - 1] as LoadFieldAddress; if (field != null) { LoadArg arg = m_info.Instructions[init.Index - 2] as LoadArg; if (arg != null && arg.Arg == 0) { m_offset = init.Untyped.Offset; Log.DebugLine(this, "found default ctor call at {0:X2}", m_offset); } } } } }
public void VisitInit(InitObj newer) { if (newer.Type != m_method.DeclaringType) { Log.DebugLine(this, "initobj: {0}", newer.Type); TypeDefinition type = Cache.FindType(newer.Type); if (type != null) { FieldDefinition field = type.Fields.GetField("Empty"); if (field != null && field.IsPublic) { string details = "Type: " + newer.Type.FullName; Log.DebugLine(this, details); Reporter.MethodFailed(m_method, CheckID, newer.Untyped.Offset, details); } } else { Log.InfoLine(this, "couldn't find definition for {0}", newer.Type.FullName); } } }
public void VisitInit(InitObj init) { DoAdd(init.Type); }