question: 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 ; } } }
target:  We copy and make a condensed version of call graph.