Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ControlStruct/ExceptTranslate.cc

    r66ba544 rb2de2e0  
    1010// Created On       : Wed Jun 14 16:49:00 2017
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Thr May 21 13:18:00 2020
    13 // Update Count     : 15
     12// Last Modified On : Tue May 26 10:56:00 2020
     13// Update Count     : 16
    1414//
    1515
     
    107107                        nameOf( terminate_handler_except ),
    108108                        new ConstantExpr( Constant::null(
    109                                 //new PointerType(
    110                                 //      noQualifiers,
    111                                         terminate_handler_except->get_type()->clone()
    112                                 //      )
     109                                terminate_handler_except->get_type()->clone()
    113110                                ) )
    114111                        ) ) );
     
    137134                ObjectDecl * decl = dynamic_cast<ObjectDecl *>( catchStmt->get_decl() );
    138135                // Also checking the type would be nice.
    139                 if ( decl ) {
    140                         // Pass.
    141                 } else if ( CatchStmt::Terminate == catchStmt->get_kind() ) {
    142                         SemanticError(catchStmt->location, "catch must have exception type");
    143                 } else {
    144                         SemanticError(catchStmt->location, "catchResume must have exception type");
     136                if ( !decl || !dynamic_cast<PointerType *>( decl->type ) ) {
     137                        std::string kind = (CatchStmt::Terminate == catchStmt->kind) ? "catch" : "catchResume";
     138                        SemanticError( catchStmt->location, kind + " must have pointer to an exception type" );
    145139                }
    146140
     
    232226
    233227                void premutate( StructDecl *structDecl );
    234                 Statement * postmutate( ThrowStmt *throwStmt );
    235228                Statement * postmutate( TryStmt *tryStmt );
    236229        };
     
    621614        }
    622615
    623         Statement * TryMutatorCore::postmutate( ThrowStmt * ) {
    624                 // All throws should be removed by this point.
    625                 assert( false );
    626         }
    627 
    628616        Statement * TryMutatorCore::postmutate( TryStmt *tryStmt ) {
    629617                assert( except_decl );
Note: See TracChangeset for help on using the changeset viewer.