//------------------------------------------------------------ // CLSDREC.IsValidAutoImplementedProperty // /// <summary></summary> /// <param name="propNode"></param> /// <returns></returns> //------------------------------------------------------------ internal bool IsValidAutoImplementedProperty(PROPERTYNODE propNode) { if (propNode == null || propNode.GetNode == null || propNode.GetNode.OpenCurlyIndex != propNode.GetNode.CloseCurlyIndex) { return(false); } if (propNode.SetNode == null) { // this message should be added to the resources. //Compiler.Controller.ReportError( // ERRORKIND.ERROR, // "Automatically implemented properties must define both get and set accessors."); NAMENODE nNode = propNode.NameNode as NAMENODE; Compiler.Error( propNode, CSCERRID.ERR_PropertyAccessorHasNoBody, new ErrArg(nNode != null ? nNode.Name : "")); return(false); } if (propNode.SetNode.OpenCurlyIndex == propNode.SetNode.CloseCurlyIndex) { propNode.GetNode.IsAutoImplemented = true; propNode.SetNode.IsAutoImplemented = true; return(true); } return(false); }
//------------------------------------------------------------ // 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); }