//------------------------------------------------------------ // 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); }
//------------------------------------------------------------ // 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); }
//------------------------------------------------------------ // FieldWithType.Set (1) // /// <summary></summary> /// <param name="field"></param> /// <param name="ats"></param> //------------------------------------------------------------ internal void Set(MEMBVARSYM field, AGGTYPESYM ats) { base.Set(field, ats); }
//------------------------------------------------------------ // FieldWithType Constructor (2) // /// <summary></summary> /// <param name="field"></param> /// <param name="ats"></param> //------------------------------------------------------------ internal FieldWithType(MEMBVARSYM field, AGGTYPESYM ats) { Set(field, ats); }