//------------------------------------------------------------ // 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); }
//------------------------------------------------------------ // CLSDREC.CheckFlagsAndSigOfPartialMethod // /// <summary></summary> /// <param name="nodeFlags"></param> /// <param name="methodSym"></param> /// <returns></returns> //------------------------------------------------------------ internal void CheckFlagsAndSigOfPartialMethod( BASENODE treeNode, NODEFLAGS nodeFlags, METHSYM methodSym) { const NODEFLAGS forbidden = 0 | NODEFLAGS.MOD_ABSTRACT | NODEFLAGS.MOD_NEW | NODEFLAGS.MOD_OVERRIDE | NODEFLAGS.MOD_PRIVATE | NODEFLAGS.MOD_PROTECTED | NODEFLAGS.MOD_INTERNAL | NODEFLAGS.MOD_PUBLIC | NODEFLAGS.MOD_SEALED | NODEFLAGS.MOD_VIRTUAL | NODEFLAGS.MOD_EXTERN; if ((nodeFlags & forbidden) != 0) { Compiler.Error(treeNode, CSCERRID.ERR_BadModifierForPartialMethod); } TypeArray paramTypes = methodSym.ParameterTypes; if (paramTypes != null && paramTypes.Count > 0) { for (int i = 0; i < paramTypes.Count; ++i) { TYPESYM typeSym = paramTypes[i]; if (typeSym.Kind == SYMKIND.PARAMMODSYM && (typeSym as PARAMMODSYM).IsOut) { Compiler.Error( treeNode, CSCERRID.ERR_PartialMethodHasOutParameter); } } } }