예제 #1
0
    bool visit_functiondef(AST_FunctionDef* node) {
        for (auto* d : node->args->defaults)
            d->accept(this);

        _doStore(node->name);
        return true;
    }
예제 #2
0
 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;
 }
예제 #3
0
    bool visit_alias(AST_alias* node) {
        const std::string* name = &node->name;
        if (node->asname.size())
            name = &node->asname;

        _doStore(*name);
        return true;
    }
예제 #4
0
 bool visit_vreg(int* vreg, bool is_dst) override {
     if (*vreg >= 0) {
         if (is_dst)
             _doStore(*vreg);
         else
             _doLoad(*vreg);
     }
     return true;
 }
예제 #5
0
    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;
    }
예제 #6
0
 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;
 }
예제 #7
0
 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;
 }
예제 #8
0
 bool visit_functiondef(AST_FunctionDef* node) {
     _doStore(node->name);
     return true;
 }
예제 #9
0
 bool visit_classdef(AST_ClassDef* node) {
     _doStore(node->name);
     return true;
 }