(project: String, kind: &ADGKind, target: &Option<PathBuf>)
| 284 | } |
| 285 | |
| 286 | fn build_adg(project: String, kind: &ADGKind, target: &Option<PathBuf>) -> Result<()> { |
| 287 | let deopt = Deopt::new(project)?; |
| 288 | match kind { |
| 289 | ADGKind::Sparse => { |
| 290 | if let Some(program_path) = target { |
| 291 | let ast = Executor::extract_ast(program_path, vec![], &deopt)?; |
| 292 | let cfg = CFGBuilder::build_cfg(ast)?; |
| 293 | let adg = ADGBuilder::new().sparse_build(cfg)?; |
| 294 | let save_path: PathBuf = [deopt.get_library_adg_dir()?, "sparse.adg".into()] |
| 295 | .iter() |
| 296 | .collect(); |
| 297 | adg.dump_to_file(&save_path, true)?; |
| 298 | } |
| 299 | } |
| 300 | ADGKind::Dense => { |
| 301 | let mut observer = Observer::new(&deopt); |
| 302 | let seed_dir = if let Some(dir) = target { |
| 303 | dir.clone() |
| 304 | } else { |
| 305 | deopt.get_library_seed_dir()? |
| 306 | }; |
| 307 | for entry in std::fs::read_dir(seed_dir)? { |
| 308 | let seed = entry?.path(); |
| 309 | observer.add_program_to_adg(&seed)?; |
| 310 | } |
| 311 | observer.save_coalesced_adg()?; |
| 312 | } |
| 313 | } |
| 314 | Ok(()) |
| 315 | } |
| 316 | |
| 317 | fn constraint_infer(project: String) -> Result<()> { |
| 318 | let deopt = Deopt::new(project)?; |
no test coverage detected