Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Common/Examine.cc

    rc6b4432 r4f6dda0  
    1919#include "CodeGen/OperatorTable.h"
    2020#include "InitTweak/InitTweak.h"
     21
     22DeclarationWithType * isMainFor( FunctionDecl * func, AggregateDecl::Aggregate kind ) {
     23        if (func->name != "main") return nullptr;
     24        if (func->type->parameters.size() != 1) return nullptr;
     25
     26        auto param = func->type->parameters.front();
     27
     28        auto type = dynamic_cast<ReferenceType * >(param->get_type());
     29        if (!type) return nullptr;
     30
     31        auto obj = dynamic_cast<StructInstType *>(type->base);
     32        if (!obj) return nullptr;
     33
     34        if (kind != obj->baseStruct->kind) return nullptr;
     35
     36        return param;
     37}
    2138
    2239namespace {
     
    5269
    5370namespace {
     71        Type * getDestructorParam( FunctionDecl * func ) {
     72                if ( !CodeGen::isDestructor( func->name ) ) return nullptr;
     73
     74                auto params = func->type->parameters;
     75                if ( 1 != params.size() ) return nullptr;
     76
     77                auto ref = dynamic_cast<ReferenceType *>( params.front()->get_type() );
     78                if ( ref ) {
     79                        return ref->base;
     80                }
     81                return nullptr;
     82        }
    5483
    5584const ast::Type * getDestructorParam( const ast::FunctionDecl * func ) {
     
    5988}
    6089
     90}
     91
     92bool isDestructorFor( FunctionDecl * func, StructDecl * type_decl ) {
     93        if ( Type * type = getDestructorParam( func ) ) {
     94                auto stype = dynamic_cast<StructInstType *>( type );
     95                return stype && stype->baseStruct == type_decl;
     96        }
     97        return false;
    6198}
    6299
Note: See TracChangeset for help on using the changeset viewer.