bool visit_functiondef(AST_FunctionDef* node) { for (auto* d : node->args->defaults) d->accept(this); _doStore(node->name); return true; }
bool visit_deletename(BST_DeleteName* node) override { if (node->vreg < 0 || node->vreg >= analysis->cfg->getVRegInfo().getNumOfUserVisibleVRegs()) return true; _doLoad(node->vreg); _doStore(node->vreg); return true; }
bool visit_alias(AST_alias* node) { const std::string* name = &node->name; if (node->asname.size()) name = &node->asname; _doStore(*name); return true; }
bool visit_vreg(int* vreg, bool is_dst) override { if (*vreg >= 0) { if (is_dst) _doStore(*vreg); else _doLoad(*vreg); } return true; }
bool visit_classdef(AST_ClassDef* node) { _doStore(node->name); for (auto e : node->bases) e->accept(this); for (auto e : node->decorator_list) e->accept(this); return true; }
bool visit_name(AST_Name* node) { if (node->ctx_type == AST_TYPE::Load) _doLoad(node->id); else if (node->ctx_type == AST_TYPE::Store) _doStore(node->id); else { assert(0); abort(); } return true; }
bool visit_name(AST_Name* node) { if (node->ctx_type == AST_TYPE::Load) _doLoad(node->id, node); else if (node->ctx_type == AST_TYPE::Store || node->ctx_type == AST_TYPE::Del || node->ctx_type == AST_TYPE::Param) _doStore(node->id); else { ASSERT(0, "%d", node->ctx_type); abort(); } return true; }
bool visit_functiondef(AST_FunctionDef* node) { _doStore(node->name); return true; }
bool visit_classdef(AST_ClassDef* node) { _doStore(node->name); return true; }