Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Common/Examine.cc

    r4f6dda0 r1c01c58  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // Examine.cc -- Helpers for examining AST code.
     7// Examine.h --
    88//
    99// Author           : Andrew Beach
    1010// Created On       : Wed Sept 2 14:02 2020
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Fri Dec 10 10:27 2021
    13 // Update Count     : 1
     12// Last Modified On : Wed Sep  8 12:15 2020
     13// Update Count     : 0
    1414//
    1515
    1616#include "Common/Examine.h"
    1717
    18 #include "AST/Type.hpp"
    1918#include "CodeGen/OperatorTable.h"
    20 #include "InitTweak/InitTweak.h"
    2119
    2220DeclarationWithType * isMainFor( FunctionDecl * func, AggregateDecl::Aggregate kind ) {
     
    3836
    3937namespace {
    40 
    41 // getTypeofThis but does some extra checks used in this module.
    42 const ast::Type * getTypeofThisSolo( const ast::FunctionDecl * func ) {
    43         if ( 1 != func->params.size() ) {
    44                 return nullptr;
    45         }
    46         auto ref = func->type->params.front().as<ast::ReferenceType>();
    47         return (ref) ? ref->base : nullptr;
    48 }
    49 
    50 }
    51 
    52 const ast::DeclWithType * isMainFor(
    53                 const ast::FunctionDecl * func, ast::AggregateDecl::Aggregate kind ) {
    54         if ( "main" != func->name ) return nullptr;
    55         if ( 1 != func->params.size() ) return nullptr;
    56 
    57         auto param = func->params.front();
    58 
    59         auto type = dynamic_cast<const ast::ReferenceType *>( param->get_type() );
    60         if ( !type ) return nullptr;
    61 
    62         auto obj = type->base.as<ast::StructInstType>();
    63         if ( !obj ) return nullptr;
    64 
    65         if ( kind != obj->base->kind ) return nullptr;
    66 
    67         return param;
    68 }
    69 
    70 namespace {
    7138        Type * getDestructorParam( FunctionDecl * func ) {
    7239                if ( !CodeGen::isDestructor( func->name ) ) return nullptr;
     
    8148                return nullptr;
    8249        }
    83 
    84 const ast::Type * getDestructorParam( const ast::FunctionDecl * func ) {
    85         if ( !CodeGen::isDestructor( func->name ) ) return nullptr;
    86         //return InitTweak::getParamThis( func )->type;
    87         return getTypeofThisSolo( func );
    88 }
    89 
    9050}
    9151
     
    9757        return false;
    9858}
    99 
    100 bool isDestructorFor(
    101                 const ast::FunctionDecl * func, const ast::StructDecl * type_decl ) {
    102         if ( const ast::Type * type = getDestructorParam( func ) ) {
    103                 auto stype = dynamic_cast<const ast::StructInstType *>( type );
    104                 return stype && stype->base.get() == type_decl;
    105         }
    106         return false;
    107 }
Note: See TracChangeset for help on using the changeset viewer.