예제 #1
0
        /*      private class EdgeCounter : FieldTraverser
                {
                    private int count = 0;
                    public override void DoTraversal(Object field)
                    {
                        throw new ApplicationException("EdgePrinter should never traverse non Ptrs");
                    }
                    public override void DoTraversal(Pointer ptr)
                    {
                        if(ptr == 0u) return;
                        count ++;
                    }
                    public void reset(){count = 0;}
                    public int edgeCount(){return count;}
                }

        */
        public static void TraverseHeap(StateImpl state, FieldTraverser edge, FieldTraverser node)
        {
            heapQueue = new Queue();
            seen = new Hashtable();

            ReferenceTraverser et = new ReferenceTraverser(state, edge);

            state.TraverseGlobalReferences(et);

            for (int i = 0; i < state.NumProcesses; i++)
            {
                Process p = state.GetProcess(i);
                for (ZingMethod m = p.TopOfStack; m != null; m = m.Caller)
                {
                    m.TraverseFields(et);
                }
            }

            while (heapQueue.Count > 0)
            {
                Pointer ptr = (Pointer)heapQueue.Dequeue();
                if (node != null) node.DoTraversal(ptr);
                HeapEntry he = (HeapEntry)state.Heap[ptr];
                he.heList.TraverseFields(et);
            }
        }
예제 #2
0
			public override void TraverseFields(FieldTraverser ft)
			{
				ft.DoTraversal(this.TypeId);

				// For each non-static field:
				//     Insert statement template "WriteSimpleField" or "WriteComplexField"
			}
예제 #3
0
			public override void TraverseFields(FieldTraverser ft)
			{
				ft.DoTraversal(this.TypeId);
				ft.DoTraversal(this.Count);
				foreach (_ElementType x in this.ArrayList)
					x.TraverseFields(ft);
					//ft.DoTraversal(x);
			}
예제 #4
0
			public void TraverseFields(FieldTraverser ft)
			{
			}
예제 #5
0
			public override void TraverseFields(FieldTraverser ft)
			{
				ft.DoTraversal(typeId);
				ft.DoTraversal(nextBlock);
				ft.DoTraversal(privThis);

				// emit for each member of locals, inputs and outputs
                inputs.TraverseFields(ft);
                outputs.TraverseFields(ft);
                locals.TraverseFields(ft);
			}
예제 #6
0
 public void TraverseFields(FieldTraverser ft)
 {
     // Emit a ft.DoTraversal() call for each member
 }
예제 #7
0
			public override void TraverseFields(FieldTraverser ft)
			{
				ft.DoTraversal(this.TypeId);
				ft.DoTraversal(this.Count);
				foreach (_ElementType x in this.Queue)
					ft.DoTraversal(x);
			}
예제 #8
0
 public HeapElementPrinter(StateImpl s)
 {
     state = s;
     nodeTrav = new NodePrinter(this);
     edgeTrav = new EdgePrinter(this);
 }
예제 #9
0
 public ReferenceTraverser(StateImpl s, FieldTraverser e)
 {
     state = s;
     perEdgeTraverser = e;
 }
예제 #10
0
 public abstract void TraverseFields(FieldTraverser ft);
예제 #11
0
			public override void TraverseFields(FieldTraverser ft)
			{
                ft.DoTraversal(UnallocatedWrites);

				//ft.DoTraversal(member);
			}