Esempio n. 1
0
        public void VisitInitObj(InitObj init)
        {
            DBC.Assert(m_state == State.Calls, "state is {0}", m_state);

            if (m_types.Count > 0)
            {
                DoRemoveTypes(init.Type);
            }
        }
Esempio n. 2
0
 // 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);
                 }
             }
         }
     }
 }
Esempio n. 3
0
        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);
                }
            }
        }
Esempio n. 4
0
 public void VisitInit(InitObj init)
 {
     DoAdd(init.Type);
 }