コード例 #1
0
        internal override Evaluation Analyze(Analyzer /*!*/ analyzer, ExInfoFromParent info)
        {
            if (isMemberOf != null)
            {
                isMemberOf.Analyze(analyzer, new ExInfoFromParent(this, DetermineAccessType(info.Access)));
            }

            return(new Evaluation(this));
        }
コード例 #2
0
        /// <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));
        }