edits
[jpf-core.git] / src / main / gov / nasa / jpf / vm / serialize / CFSerializer.java
index bdd63554cba8f675ada4bf645298072f5622900d..da14d02e45710d0c97db6a11db9d35377a350ed7 100644 (file)
@@ -21,6 +21,10 @@ package gov.nasa.jpf.vm.serialize;
 import java.util.Iterator;
 
 import gov.nasa.jpf.vm.ElementInfo;
+import gov.nasa.jpf.vm.StaticElementInfo;
+import gov.nasa.jpf.vm.Fields;
+import gov.nasa.jpf.util.FinalBitSet;
+import gov.nasa.jpf.vm.ClassInfo;
 import gov.nasa.jpf.vm.Instruction;
 import gov.nasa.jpf.vm.MJIEnv;
 import gov.nasa.jpf.vm.StackFrame;
@@ -79,6 +83,14 @@ public class CFSerializer extends FilteringSerializer {
       buf.add(MJIEnv.NULL);
     } else {
       ElementInfo ei = heap.get(objref);
+      ClassInfo ci = ei.getClassInfo();
+
+      if (SmartThingsConfig.instance.ignoreClass(ci)) {
+        ei.setSid(0);
+        buf.add(0);
+        return;
+      }
+      
       int sid = ei.getSid();
 
       if (positiveSid){ // count sid upwards from 1
@@ -102,29 +114,54 @@ public class CFSerializer extends FilteringSerializer {
   }
 
 
-  boolean istop;
   @Override
   protected void serializeStackFrames() {
     ThreadList tl = ks.getThreadList();
-    istop = true;
     for (Iterator<ThreadInfo> it = tl.canonicalLiveIterator(); it.hasNext(); ) {
       serializeStackFrames(it.next());
-      istop = false;
     }
   }
+
+  //Don't think we actually have static fields...so this should be safe
+  @Override
+  protected void serializeClassLoaders(){
+  }
+
+  protected void serializeClass (StaticElementInfo sei){
+    // buf.add(sei.getStatus());
+    
+    Fields fields = sei.getFields();
+    ClassInfo ci = sei.getClassInfo();
+    FinalBitSet filtered = getStaticFilterMask(ci);
+    FinalBitSet refs = getStaticRefMask(ci);
+    int max = ci.getStaticDataSize();
+    if (SmartThingsConfig.instance.staticClass(ci))
+      return;
+    for (int i = 0; i < max; i++) {
+      if (!filtered.get(i)) {
+        int v = fields.getIntValue(i);
+        if (refs.get(i)) {
+          processReference(v);
+        } else {
+          buf.add(v);
+        }
+      }
+    }
+  }
+
   
   @Override
   protected void serializeFrame(StackFrame frame){
     FramePolicy fp = getFramePolicy(frame.getMethodInfo());
     Instruction pc = frame.getPC();
     int len = frame.getTopPos()+1;
-    
-    if (fp == null || fp.includePC || istop) {
+
+    if (fp == null || fp.includePC) {
       buf.add(frame.getMethodInfo().getGlobalId());
       buf.add( pc != null ? pc.getInstructionIndex() : -1);
     }
 
-    if (fp == null || fp.includeLocals || istop) {
+    if (fp == null || fp.includeLocals) {
       buf.add(len);
       
       // unfortunately we can't do this as a block operation because that