Beispiel #1
0
 //------------------------------------------------------------
 // FieldWithType Constructor (3)
 //
 /// <summary></summary>
 /// <param name="swt"></param>
 //------------------------------------------------------------
 internal FieldWithType(SymWithType swt)
 {
     if (swt != null && swt.Sym != null)
     {
         MEMBVARSYM fieldSym = swt.Sym as MEMBVARSYM;
         if (fieldSym != null)
         {
             Set(fieldSym, swt.AggTypeSym);
             return;
         }
     }
     Set(null, null);
 }
        //------------------------------------------------------------
        // CLSDREC.CreateBackField
        //
        /// <summary></summary>
        /// <param name="aggSym"></param>
        /// <param name="propName"></param>
        //------------------------------------------------------------
        private MEMBVARSYM CreateBackField(
            PROPERTYNODE propNode,
            string propName,
            TYPESYM propTypeSym,
            AGGSYM aggSym,
            AGGDECLSYM aggDeclSym)
        {
            DebugUtil.Assert(aggSym.IsClass || aggSym.IsStruct);
            string backFieldName = GenerateBackFieldName(propName);

            NODEFLAGS propFlags = propNode.Flags;

            MEMBVARSYM backFieldSym = Compiler.MainSymbolManager.CreateMembVar(
                backFieldName,
                aggSym,
                aggDeclSym);

            backFieldSym.TypeSym       = propTypeSym;
            backFieldSym.ParseTreeNode = null;
            backFieldSym.IsAssigned    = true;

            NODEFLAGS allowableFlags =
                aggSym.AllowableMemberAccess() |
                NODEFLAGS.MOD_UNSAFE |
                NODEFLAGS.MOD_NEW |
                NODEFLAGS.MOD_STATIC;

            backFieldSym.IsUnsafe = (aggDeclSym.IsUnsafe || (propFlags & NODEFLAGS.MOD_UNSAFE) != 0);

            if ((propFlags & NODEFLAGS.MOD_ABSTRACT) != 0)
            {
                DebugUtil.Assert((allowableFlags & NODEFLAGS.MOD_ABSTRACT) == 0);
                Compiler.ErrorRef(null, CSCERRID.ERR_AbstractField, new ErrArgRef(backFieldSym));
                //flags &= ~NODEFLAGS.MOD_ABSTRACT;
            }

            backFieldSym.Access = ACCESS.PRIVATE;   // GetAccessFromFlags(aggSym, allowableFlags, flags);

            if ((propFlags & NODEFLAGS.MOD_STATIC) != 0)
            {
                backFieldSym.IsStatic = true;
            }

            CheckForProtectedInSealed(backFieldSym);

            // Check that the field type is as accessible as the field itself.
            CheckConstituentVisibility(backFieldSym, propTypeSym, CSCERRID.ERR_BadVisFieldType);

            return(backFieldSym);
        }
Beispiel #3
0
        //------------------------------------------------------------
        // ReflectionUtil.GetConstructedFieldInfo
        //
        /// <summary></summary>
        /// <param name="compiler"></param>
        /// <param name="fieldSym"></param>
        /// <param name="aggTypeSym"></param>
        /// <returns></returns>
        //------------------------------------------------------------
        internal static FieldInfo GetConstructedFieldInfo(
            COMPILER compiler,
            MEMBVARSYM fieldSym,
            AGGTYPESYM aggTypeSym)
        {
            DebugUtil.Assert(compiler != null && compiler.Emitter != null);
            EMITTER emitter = compiler.Emitter;

            DebugUtil.Assert(emitter != null && fieldSym != null && aggTypeSym != null);

            SymUtil.EmitParentSym(emitter, aggTypeSym);
            SymUtil.GetSystemTypeFromSym(aggTypeSym, null, null);
            emitter.EmitMembVarDef(fieldSym);

            Type      parentType   = aggTypeSym.Type;
            FieldInfo fieldDefInfo = fieldSym.FieldInfo;
            Exception ex           = null;

            if (!parentType.IsGenericType)
            {
                return(fieldDefInfo);
            }

            FieldInfo cstrFieldInfo = null;

            try
            {
                cstrFieldInfo = parentType.GetField(fieldDefInfo.Name);
            }
            catch (NotSupportedException)
            {
                cstrFieldInfo = ReflectionUtil.GetFieldInfo(
                    parentType,
                    fieldDefInfo,
                    out ex);
            }
            return(cstrFieldInfo);
        }
Beispiel #4
0
 //------------------------------------------------------------
 // FieldWithType.Set (1)
 //
 /// <summary></summary>
 /// <param name="field"></param>
 /// <param name="ats"></param>
 //------------------------------------------------------------
 internal void Set(MEMBVARSYM field, AGGTYPESYM ats)
 {
     base.Set(field, ats);
 }
Beispiel #5
0
 //------------------------------------------------------------
 // FieldWithType Constructor (2)
 //
 /// <summary></summary>
 /// <param name="field"></param>
 /// <param name="ats"></param>
 //------------------------------------------------------------
 internal FieldWithType(MEMBVARSYM field, AGGTYPESYM ats)
 {
     Set(field, ats);
 }