コード例 #1
0
ファイル: VMLocalVariableBlock.cs プロジェクト: edwardt/study
 public void MarkAndSweep(int threadID, VMValueManager valueMan)
 {
     foreach (int i in variables)
         valueMan.GetValue(i).MarkAndSweep(threadID, valueMan);
     foreach (int i in arguments)
         valueMan.GetValue(i).MarkAndSweep(threadID, valueMan);
 }
コード例 #2
0
ファイル: VMValue_arrayinst.cs プロジェクト: edwardt/study
 public VMValue_arrayinst(int guid, int size, CILVariable elementType, VMValueManager valueManager)
     : base(guid)
 {
     this.elementType = elementType;
     data = new int[size];
     for(int i = 0; i < size; i++)
         data[i] = valueManager.MakeValue(elementType).GUID;
 }
コード例 #3
0
ファイル: StateSnapshot.cs プロジェクト: edwardt/study
 public StateSnapshot(VMValueManager values)
 {
     msData = new MemoryStream();
     bwData = new BinaryWriter(msData);
     valueMap = new Hashtable();
     this.values = values;
     seenGuids = new List<int>();
     nextguid = 0;
     dbg_stage = 1;
 }
コード例 #4
0
ファイル: VMValue_thread.cs プロジェクト: edwardt/study
 public override void MarkAndSweep(int tid, VMValueManager valueMan)
 {
     int tmp = MaSProcess(tid);
     if (tmp != -2)
     {
         VMValue v = valueMan.GetValue(threadStartGUID);
         if (v != null)
             v.MarkAndSweep(tmp, valueMan);
     }
 }
コード例 #5
0
ファイル: VMValue_array.cs プロジェクト: edwardt/study
 public override void MarkAndSweep(int tid, VMValueManager valueMan)
 {
     int tmp = MaSProcess(tid);
     if (tmp != -2)
     {
         // check children with tid
         VMValue v = valueMan.GetValue(arrayInstGuid);
         if (v != null)
             v.MarkAndSweep(tmp, valueMan);
     }
 }
コード例 #6
0
ファイル: VMValueManager.cs プロジェクト: edwardt/study
        public VMValueManager Duplicate()
        {
            VMValueManager ret = new VMValueManager();
            ret.nextguid = nextguid;

            IDictionaryEnumerator iter = allValues.GetEnumerator();
            while(iter.MoveNext())
                ret.allValues.Add(iter.Key, ((VMValue)iter.Value).Duplicate());

            return ret;
        }
コード例 #7
0
ファイル: VMValue_threadstart.cs プロジェクト: edwardt/study
 public override void MarkAndSweep(int tid, VMValueManager valueMan)
 {
     int tmp = MaSProcess(tid);
     if (tmp != -2)
     {
         VMValue v = valueMan.GetValue(objGuid);
         if (v != null)
             v.MarkAndSweep(tmp, valueMan);
         v = valueMan.GetValue(ftnGuid);
         if (v != null)
             v.MarkAndSweep(tmp, valueMan);
     }
 }
コード例 #8
0
ファイル: VMValue_arrayinst.cs プロジェクト: edwardt/study
 public override void MarkAndSweep(int tid, VMValueManager valueMan)
 {
     int tmp = MaSProcess(tid);
     if (tmp != -2)
     {
         // check children with tid
         for (int i = 0; i < data.Length; i++)
             if (data[i] != -1)
             {
                 VMValue v = valueMan.GetValue(data[i]);
                 v.MarkAndSweep(tmp, valueMan);
             }
     }
 }
コード例 #9
0
ファイル: VMValue_objectinst.cs プロジェクト: edwardt/study
        public VMValue_objectinst(int guid, VMValueManager valueFactory, CILClass classType)
            : base(guid)
        {
            this.classType = classType;
            this.holdingLockThreadID = -1;
            this.holdingLockCount = 0;

            IEnumerator iter = classType.GetFieldEnumerator();
            while(iter.MoveNext())
            {
                CILClassField field = (CILClassField)iter.Current;
                if(field.IsStatic == false)
                {
                    VMValue f = valueFactory.MakeValue(field.Variable);
                    f.IsConcrete = true;
                    fields.Add(f.GUID);
                }
            }
        }
コード例 #10
0
ファイル: VMValue_int64.cs プロジェクト: edwardt/study
 public override void MarkAndSweep(int tid, VMValueManager valueMan)
 {
     MaSProcess(tid);
 }
コード例 #11
0
ファイル: VMValue.cs プロジェクト: edwardt/study
 /// <summary>
 /// Explores all reachable VMValue from this to mark 
 /// <param>tid: ID (guid) of the thread checking this VMValue</param>
 /// </summary>
 public abstract void MarkAndSweep(int tid, VMValueManager valueMan);
コード例 #12
0
ファイル: VMValue_threadstart.cs プロジェクト: edwardt/study
 public VMValue_threadstart(int guid, VMValueManager valueFactory, int objGuid, int ftnGuid)
     : base(guid, valueFactory, new CILClass("[mscorlib]System.Threading.ThreadStart"))
 {
     this.objGuid = objGuid;
     this.ftnGuid = ftnGuid;
 }
コード例 #13
0
ファイル: VMValue_objectinst.cs プロジェクト: edwardt/study
 public override void MarkAndSweep(int tid, VMValueManager valueMan)
 {
     int tmp = MaSProcess(tid);
     if (tmp != -2)
     {
         // check children with tid
         for (int i = 0; i < fields.Count; i++)
         {
             VMValue v = valueMan.GetValue(fields[i]);
             if (v != null)
                 v.MarkAndSweep(tmp, valueMan);
         }
     }
 }
コード例 #14
0
ファイル: VMValue_thread.cs プロジェクト: edwardt/study
 public VMValue_thread(int guid, VMValueManager valueFactory, int threadStartGUID)
     : base(guid, valueFactory, new CILClass("[mscorlib]System.Threading.Thread"))
 {
     this.threadStartGUID = threadStartGUID;
 }