void do_object(oop obj) { if (should_visit(obj)) { if (!_cit->record_instance(obj)) { _missed_count++; } } }
void visit_macro(expr const & e) { if (is_expr_quote(e) || is_pexpr_quote(e)) return; if (should_visit(e)) { for (unsigned i = 0; i < macro_num_args(e); i++) visit(macro_arg(e, i)); } }
void visit_binding(expr const & _e) { if (should_visit(_e)) { buffer<expr> ls; expr e = _e; while (is_lambda(e) || is_pi(e)) { expr d = instantiate_rev(binding_domain(e), ls.size(), ls.data()); expr l = mk_local(mk_fresh_name(), binding_name(e), d, binding_info(e)); ls.push_back(l); e = binding_body(e); } visit(instantiate_rev(e, ls.size(), ls.data())); } }
void visit_app(expr const & e) { if (should_visit(e)) { buffer<expr> args; expr const & fn = get_app_args(e, args); if (is_constant(fn) && is_inline(m_tc.env(), const_name(fn))) { if (auto new_e = unfold_app(m_tc.env(), e)) { visit(*new_e); return; } } visit(fn); for (expr const & arg : args) visit(arg); } }
void dfs(int r, int c) { memo[r][c][0] = x; memo[r][c][1] = y; if (is_odd(r) && is_odd(c)) { curr += a2; if (grid[r/2][c/2] == '0') { if (should_visit(r - 1, c + 1)) dfs(r-1, c+1); if (should_visit(r + 1, c - 1)) dfs(r+1, c-1); } else { if (should_visit(r - 1, c - 1)) dfs(r-1, c-1); if (should_visit(r + 1, c + 1)) dfs(r+1, c+1); } return; } if (is_valid(r-1, c-1)) { int p = (r-1) / 2, q = (c-1)/2; if (grid[p][q] == '0') curr += a1; else if (should_visit(r-1, c-1)) dfs(r-1, c-1); } if (is_valid(r-1, c+1)) { int p = (r-1) / 2, q = (c+1)/2; if (grid[p][q] == '1') curr += a1; else if (should_visit(r-1, c+1)) dfs(r-1, c+1); } if (is_valid(r+1, c-1)) { int p = (r+1) / 2, q = (c-1)/2; if (grid[p][q] == '1') curr += a1; else if (should_visit(r+1, c-1)) dfs(r+1, c-1); } if (is_valid(r+1, c+1)) { int p = (r+1) / 2, q = (c+1)/2; if (grid[p][q] == '0') curr += a1; else if (should_visit(r+1, c+1)) dfs(r+1, c+1); } }
void visit_let(expr const & e) { if (should_visit(e)) { visit(instantiate(let_body(e), let_value(e))); } }