public StatementProcessor(MethodDescriptor m,
                                  PropGraphNodeDescriptor rv, PropGraphNodeDescriptor thisRef,
                                  IEnumerable <PropGraphNodeDescriptor> parameters)
        //    ,
        //    ICodeProvider codeProvider)
        {
            // this.containerEntity = containerEntity;
            this.ReturnVariable    = rv;
            this.Method            = m;
            this.ParameterNodes    = parameters;
            this.ThisRef           = thisRef;
            this.PropagationGraph  = new PropagationGraph();
            this.InstantiatedTypes = new HashSet <TypeDescriptor>();
            this.RemovedTypes      = new HashSet <TypeDescriptor>();

            if (rv != null)
            {
                PropagationGraph.AddRet(rv);
            }
            if (thisRef != null)
            {
                PropagationGraph.Add(thisRef);
            }

            foreach (var parameter in this.ParameterNodes)
            {
                if (parameter != null)
                {
                    PropagationGraph.Add(parameter);
                }
            }
            //this.dispatcher = dispatcher;
        }
        public void RegisterAssignment(PropGraphNodeDescriptor lhs, PropGraphNodeDescriptor rhs)
        {
            if (lhs != null && rhs != null)
            {
                PropagationGraph.AddEdge(rhs, lhs);

                if (!rhs.Type.IsConcreteType)
                {
                    PropagationGraph.Add(rhs, rhs.Type);
                    PropagationGraph.AddToWorkList(rhs);
                }
            }
        }
 public void RegisterLocalVariable(PropGraphNodeDescriptor v)
 {
     PropagationGraph.Add(v);
 }