public GeomQueries(GeomPointsTo geom_pts){
  geomPts=geom_pts;
  n_func=geomPts.n_func;
  vis_cg=geomPts.vis_cg;
  rep_cg=geomPts.rep_cg;
  block_num=geomPts.block_num;
  max_context_size_block=geomPts.max_context_size_block;
  call_graph=new CgEdge[n_func];
  Arrays.fill(call_graph,null);
  in_degree=new int[n_func];
  Arrays.fill(in_degree,0);
  CgEdge[] raw_call_graph=geomPts.call_graph;
  for (int i=0; i < n_func; ++i) {
    if (vis_cg[i] == 0)     continue;
    CgEdge p=raw_call_graph[i];
    int rep=rep_cg[i];
    while (p != null) {
      if (p.scc_edge == false) {
        CgEdge q=p.duplicate();
        q.next=call_graph[rep];
        call_graph[rep]=q;
        in_degree[rep_cg[q.t]]++;
      }
      p=p.next;
    }
  }
}

public GeomQueries ( GeomPointsTo geom_pts ) { geomPts = geom_pts ; n_func = geomPts . n_func ; vis_cg = geomPts . vis_cg ; rep_cg = geomPts . rep_cg ; block_num = geomPts . block_num ; max_context_size_block = geomPts . max_context_size_block ; call_graph = new CgEdge [ n_func ] ; Arrays . fill ( call_graph , null ) ; in_degree = new int [ n_func ] ; Arrays . fill ( in_degree , 0 ) ; CgEdge [ ] raw_call_graph = geomPts . call_graph ; for ( int i = 0 ; i < n_func ; ++ i ) { if ( vis_cg [ i ] == 0 ) continue ; CgEdge p = raw_call_graph [ i ] ; int rep = rep_cg [ i ] ; while ( p != null ) { if ( p . scc_edge == false ) { CgEdge q = p . duplicate ( ) ; q . next = call_graph [ rep ] ; call_graph [ rep ] = q ; in_degree [ rep_cg [ q . t ] ] ++ ; } p = p . next ; } } }
we copy and make a condensed version of call graph .
