Changeset ce8c12f for src/InitTweak


Ignore:
Timestamp:
May 15, 2017, 11:30:26 AM (8 years ago)
Author:
Rob Schluntz <rschlunt@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
d36c117
Parents:
65aca88
Message:

initial work on references: reference types passed through the system, very simple examples work

Location:
src/InitTweak
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified src/InitTweak/FixInit.cc

    r65aca88 rce8c12f  
    400400
    401401                bool ResolveCopyCtors::skipCopyConstruct( Type * type ) {
    402                         return dynamic_cast< VarArgsType * >( type ) || GenPoly::getFunctionType( type ) || Tuples::isTtype( type );
     402                        return dynamic_cast< VarArgsType * >( type ) || dynamic_cast< ReferenceType * >( type ) || GenPoly::getFunctionType( type ) || Tuples::isTtype( type );
    403403                }
    404404
  • TabularUnified src/InitTweak/GenInit.cc

    r65aca88 rce8c12f  
    243243                        std::list< DeclarationWithType * > & params = GenPoly::getFunctionType( dwt->get_type() )->get_parameters();
    244244                        assert( ! params.empty() );
    245                         PointerType * type = safe_dynamic_cast< PointerType * >( params.front()->get_type() );
    246                         managedTypes.insert( SymTab::Mangler::mangle( type->get_base() ) );
     245                        Type * type = InitTweak::getPointerBase( params.front()->get_type() );
     246                        assert( type );
     247                        managedTypes.insert( SymTab::Mangler::mangle( type ) );
    247248                }
    248249        }
  • TabularUnified src/InitTweak/InitTweak.cc

    r65aca88 rce8c12f  
    461461                } else if ( ArrayType * arrayType = dynamic_cast< ArrayType * >( type ) ) {
    462462                        return arrayType->get_base();
     463                } else if ( ReferenceType * refType = dynamic_cast< ReferenceType * >( type ) ) {
     464                        return refType->get_base();
    463465                } else {
    464466                        return NULL;
     
    544546                if ( ftype->get_parameters().size() != 2 ) return 0;
    545547
    546                 Type * t1 = ftype->get_parameters().front()->get_type();
     548                Type * t1 = getPointerBase( ftype->get_parameters().front()->get_type() );
    547549                Type * t2 = ftype->get_parameters().back()->get_type();
    548                 PointerType * ptrType = dynamic_cast< PointerType * > ( t1 );
    549                 assert( ptrType );
    550 
    551                 if ( ResolvExpr::typesCompatibleIgnoreQualifiers( ptrType->get_base(), t2, SymTab::Indexer() ) ) {
     550                assert( t1 );
     551
     552                if ( ResolvExpr::typesCompatibleIgnoreQualifiers( t1, t2, SymTab::Indexer() ) ) {
    552553                        return function;
    553554                } else {
Note: See TracChangeset for help on using the changeset viewer.