internal override Evaluation Analyze(Analyzer /*!*/ analyzer, ExInfoFromParent info) { if (isMemberOf != null) { isMemberOf.Analyze(analyzer, new ExInfoFromParent(this, DetermineAccessType(info.Access))); } return(new Evaluation(this)); }
/// <include file='Doc/Nodes.xml' path='doc/method[@name="Expression.Analyze"]/*'/> internal override Evaluation Analyze(Analyzer /*!*/ analyzer, ExInfoFromParent info) { access = info.Access; // checks for write context of key-less array operator ($a =& $x[] is ok): if (index == null && (access == AccessType.Read || access == AccessType.ReadAndWrite || access == AccessType.ReadAndWriteAndReadRef || access == AccessType.ReadAndWriteAndReadUnknown)) { analyzer.ErrorSink.Add(Errors.EmptyIndexInReadContext, analyzer.SourceUnit, position); return(new Evaluation(this)); } base.Analyze(analyzer, info); ExInfoFromParent sinfo = new ExInfoFromParent(this); switch (info.Access) { case AccessType.Write: case AccessType.WriteRef: case AccessType.ReadRef: sinfo.Access = AccessType.Write; break; case AccessType.ReadAndWriteAndReadRef: case AccessType.WriteAndReadRef: case AccessType.ReadAndWrite: sinfo.Access = AccessType.ReadAndWrite; break; case AccessType.WriteAndReadUnknown: case AccessType.ReadAndWriteAndReadUnknown: sinfo.Access = info.Access; break; case AccessType.ReadUnknown: sinfo.Access = AccessType.ReadUnknown; break; default: sinfo.Access = AccessType.Read; break; } array.Analyze(analyzer, sinfo); if (index != null) { index = index.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize(); } return(new Evaluation(this)); }