void Dumper::visit(Call *call) { CallFlags callFlags = call->flags; if (!(dumpFlags & DUMP_FLAG_NO_CALL_NO)) { os << call->no << " "; } if (dumpFlags & DUMP_FLAG_THREAD_IDS) { os << "@" << std::hex << call->thread_id << std::dec << " "; } if (callFlags & CALL_FLAG_NON_REPRODUCIBLE) { os << strike; } else if (callFlags & (CALL_FLAG_FAKE | CALL_FLAG_NO_SIDE_EFFECTS)) { os << normal; } else { os << bold; } os << call->sig->name << normal; os << "("; const char *sep = ""; for (unsigned i = 0; i < call->args.size(); ++i) { os << sep; if (!(dumpFlags & DUMP_FLAG_NO_ARG_NAMES)) { os << italic << call->sig->arg_names[i] << normal << " = "; } if (call->args[i].value) { _visit(call->args[i].value); } else { os << "?"; } sep = ", "; } os << ")"; if (call->ret) { os << " = "; _visit(call->ret); } if (callFlags & CALL_FLAG_INCOMPLETE) { os << " // " << red << "incomplete" << normal; } if (!(dumpFlags & DUMP_FLAG_NO_MULTILINE)) { os << "\n"; if (call->backtrace != NULL) { os << bold << red << "Backtrace:\n" << normal; visit(*call->backtrace); } if (callFlags & CALL_FLAG_END_FRAME) { os << "\n"; } } }
void Dumper::visit(Array *array) { if (array->values.size() == 1) { os << "&"; _visit(array->values[0]); } else { const char *sep = ""; os << "{"; for (auto & value : array->values) { os << sep; _visit(value); sep = ", "; } os << "}"; } }
void visit(Array *array) { if (array->values.size() == 1) { os << "&"; _visit(array->values[0]); } else { const char *sep = ""; os << "{"; for (std::vector<Value *>::iterator it = array->values.begin(); it != array->values.end(); ++it) { os << sep; _visit(*it); sep = ", "; } os << "}"; } }
void visit(Call *call) { CallFlags callFlags = call->flags; if (!(dumpFlags & DUMP_FLAG_NO_CALL_NO)) { os << call->no << " "; } if (callFlags & CALL_FLAG_NON_REPRODUCIBLE) { os << strike; } else if (callFlags & (CALL_FLAG_FAKE | CALL_FLAG_NO_SIDE_EFFECTS)) { os << normal; } else { os << bold; } os << call->sig->name << normal; os << "("; const char *sep = ""; for (unsigned i = 0; i < call->args.size(); ++i) { os << sep; if (!(dumpFlags & DUMP_FLAG_NO_ARG_NAMES)) { os << italic << call->sig->arg_names[i] << normal << " = "; } if (call->args[i].value) { _visit(call->args[i].value); } else { os << "?"; } sep = ", "; } os << ")"; if (call->ret) { os << " = "; _visit(call->ret); } if (callFlags & CALL_FLAG_INCOMPLETE) { os << " // " << red << "incomplete" << normal; } os << "\n"; if (callFlags & CALL_FLAG_END_FRAME) { os << "\n"; } }
void JitCodeSpecializer::_visit(U& element, std::function<void(T&)> fn) const { // clang-format off if constexpr(std::is_same_v<std::remove_const_t<U>, llvm::Module>) { // visit all functions in a module for (auto& function : element) { _visit(function, fn); } } else if constexpr(std::is_same_v<std::remove_const_t<U>, llvm::Function>) { // NOLINT
void topsort() { int i; for(i=0; i<100; ++i) { if (valid[i]) _visit(i); } }
void visit(Struct *s) { const char *sep = ""; os << "{"; for (unsigned i = 0; i < s->members.size(); ++i) { os << sep << italic << s->sig->member_names[i] << normal << " = "; _visit(s->members[i]); sep = ", "; } os << "}"; }
void _visit(int i) { if (vis[i] == temp) return; if (vis[i] == 1) return; vis[i] = temp; ++num; int j; for(j=0; j<100; ++j) { if (gph.ar[i][j] == 1) _visit(j); } postnumb[i] = num; postnumbed[nnn++] = i; printf("%d ", i); vis[i] = 1; }
/** * Perform a postorder traversal of a red-black tree */ HIDDEN void postwalkdata(struct bu_rb_node *root, int order, void (*visit)(void), int depth) { /* need function pointer for recasting visit for actual use as a function */ BU_RB_WALK_FUNC_DATA_DECL(_visit); /* make the cast */ _visit = BU_RB_WALK_FUNC_CAST_AS_DATA_FUNC(visit); BU_CKMAG(root, BU_RB_NODE_MAGIC, "red-black node"); RB_CKORDER(root->rbn_tree, order); if (root == RB_NULL(root->rbn_tree)) return; postwalkdata(RB_LEFT_CHILD(root, order), order, visit, depth + 1); postwalkdata(RB_RIGHT_CHILD(root, order), order, visit, depth + 1); _visit(RB_DATA(root, order), depth); }
const char * Dumper::visitMembers(Struct *s, const char *sep) { for (unsigned i = 0; i < s->members.size(); ++i) { const char *memberName = s->sig->member_names[i]; Value *memberValue = s->members[i]; if (!memberName || !*memberName) { // Anonymous structure Struct *memberStruct = memberValue->toStruct(); assert(memberStruct); if (memberStruct) { sep = visitMembers(memberStruct, sep); continue; } } os << sep << italic << memberName << normal << " = ", _visit(memberValue); sep = ", "; } return sep; }
void _visit(V* v, T& t) { t.left().visit(v); _visit(v, t.right()); }
void Dumper::visit(Repr *r) { _visit(r->humanValue); }
void * operator() (trace::Value *node) { _visit(node); return result; }
void visit(Repr *r) { _visit(r->humanValue); }
void visit(T* t) { _visit(t, *this); }
void TraceStackGCVisitor::visit(void* p) { _visit(p); }
void TraceStackGCVisitor::visitRange(void** start, void** end) { while (start < end) { _visit(*start); start++; } }
void visit(T* t) { _visit(t); }
void apply(trace::Value *node) { _visit(node); }