virtual bool visit_arguments(AST_arguments *node) { if (node->kwarg) _doSet(node->kwarg); if (node->vararg.size()) _doSet(node->vararg); for (int i = 0; i < node->args.size(); i++) { _doSet(node->args[i]); } return true; }
virtual bool visit_alias(AST_alias* node) { const std::string* name = &node->name; if (node->asname.size()) name = &node->asname; _doSet(*name); return true; }
virtual bool visit_import(AST_Import *node) { for (int i = 0; i < node->names.size(); i++) { AST_alias *alias = node->names[i]; std::string &name = alias->name; if (alias->asname.size()) name = alias->asname; _doSet(name); } return true; }
void _doSet(AST* t) { switch (t->type) { case AST_TYPE::Attribute: // doesn't affect definedness (yet?) break; case AST_TYPE::Name: _doSet(((AST_Name*)t)->id); break; case AST_TYPE::Subscript: break; case AST_TYPE::Tuple: { AST_Tuple *tt = static_cast<AST_Tuple*>(t); for (int i = 0; i < tt->elts.size(); i++) { _doSet(tt->elts[i]); } break; } default: ASSERT(0, "Unknown type for DefinednessVisitor: %d", t->type); } }
virtual bool visit_assign(AST_Assign *node) { for (int i = 0; i < node->targets.size(); i++) { _doSet(node->targets[i]); } return true; }
virtual bool visit_functiondef(AST_FunctionDef *node) { _doSet(node->name); return true; }
virtual bool visit_classdef(AST_ClassDef *node) { _doSet(node->name); return true; }
bool visit_loadname(BST_LoadName* node) override { // don't visit the vreg it will never get killed // visit_vreg(&node->vreg, false); _doSet(node->vreg_dst); return true; }
bool visit_copyvreg(BST_CopyVReg* node) override { // don't visit the vreg it will never get killed // visit_vreg(&node->vreg_src, false); _doSet(node->vreg_dst); return true; }