コード例 #1
0
ファイル: InterpreterScope.cs プロジェクト: scfunknown/PTVS
        /// <summary>
        /// Cached node variables so that we don't continually create new entries for basic nodes such
        /// as sequences, lambdas, etc...
        /// </summary>
        public IAnalysisSet GetOrMakeNodeValue(Node node, NodeValueKind kind, Func <Node, IAnalysisSet> maker)
        {
            IAnalysisSet result;

            if (!TryGetNodeValue(node, kind, out result))
            {
                result = maker(node);
                AddNodeValue(node, kind, result);
            }
            return(result);
        }
コード例 #2
0
ファイル: InterpreterScope.cs プロジェクト: scfunknown/PTVS
        public virtual IAnalysisSet AddNodeValue(Node node, NodeValueKind kind, IAnalysisSet variable)
        {
            NodeValue next;

            _nodeValues.TryGetValue(node, out next);
#if DEBUG
            var tmp = next;
            while (tmp != null)
            {
                Debug.Assert(tmp.Kind != kind);
                tmp = tmp.Next;
            }
#endif
            _nodeValues[node] = new NodeValue(kind, variable, next);
            return(variable);
        }
コード例 #3
0
ファイル: InterpreterScope.cs プロジェクト: scfunknown/PTVS
 internal bool TryGetNodeValue(Node node, NodeValueKind kind, out IAnalysisSet variable)
 {
     foreach (var s in EnumerateTowardsGlobal)
     {
         NodeValue value;
         if (s._nodeValues.TryGetValue(node, out value))
         {
             while (value != null)
             {
                 if (value.Kind == kind)
                 {
                     variable = value.Variable;
                     return(true);
                 }
                 value = value.Next;
             }
         }
     }
     variable = null;
     return(false);
 }
コード例 #4
0
ファイル: IsInstanceScope.cs プロジェクト: RussBaz/PTVS
 public override IAnalysisSet AddNodeValue(Node node, NodeValueKind kind, IAnalysisSet variable) {
     return OuterScope.AddNodeValue(node, kind, variable);
 }
コード例 #5
0
ファイル: InterpreterScope.cs プロジェクト: scfunknown/PTVS
 public NodeValue(NodeValueKind kind, IAnalysisSet variable, NodeValue value)
 {
     Kind     = kind;
     Variable = variable;
     Next     = value;
 }
コード例 #6
0
 public override IAnalysisSet AddNodeValue(Node node, NodeValueKind kind, IAnalysisSet variable) => OuterScope.AddNodeValue(node, kind, variable);
コード例 #7
0
ファイル: InterpreterScope.cs プロジェクト: jsschultz/PTVS
 public NodeValue(NodeValueKind kind, IAnalysisSet variable, NodeValue value) {
     Kind = kind;
     Variable = variable;
     Next = value;
 }
コード例 #8
0
ファイル: InterpreterScope.cs プロジェクト: jsschultz/PTVS
 /// <summary>
 /// Cached node variables so that we don't continually create new entries for basic nodes such
 /// as sequences, lambdas, etc...
 /// </summary>
 public IAnalysisSet GetOrMakeNodeValue(Node node, NodeValueKind kind, Func<Node, IAnalysisSet> maker) {
     IAnalysisSet result;
     if (!TryGetNodeValue(node, kind, out result)) {
         result = maker(node);
         AddNodeValue(node, kind, result);
     }
     return result;
 }
コード例 #9
0
ファイル: InterpreterScope.cs プロジェクト: jsschultz/PTVS
 internal bool TryGetNodeValue(Node node, NodeValueKind kind, out IAnalysisSet variable) {
     foreach (var s in EnumerateTowardsGlobal) {
         NodeValue value;
         if (s._nodeValues.TryGetValue(node, out value)) {
             while (value != null) {
                 if (value.Kind == kind) {
                     variable = value.Variable;
                     return true;
                 }
                 value = value.Next;
             }
         }
     }
     variable = null;
     return false;
 }
コード例 #10
0
ファイル: InterpreterScope.cs プロジェクト: jsschultz/PTVS
        public virtual IAnalysisSet AddNodeValue(Node node, NodeValueKind kind, IAnalysisSet variable) {
            NodeValue next;
            _nodeValues.TryGetValue(node, out next);
#if DEBUG
            var tmp = next;
            while (tmp != null) {
                Debug.Assert(tmp.Kind != kind);
                tmp = tmp.Next;
            }
#endif
            _nodeValues[node] = new NodeValue(kind, variable, next);
            return variable;
        }