Changeset 74b007ba


Ignore:
Timestamp:
Aug 14, 2017, 2:05:42 PM (7 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:
36a5a77
Parents:
9236060
Message:

Remove unused isDynamicLayout parameter from autogen, add some more debug information

Location:
src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/AlternativeFinder.cc

    r9236060 r74b007ba  
    633633                AssertionSet newNeed;
    634634                //AssertionParentSet needParents;
     635                PRINT(
     636                        std::cerr << "env is: " << std::endl;
     637                        newAlt.env.print( std::cerr, 0 );
     638                        std::cerr << std::endl;
     639                )
     640
    635641                inferRecursive( need.begin(), need.end(), newAlt, openVars, decls, newNeed, /*needParents,*/ 0, indexer, out );
    636642//      PRINT(
  • src/ResolvExpr/ConversionCost.cc

    r9236060 r74b007ba  
    7777
    7878        Cost convertToReferenceCost( Type * src, Type * dest, int diff, const SymTab::Indexer & indexer, const TypeEnvironment & env ) {
    79                 std::cerr << "convert to reference cost..." << std::endl;
     79                // std::cerr << "convert to reference cost..." << std::endl;
    8080                if ( diff > 0 ) {
    8181                        // TODO: document this
     
    9292                        ReferenceType * destAsRef = dynamic_cast< ReferenceType * >( dest );
    9393                        if ( srcAsRef && destAsRef ) { // pointer-like conversions between references
    94                                 std::cerr << "converting between references" << std::endl;
     94                                // std::cerr << "converting between references" << std::endl;
    9595                                if ( srcAsRef->get_base()->get_qualifiers() <= destAsRef->get_base()->get_qualifiers() && typesCompatibleIgnoreQualifiers( srcAsRef->get_base(), destAsRef->get_base(), indexer, env ) ) {
    9696                                        return Cost::safe;
     
    104104                                } // if
    105105                        } else {
    106                                 std::cerr << "reference to rvalue conversion" << std::endl;
     106                                // std::cerr << "reference to rvalue conversion" << std::endl;
    107107                                ConversionCost converter( dest, indexer, env );
    108108                                src->accept( converter );
     
    113113                        assert( diff == -1 && destAsRef );
    114114                        if ( typesCompatibleIgnoreQualifiers( src, destAsRef->get_base(), indexer, env ) ) {
    115                                 std::cerr << "converting compatible base type" << std::endl;
     115                                // std::cerr << "converting compatible base type" << std::endl;
    116116                                if ( src->get_lvalue() ) {
    117                                         std::cerr << "lvalue to reference conversion" << std::endl;
     117                                        // std::cerr << "lvalue to reference conversion" << std::endl;
    118118                                        // lvalue-to-reference conversion:  cv lvalue T => cv T &
    119119                                        if ( src->get_qualifiers() == destAsRef->get_base()->get_qualifiers() ) {
     
    125125                                        } // if
    126126                                } else if ( destAsRef->get_base()->get_const() ) {
    127                                         std::cerr << "rvalue to const ref conversion" << std::endl;
     127                                        // std::cerr << "rvalue to const ref conversion" << std::endl;
    128128                                        // rvalue-to-const-reference conversion: T => const T &
    129129                                        return Cost::safe;
     
    134134                                } // if
    135135                        } // if
    136                         std::cerr << "attempting to convert from incompatible base type -- fail" << std::endl;
     136                        // std::cerr << "attempting to convert from incompatible base type -- fail" << std::endl;
    137137                }
    138138                return Cost::infinity;
  • src/SymTab/Autogen.cc

    r9236060 r74b007ba  
    156156        }
    157157
    158         /// true if the aggregate's layout is dynamic
    159         template< typename AggrDecl >
    160         bool hasDynamicLayout( AggrDecl * aggregateDecl ) {
    161                 for ( TypeDecl * param : aggregateDecl->get_parameters() ) {
    162                         if ( param->isComplete() ) return true;
    163                 }
    164                 return false;
    165         }
    166 
    167158        /// generate a function decl from a name and type. Nesting depth determines whether
    168159        /// the declaration is static or not; optional paramter determines if declaration is intrinsic
     
    310301
    311302        /// generates a single struct member operation (constructor call, destructor call, assignment call)
    312         void makeStructMemberOp( ObjectDecl * dstParam, Expression * src, DeclarationWithType * field, FunctionDecl * func, bool isDynamicLayout, bool forward = true ) {
     303        void makeStructMemberOp( ObjectDecl * dstParam, Expression * src, DeclarationWithType * field, FunctionDecl * func, bool forward = true ) {
    313304                InitTweak::InitExpander srcParam( src );
    314305
     
    320311        /// generates the body of a struct function by iterating the struct members (via parameters) - generates default ctor, copy ctor, assignment, and dtor bodies, but NOT field ctor bodies
    321312        template<typename Iterator>
    322         void makeStructFunctionBody( Iterator member, Iterator end, FunctionDecl * func, bool isDynamicLayout, bool forward = true ) {
     313        void makeStructFunctionBody( Iterator member, Iterator end, FunctionDecl * func, bool forward = true ) {
    323314                for ( ; member != end; ++member ) {
    324315                        if ( DeclarationWithType *field = dynamic_cast< DeclarationWithType * >( *member ) ) { // otherwise some form of type declaration, e.g. Aggregate
     
    356347
    357348                                Expression *srcselect = srcParam ? new MemberExpr( field, new VariableExpr( srcParam ) ) : NULL;
    358                                 makeStructMemberOp( dstParam, srcselect, field, func, isDynamicLayout, forward );
     349                                makeStructMemberOp( dstParam, srcselect, field, func, forward );
    359350                        } // if
    360351                } // for
     
    364355        /// void ?{}(A *, int) and void?{}(A *, int, int) for a struct A which has two int fields.
    365356        template<typename Iterator>
    366         void makeStructFieldCtorBody( Iterator member, Iterator end, FunctionDecl * func, bool isDynamicLayout ) {
     357        void makeStructFieldCtorBody( Iterator member, Iterator end, FunctionDecl * func ) {
    367358                FunctionType * ftype = func->get_functionType();
    368359                std::list<DeclarationWithType*> & params = ftype->get_parameters();
     
    390381                                        // matching parameter, initialize field with copy ctor
    391382                                        Expression *srcselect = new VariableExpr(*parameter);
    392                                         makeStructMemberOp( dstParam, srcselect, field, func, isDynamicLayout );
     383                                        makeStructMemberOp( dstParam, srcselect, field, func );
    393384                                        ++parameter;
    394385                                } else {
    395386                                        // no matching parameter, initialize field with default ctor
    396                                         makeStructMemberOp( dstParam, NULL, field, func, isDynamicLayout );
     387                                        makeStructMemberOp( dstParam, NULL, field, func );
    397388                                }
    398389                        }
     
    410401                // Make function polymorphic in same parameters as generic struct, if applicable
    411402                const std::list< TypeDecl* > & typeParams = aggregateDecl->get_parameters(); // List of type variables to be placed on the generated functions
    412                 bool isDynamicLayout = hasDynamicLayout( aggregateDecl );  // NOTE this flag is an incredibly ugly kludge; we should fix the assignment signature instead (ditto for union)
    413403
    414404                // generate each of the functions based on the supplied FuncData objects
     
    436426                        // destructor needs to do everything in reverse, so pass "forward" based on whether the function is a destructor
    437427                        if ( ! CodeGen::isDestructor( dcl->get_name() ) ) {
    438                                 makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), dcl, isDynamicLayout );
     428                                makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), dcl );
    439429                        } else {
    440                                 makeStructFunctionBody( aggregateDecl->get_members().rbegin(), aggregateDecl->get_members().rend(), dcl, isDynamicLayout, false );
     430                                makeStructFunctionBody( aggregateDecl->get_members().rbegin(), aggregateDecl->get_members().rend(), dcl, false );
    441431                        }
    442432                        if ( CodeGen::isAssignment( dcl->get_name() ) ) {
     
    474464                                memCtorType->get_parameters().push_back( new ObjectDecl( member->get_name(), Type::StorageClasses(), LinkageSpec::Cforall, 0, member->get_type()->clone(), 0 ) );
    475465                                FunctionDecl * ctor = genFunc( "?{}", memCtorType->clone(), functionNesting );
    476                                 makeStructFieldCtorBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), ctor, isDynamicLayout );
     466                                makeStructFieldCtorBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), ctor );
    477467                                declsToAdd.push_back( ctor );
    478468                        }
Note: See TracChangeset for help on using the changeset viewer.