protected virtual unsafe PropertyBuilder DefineProperty(TypeBuilder typeBuilder, BCSYM_Property *pProperty)
        {
            string             name       = new string(*((char **)(pProperty + 12)));
            BCSYM *            pSymbol    = BCSYM.DigThroughNamedType(*((BCSYM * modopt(IsConst) modopt(IsConst) *)(pProperty + 80)));
            Type               returnType = this.GetType(typeBuilder, pSymbol);
            PropertyAttributes attributes = (PropertyAttributes)((*(((byte *)(pProperty + 0x4a))) & 2) << 8);

            Type[]          parameterTypes = this.GetParameterTypes(typeBuilder, (BCSYM_Proc *)pProperty);
            PropertyBuilder builder        = typeBuilder.DefineProperty(name, attributes, returnType, parameterTypes);
            int             num2           = *((int *)(pProperty + 0x80));

            if (num2 != 0)
            {
                BCSYM_Proc *  pProc     = (BCSYM_Proc *)num2;
                MethodBuilder mdBuilder = this.DefineMethod(typeBuilder, pProc);
                builder.SetGetMethod(mdBuilder);
            }
            int num = *((int *)(pProperty + 0x84));

            if (num != 0)
            {
                BCSYM_Proc *  procPtr  = (BCSYM_Proc *)num;
                MethodBuilder builder2 = this.DefineMethod(typeBuilder, procPtr);
                builder.SetSetMethod(builder2);
            }
            return(builder);
        }
        protected virtual unsafe void DefineGenericTypeParameter(TypeBuilder typeBuilder, GenericTypeParameterBuilder paramBuilder, BCSYM_GenericParam *pParam)
        {
            paramBuilder.SetGenericParameterAttributes(GetGenericParameterAttributes(pParam));
            List <Type> list = new List <Type>();

            for (BCSYM_GenericConstraint *constraintPtr = *((BCSYM_GenericConstraint **)(pParam + 0x54)); constraintPtr != null; constraintPtr = *((BCSYM_GenericConstraint **)(constraintPtr + 8)))
            {
                if (((byte)(*(((byte *)constraintPtr)) == 0x26)) != 0)
                {
                    BCSYM *pSymbol = BCSYM.DigThroughNamedType(*((BCSYM * modopt(IsConst) modopt(IsConst) *)(constraintPtr + 12)));
                    Type   item    = this.GetType(typeBuilder, pSymbol);
                    if (BCSYM.IsInterface(pSymbol))
                    {
                        list.Add(item);
                    }
                    else
                    {
                        paramBuilder.SetBaseTypeConstraint(item);
                    }
                }
            }
            if (list.Count > 0)
            {
                paramBuilder.SetInterfaceConstraints(list.ToArray());
            }
        }
        protected virtual unsafe FieldBuilder DefineField(TypeBuilder typeBuilder, BCSYM_Variable *pField)
        {
            string          fieldName       = new string(*((char **)(pField + 12)));
            BCSYM *         pSymbol         = BCSYM.DigThroughNamedType(*((BCSYM * modopt(IsConst) modopt(IsConst) *)(pField + 80)));
            Type            type            = this.GetType(typeBuilder, pSymbol);
            FieldAttributes fieldAttributes = GetFieldAttributes(pField);

            return(typeBuilder.DefineField(fieldName, type, fieldAttributes));
        }
        protected virtual unsafe MethodBuilder DefineMethod(TypeBuilder typeBuilder, BCSYM_Proc *pProc)
        {
            string           name             = new string(*((char **)(pProc + 12)));
            BCSYM *          pSymbol          = BCSYM.DigThroughNamedType(*((BCSYM * modopt(IsConst) modopt(IsConst) *)(pProc + 80)));
            Type             returnType       = this.GetType(typeBuilder, pSymbol);
            MethodAttributes methodAttributes = GetMethodAttributes(pProc);

            Type[] parameterTypes = this.GetParameterTypes(typeBuilder, pProc);
            return(typeBuilder.DefineMethod(name, methodAttributes, returnType, parameterTypes));
        }
Example #5
0
        private unsafe bool Equals(BCSYM *pSymbol, Type type)
        {
            int num2;

            if (pSymbol == null)
            {
                RaiseException(GetLastHResultError(), 0, 0, null);
            }
            if (type == null)
            {
                RaiseException(GetLastHResultError(), 0, 0, null);
            }
            bool flag = false;
            byte num  = *((byte *)pSymbol);
            int  num3 = num * 3;

            if (((byte)(num3[&?s_rgBilkindInfo@BCSYM@@1QBUBilkindInfo@@B] & 4)) != 0)