Changes between Version 1 and Version 2 of HeapCanonicalization


Ignore:
Timestamp:
07/31/14 11:44:39 (12 years ago)
Author:
zmanchun
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • HeapCanonicalization

    v1 v2  
    3333{{{
    3434Map<HeapObject, Integer> reachableHeapObjectsOfState(state){
    35   Set<HeapObject> visited;
    3635  Map<HeapObject, Integer> idMap;
    3736
    3837  for(dyscope: state.dyscopes()){
    3938    for(varValue: dyscope.varValues()){
    40       reachableHeapObjects(varValue);
     39      reachableHeapObjectsOfValue(varValue, idMap);
    4140    }
    4241  }
     
    4544
    4645//dfs
    47 void reachableHeapObjectsOfValue(varValue, visited, idMap){
     46void reachableHeapObjectsOfValue(varValue, idMap){
    4847  if(varValue NOT pointer){
    4948    for(element: varValue.elements()){
    50       reachableHeapObjects(varValue, visited, idMap);
     49      reachableHeapObjects(varValue, idMap);
    5150    }
    5251  }else if(varValue IS heap pointer){
    5352    object = dereference(varValue);
    5453   
    55     if(!visited.contains(object)){
    56       visited.add(object);
    57       idMap.put(object, idMap.size());
    58     }
     54    if(! dMap.containsKey(object))
     55      if(object is SymbolicConstant)
     56        idMap.put(object, idMap.size());
     57      else
     58         idMap.put(object, -1);
    5959  }else{//other pointer
    60     reachableHeapObjects(dereference(varValue), visited, idMap){
     60    reachableHeapObjects(dereference(varValue), idMap){
    6161  }
    6262}