Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/GenPoly/Specialize.cc

    r0f8e4ac rd3b7937  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Thu Apr 28 15:17:45 2016
    13 // Update Count     : 24
     12// Last Modified On : Wed Jan 20 12:40:33 2016
     13// Update Count     : 18
    1414//
    1515
     
    2525#include "SynTree/Statement.h"
    2626#include "SynTree/Type.h"
    27 #include "SynTree/Attribute.h"
    2827#include "SynTree/TypeSubstitution.h"
    2928#include "SynTree/Mutator.h"
     
    4241                virtual Expression * mutate( AddressExpr *castExpr );
    4342                virtual Expression * mutate( CastExpr *castExpr );
    44                 // virtual Expression * mutate( LogicalExpr *logicalExpr );
    45                 // virtual Expression * mutate( ConditionalExpr *conditionalExpr );
    46                 // virtual Expression * mutate( CommaExpr *commaExpr );
     43                virtual Expression * mutate( LogicalExpr *logicalExpr );
     44                virtual Expression * mutate( ConditionalExpr *conditionalExpr );
     45                virtual Expression * mutate( CommaExpr *commaExpr );
    4746
    4847          private:
     
    9998                } // if
    10099                // create new thunk with same signature as formal type (C linkage, empty body)
    101                 FunctionDecl *thunkFunc = new FunctionDecl( thunkNamer.newName(), DeclarationNode::NoStorageClass, LinkageSpec::C, newType, new CompoundStmt( noLabels ), false, false );
     100                FunctionDecl *thunkFunc = new FunctionDecl( thunkNamer.newName(), DeclarationNode::NoStorageClass, LinkageSpec::C, newType, new CompoundStmt( std::list< std::string >() ), false, false );
    102101                thunkFunc->fixUniqueId();
    103 
    104                 // thunks may be generated and not used - silence warning with attribute
    105                 thunkFunc->get_attributes().push_back( new Attribute( "unused" ) );
    106102
    107103                // thread thunk parameters into call to actual function, naming thunk parameters as we go
     
    146142
    147143        Expression * Specialize::doSpecialization( Type *formalType, Expression *actual, InferredParams *inferParams ) {
    148                 assert( ! actual->get_results().empty() ); // using front, should have this assert
     144                assert( ! actual->get_results().empty() );
    149145                if ( needsSpecialization( formalType, actual->get_results().front(), env ) ) {
    150146                        FunctionType *funType;
     
    216212        }
    217213
    218         // Removing these for now. Richard put these in for some reason, but it's not clear why.
    219         // In particular, copy constructors produce a comma expression, and with this code the parts
    220         // of that comma expression are not specialized, which causes problems.
    221 
    222         // Expression * Specialize::mutate( LogicalExpr *logicalExpr ) {
    223         //      return logicalExpr;
    224         // }
    225 
    226         // Expression * Specialize::mutate( ConditionalExpr *condExpr ) {
    227         //      return condExpr;
    228         // }
    229 
    230         // Expression * Specialize::mutate( CommaExpr *commaExpr ) {
    231         //      return commaExpr;
    232         // }
     214        Expression * Specialize::mutate( LogicalExpr *logicalExpr ) {
     215                return logicalExpr;
     216        }
     217
     218        Expression * Specialize::mutate( ConditionalExpr *condExpr ) {
     219                return condExpr;
     220        }
     221
     222        Expression * Specialize::mutate( CommaExpr *commaExpr ) {
     223                return commaExpr;
     224        }
    233225} // namespace GenPoly
    234226
Note: See TracChangeset for help on using the changeset viewer.