Changes in / [1118b8b:dee1f89]


Ignore:
Location:
src
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/AlternativeFinder.cc

    r1118b8b rdee1f89  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sat May 16 23:52:08 2015
    11 // Last Modified By : Andrew Beach
    12 // Last Modified On : Thu Aug  8 16:35:00 2019
    13 // Update Count     : 38
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Thu Jul 25 22:37:46 2019
     13// Update Count     : 37
    1414//
    1515
     
    377377        }
    378378
    379         Cost computeConversionCost( Type * actualType, Type * formalType, bool actualIsLvalue,
    380                         const SymTab::Indexer &indexer, const TypeEnvironment & env ) {
     379        Cost computeConversionCost( Type * actualType, Type * formalType, const SymTab::Indexer &indexer, const TypeEnvironment & env ) {
    381380                PRINT(
    382381                        std::cerr << std::endl << "converting ";
     
    388387                        std::cerr << std::endl;
    389388                )
    390                 Cost convCost = conversionCost( actualType, formalType, actualIsLvalue, indexer, env );
     389                Cost convCost = conversionCost( actualType, formalType, indexer, env );
    391390                PRINT(
    392391                        std::cerr << std::endl << "cost is " << convCost << std::endl;
     
    403402
    404403        Cost computeExpressionConversionCost( Expression *& actualExpr, Type * formalType, const SymTab::Indexer &indexer, const TypeEnvironment & env ) {
    405                 Cost convCost = computeConversionCost(
    406                         actualExpr->result, formalType, actualExpr->get_lvalue(), indexer, env );
     404                Cost convCost = computeConversionCost( actualExpr->result, formalType, indexer, env );
    407405
    408406                // if there is a non-zero conversion cost, ignoring poly cost, then the expression requires conversion.
     
    12151213                        unify( castExpr->result, alt.expr->result, alt.env, needAssertions,
    12161214                                haveAssertions, openVars, indexer );
    1217                         Cost thisCost = castCost( alt.expr->result, castExpr->result, alt.expr->get_lvalue(),
    1218                                 indexer, alt.env );
     1215                        Cost thisCost = castCost( alt.expr->result, castExpr->result, indexer,
     1216                                alt.env );
    12191217                        PRINT(
    12201218                                std::cerr << "working on cast with result: " << castExpr->result << std::endl;
     
    16431641                                // xxx - do some inspecting on this line... why isn't result bound to initAlt.type?
    16441642
    1645                                 Cost thisCost = castCost( alt.expr->result, toType, alt.expr->get_lvalue(),
    1646                                         indexer, newEnv );
     1643                                Cost thisCost = castCost( alt.expr->result, toType, indexer, newEnv );
    16471644                                if ( thisCost != Cost::infinity ) {
    16481645                                        // count one safe conversion for each value that is thrown away
  • src/ResolvExpr/CastCost.cc

    r1118b8b rdee1f89  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 06:57:43 2015
    11 // Last Modified By : Andrew Beach
    12 // Last Modified On : Thu Aug  8 16:12:00 2019
    13 // Update Count     : 8
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue Feb  2 15:34:36 2016
     13// Update Count     : 7
    1414//
    1515
     
    3737        struct CastCost_old : public ConversionCost {
    3838          public:
    39                 CastCost_old( const Type * dest, bool srcIsLvalue,
    40                         const SymTab::Indexer &indexer, const TypeEnvironment &env, CostFunction costFunc );
     39                CastCost_old( const Type * dest, const SymTab::Indexer &indexer, const TypeEnvironment &env, CostFunction costFunc );
    4140
    4241                using ConversionCost::previsit;
     
    4645        };
    4746
    48         Cost castCost( const Type * src, const Type * dest, bool srcIsLvalue,
    49                         const SymTab::Indexer &indexer, const TypeEnvironment &env ) {
     47        Cost castCost( const Type * src, const Type * dest, const SymTab::Indexer &indexer, const TypeEnvironment &env ) {
    5048                if ( const TypeInstType * destAsTypeInst = dynamic_cast< const TypeInstType * >( dest ) ) {
    5149                        if ( const EqvClass * eqvClass = env.lookup( destAsTypeInst->name ) ) {
    5250                                if ( eqvClass->type ) {
    53                                         return castCost( src, eqvClass->type, srcIsLvalue, indexer, env );
     51                                        return castCost( src, eqvClass->type, indexer, env );
    5452                                } else {
    5553                                        return Cost::infinity;
     
    5957                                const TypeDecl * type = strict_dynamic_cast< const TypeDecl * >( namedType );
    6058                                if ( type->base ) {
    61                                         return castCost( src, type->base, srcIsLvalue, indexer, env ) + Cost::safe;
     59                                        return castCost( src, type->base, indexer, env ) + Cost::safe;
    6260                                } // if
    6361                        } // if
     
    8078                } else if ( const ReferenceType * refType = dynamic_cast< const ReferenceType * > ( dest ) ) {
    8179                        PRINT( std::cerr << "conversionCost: dest is reference" << std::endl; )
    82                         return convertToReferenceCost( src, refType, srcIsLvalue, indexer, env, [](const Type * t1, const Type * t2, const SymTab::Indexer & indexer, const TypeEnvironment & env ) {
     80                        return convertToReferenceCost( src, refType, indexer, env, [](const Type * t1, const Type * t2, const SymTab::Indexer & indexer, const TypeEnvironment & env ) {
    8381                                return ptrsCastable( t1, t2, env, indexer );
    8482                        });
    8583                } else {
    8684                        PassVisitor<CastCost_old> converter(
    87                                 dest, srcIsLvalue, indexer, env,
    88                                 (Cost (*)( const Type *, const Type *, bool, const SymTab::Indexer &, const TypeEnvironment & ))
     85                                dest, indexer, env,
     86                                (Cost (*)( const Type *, const Type *, const SymTab::Indexer &, const TypeEnvironment & ))
    8987                                        castCost );
    9088                        src->accept( converter );
     
    9896        }
    9997
    100         CastCost_old::CastCost_old( const Type * dest, bool srcIsLvalue,
    101                         const SymTab::Indexer &indexer, const TypeEnvironment &env, CostFunction costFunc )
    102                 : ConversionCost( dest, srcIsLvalue, indexer, env, costFunc ) {
     98        CastCost_old::CastCost_old( const Type * dest, const SymTab::Indexer &indexer, const TypeEnvironment &env, CostFunction costFunc )
     99                : ConversionCost( dest, indexer, env, costFunc ) {
    103100        }
    104101
     
    109106                        cost = Cost::unsafe;
    110107                } else {
    111                         cost = conversionCost( basicType, dest, srcIsLvalue, indexer, env );
     108                        cost = conversionCost( basicType, dest, indexer, env );
    112109                } // if
    113110        }
  • src/ResolvExpr/ConversionCost.cc

    r1118b8b rdee1f89  
    1010// Created On       : Sun May 17 07:06:19 2015
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Mon Aug 12 10:21:00 2019
    13 // Update Count     : 27
     12// Last Modified On : Mon Jun 24 13:33:00 2019
     13// Update Count     : 26
    1414//
    1515
     
    4646#endif
    4747
    48         Cost conversionCost( const Type * src, const Type * dest, bool srcIsLvalue,
    49                         const SymTab::Indexer &indexer, const TypeEnvironment &env ) {
     48        Cost conversionCost( const Type * src, const Type * dest, const SymTab::Indexer &indexer, const TypeEnvironment &env ) {
    5049                if ( const TypeInstType * destAsTypeInst = dynamic_cast< const TypeInstType * >( dest ) ) {
    5150                        PRINT( std::cerr << "type inst " << destAsTypeInst->name; )
    5251                        if ( const EqvClass * eqvClass = env.lookup( destAsTypeInst->name ) ) {
    5352                                if ( eqvClass->type ) {
    54                                         return conversionCost( src, eqvClass->type, srcIsLvalue, indexer, env );
     53                                        return conversionCost( src, eqvClass->type, indexer, env );
    5554                                } else {
    5655                                        return Cost::infinity;
     
    6261                                assert( type );
    6362                                if ( type->base ) {
    64                                         return conversionCost( src, type->base, srcIsLvalue, indexer, env )
    65                                                 + Cost::safe;
     63                                        return conversionCost( src, type->base, indexer, env ) + Cost::safe;
    6664                                } // if
    6765                        } // if
     
    8381                } else if ( const ReferenceType * refType = dynamic_cast< const ReferenceType * > ( dest ) ) {
    8482                        PRINT( std::cerr << "conversionCost: dest is reference" << std::endl; )
    85                         return convertToReferenceCost( src, refType, srcIsLvalue, indexer, env, [](const Type * const t1, const Type * t2, const SymTab::Indexer &, const TypeEnvironment & env ){
     83                        return convertToReferenceCost( src, refType, indexer, env, [](const Type * const t1, const Type * t2, const SymTab::Indexer &, const TypeEnvironment & env ){
    8684                                return ptrsAssignable( t1, t2, env );
    8785                        });
    8886                } else {
    8987                        PassVisitor<ConversionCost> converter(
    90                                 dest, srcIsLvalue, indexer, env,
    91                                 (Cost (*)(const Type *, const Type *, bool, const SymTab::Indexer&, const TypeEnvironment&))
     88                                dest, indexer, env,
     89                                (Cost (*)(const Type *, const Type *, const SymTab::Indexer&, const TypeEnvironment&))
    9290                                        conversionCost );
    9391                        src->accept( converter );
     
    10098        }
    10199
    102         static Cost convertToReferenceCost( const Type * src, const Type * dest, bool srcIsLvalue,
    103                         int diff, const SymTab::Indexer & indexer, const TypeEnvironment & env, PtrsFunction func ) {
     100        static Cost convertToReferenceCost( const Type * src, const Type * dest, int diff, const SymTab::Indexer & indexer, const TypeEnvironment & env, PtrsFunction func ) {
    104101                PRINT( std::cerr << "convert to reference cost... diff " << diff << " " << src << " / " << dest << std::endl; )
    105102                if ( diff > 0 ) {
    106103                        // TODO: document this
    107                         Cost cost = convertToReferenceCost(
    108                                 strict_dynamic_cast< const ReferenceType * >( src )->base, dest, srcIsLvalue,
    109                                 diff-1, indexer, env, func );
     104                        Cost cost = convertToReferenceCost( strict_dynamic_cast< const ReferenceType * >( src )->base, dest, diff-1, indexer, env, func );
    110105                        cost.incReference();
    111106                        return cost;
    112107                } else if ( diff < -1 ) {
    113108                        // TODO: document this
    114                         Cost cost = convertToReferenceCost(
    115                                 src, strict_dynamic_cast< const ReferenceType * >( dest )->base, srcIsLvalue,
    116                                 diff+1, indexer, env, func );
     109                        Cost cost = convertToReferenceCost( src, strict_dynamic_cast< const ReferenceType * >( dest )->base, diff+1, indexer, env, func );
    117110                        cost.incReference();
    118111                        return cost;
     
    145138                                PRINT( std::cerr << "reference to rvalue conversion" << std::endl; )
    146139                                PassVisitor<ConversionCost> converter(
    147                                         dest, srcIsLvalue, indexer, env,
    148                                         (Cost (*)(const Type *, const Type *, bool, const SymTab::Indexer&, const TypeEnvironment&))
     140                                        dest, indexer, env,
     141                                        (Cost (*)(const Type *, const Type *, const SymTab::Indexer&, const TypeEnvironment&))
    149142                                                conversionCost );
    150143                                src->accept( converter );
     
    157150                        if ( typesCompatibleIgnoreQualifiers( src, destAsRef->base, indexer, env ) ) {
    158151                                PRINT( std::cerr << "converting compatible base type" << std::endl; )
    159                                 assert( src->get_lvalue() == srcIsLvalue );
    160                                 if ( srcIsLvalue ) {
     152                                if ( src->get_lvalue() ) {
    161153                                        PRINT(
    162154                                                std::cerr << "lvalue to reference conversion" << std::endl;
     
    186178        }
    187179
    188         Cost convertToReferenceCost( const Type * src, const ReferenceType * dest, bool srcIsLvalue,
    189                         const SymTab::Indexer & indexer, const TypeEnvironment & env, PtrsFunction func ) {
     180        Cost convertToReferenceCost( const Type * src, const ReferenceType * dest, const SymTab::Indexer & indexer, const TypeEnvironment & env, PtrsFunction func ) {
    190181                int sdepth = src->referenceDepth(), ddepth = dest->referenceDepth();
    191                 Cost cost = convertToReferenceCost( src, dest, srcIsLvalue, sdepth-ddepth, indexer, env, func );
     182                Cost cost = convertToReferenceCost( src, dest, sdepth-ddepth, indexer, env, func );
    192183                PRINT( std::cerr << "convertToReferenceCost result: " << cost << std::endl; )
    193184                return cost;
    194185        }
    195186
    196         ConversionCost::ConversionCost( const Type * dest, bool srcIsLvalue, const SymTab::Indexer &indexer, const TypeEnvironment &env, CostFunction costFunc )
    197                 : dest( dest ), srcIsLvalue( srcIsLvalue ), indexer( indexer ), cost( Cost::infinity ), env( env ), costFunc( costFunc ) {
     187        ConversionCost::ConversionCost( const Type * dest, const SymTab::Indexer &indexer, const TypeEnvironment &env, CostFunction costFunc )
     188                : dest( dest ), indexer( indexer ), cost( Cost::infinity ), env( env ), costFunc( costFunc ) {
    198189        }
    199190
     
    380371                // recursively compute conversion cost from T1 to T2.
    381372                // cv can be safely dropped because of 'implicit dereference' behavior.
    382                 cost = costFunc( refType->base, dest, srcIsLvalue, indexer, env );
     373                cost = costFunc( refType->base, dest, indexer, env );
    383374                if ( refType->base->tq == dest->tq ) {
    384375                        cost.incReference();  // prefer exact qualifiers
     
    412403                static Type::Qualifiers q;
    413404                static BasicType integer( q, BasicType::SignedInt );
    414                 cost = costFunc( &integer, dest, srcIsLvalue, indexer, env );  // safe if dest >= int
     405                cost = costFunc( &integer, dest, indexer, env );  // safe if dest >= int
    415406                if ( cost < Cost::unsafe ) {
    416407                        cost.incSafe();
     
    422413        void ConversionCost::postvisit( const TypeInstType * inst ) {
    423414                if ( const EqvClass * eqvClass = env.lookup( inst->name ) ) {
    424                         cost = costFunc( eqvClass->type, dest, srcIsLvalue, indexer, env );
     415                        cost = costFunc( eqvClass->type, dest, indexer, env );
    425416                } else if ( const TypeInstType * destAsInst = dynamic_cast< const TypeInstType * >( dest ) ) {
    426417                        if ( inst->name == destAsInst->name ) {
     
    432423                        assert( type );
    433424                        if ( type->base ) {
    434                                 cost = costFunc( type->base, dest, srcIsLvalue, indexer, env ) + Cost::safe;
     425                                cost = costFunc( type->base, dest, indexer, env ) + Cost::safe;
    435426                        } // if
    436427                } // if
     
    443434                        std::list< Type * >::const_iterator destIt = destAsTuple->types.begin();
    444435                        while ( srcIt != tupleType->types.end() && destIt != destAsTuple->types.end() ) {
    445                                 Cost newCost = costFunc( * srcIt++, * destIt++, srcIsLvalue, indexer, env );
     436                                Cost newCost = costFunc( * srcIt++, * destIt++, indexer, env );
    446437                                if ( newCost == Cost::infinity ) {
    447438                                        return;
  • src/ResolvExpr/ConversionCost.h

    r1118b8b rdee1f89  
    1010// Created On       : Sun May 17 09:37:28 2015
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Thu Aug  8 16:13:00 2019
    13 // Update Count     : 6
     12// Last Modified On : Mon Jun 24 10:00:00 2019
     13// Update Count     : 5
    1414//
    1515
     
    3333        class TypeEnvironment;
    3434
    35         typedef std::function<Cost(const Type *, const Type *, bool,
    36                 const SymTab::Indexer &, const TypeEnvironment &)> CostFunction;
    37 
     35        typedef std::function<Cost(const Type *, const Type *, const SymTab::Indexer &, const TypeEnvironment &)> CostFunction;
    3836        struct ConversionCost : public WithShortCircuiting {
    3937          public:
    40                 ConversionCost( const Type * dest, bool srcIsLvalue,
    41                         const SymTab::Indexer &indexer, const TypeEnvironment &env, CostFunction );
     38                ConversionCost( const Type * dest, const SymTab::Indexer &indexer, const TypeEnvironment &env, CostFunction );
    4239
    4340                Cost get_cost() const { return cost; }
     
    6259          protected:
    6360                const Type * dest;
    64                 bool srcIsLvalue;
    6561                const SymTab::Indexer &indexer;
    6662                Cost cost;
     
    7066
    7167        typedef std::function<int(const Type *, const Type *, const SymTab::Indexer &, const TypeEnvironment &)> PtrsFunction;
    72         Cost convertToReferenceCost( const Type * src, const ReferenceType * dest, bool srcIsLvalue,
    73                 const SymTab::Indexer & indexer, const TypeEnvironment & env, PtrsFunction func );
     68        Cost convertToReferenceCost( const Type * src, const ReferenceType * dest, const SymTab::Indexer & indexer, const TypeEnvironment & env, PtrsFunction func );
    7469
    7570// Some function pointer types, differ in return type.
  • src/ResolvExpr/ResolveAssertions.cc

    r1118b8b rdee1f89  
    99// Author           : Aaron B. Moss
    1010// Created On       : Fri Oct 05 13:46:00 2018
    11 // Last Modified By : Andrew Beach
    12 // Last Modified On : Thu Aug  8 16:47:00 2019
    13 // Update Count     : 3
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Jul 10 16:10:37 2019
     13// Update Count     : 2
    1414//
    1515
     
    156156                        for ( const auto& assn : x.assns ) {
    157157                                // compute conversion cost from satisfying decl to assertion
    158                                 assert( !assn.match.adjType->get_lvalue() );
    159158                                k += computeConversionCost(
    160                                         assn.match.adjType, assn.decl->get_type(), false, indexer, x.env );
     159                                        assn.match.adjType, assn.decl->get_type(), indexer, x.env );
    161160
    162161                                // mark vars+specialization cost on function-type assertions
  • src/ResolvExpr/typeops.h

    r1118b8b rdee1f89  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 07:28:22 2015
    11 // Last Modified By : Andrew Beach
    12 // Last Modified On : Thu Aug  8 16:36:00 2019
    13 // Update Count     : 5
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Fri Feb  8 09:30:34 2019
     13// Update Count     : 4
    1414//
    1515
     
    8080
    8181        // in CastCost.cc
    82         Cost castCost( const Type * src, const Type * dest, bool srcIsLvalue,
    83                 const SymTab::Indexer & indexer, const TypeEnvironment & env );
     82        Cost castCost( const Type * src, const Type * dest, const SymTab::Indexer & indexer, const TypeEnvironment & env );
    8483        Cost castCost(
    8584                const ast::Type * src, const ast::Type * dst, const ast::SymbolTable & symtab,
     
    8786
    8887        // in ConversionCost.cc
    89         Cost conversionCost( const Type * src, const Type * dest, bool srcIsLvalue,
    90                 const SymTab::Indexer & indexer, const TypeEnvironment & env );
     88        Cost conversionCost( const Type * src, const Type * dest, const SymTab::Indexer & indexer, const TypeEnvironment & env );
    9189        Cost conversionCost(
    9290                const ast::Type * src, const ast::Type * dst, const ast::SymbolTable & symtab,
     
    9492
    9593        // in AlternativeFinder.cc
    96         Cost computeConversionCost( Type * actualType, Type * formalType, bool actualIsLvalue,
     94        Cost computeConversionCost( Type * actualType, Type * formalType,
    9795                const SymTab::Indexer & indexer, const TypeEnvironment & env );
    9896
  • src/SynTree/ApplicationExpr.cc

    r1118b8b rdee1f89  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Andrew Beach
    12 // Last Modified On : Mon Aug 12 14:28:00 2019
    13 // Update Count     : 5
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Tue Apr 26 12:41:06 2016
     13// Update Count     : 4
    1414//
    1515
     
    7676}
    7777
    78 bool ApplicationExpr::get_lvalue() const {
    79         return result->get_lvalue();
    80 }
    81 
    8278void ApplicationExpr::print( std::ostream &os, Indenter indent ) const {
    8379        os << "Application of" << std::endl << indent+1;
  • src/SynTree/CommaExpr.cc

    r1118b8b rdee1f89  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Andrew Beach
    12 // Last Modified On : Mon Arg 12 16:11:00 2016
    13 // Update Count     : 2
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Mon May 02 15:19:44 2016
     13// Update Count     : 1
    1414//
    1515
     
    3939}
    4040
    41 bool CommaExpr::get_lvalue() const {
    42         // xxx - as above, shouldn't be an lvalue but that information is used anyways.
    43         return result->get_lvalue();
    44 }
    45 
    4641void CommaExpr::print( std::ostream &os, Indenter indent ) const {
    4742        os << "Comma Expression:" << std::endl;
  • src/SynTree/Expression.cc

    r1118b8b rdee1f89  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Tue Aug 13 11:31:00 2019
    13 // Update Count     : 63
     12// Last Modified On : Wed Aug  7 17:03:00 2019
     13// Update Count     : 62
    1414//
    1515
     
    6464
    6565bool Expression::get_lvalue() const {
    66         assert( !result->get_lvalue() );
    67         return false;
     66        return result->get_lvalue();
    6867}
    6968
     
    139138}
    140139
    141 bool VariableExpr::get_lvalue() const {
    142         return result->get_lvalue();
    143 }
    144 
    145140VariableExpr * VariableExpr::functionPointer( FunctionDecl * func ) {
    146141        VariableExpr * funcExpr = new VariableExpr( func );
     
    274269CastExpr::~CastExpr() {
    275270        delete arg;
    276 }
    277 
    278 bool CastExpr::get_lvalue() const {
    279         return result->get_lvalue();
    280271}
    281272
     
    389380        // don't delete the member declaration, since it points somewhere else in the tree
    390381        delete aggregate;
    391 }
    392 
    393 bool MemberExpr::get_lvalue() const {
    394         assert( result->get_lvalue() );
    395         return true;
    396382}
    397383
     
    446432}
    447433
    448 bool UntypedExpr::get_lvalue() const {
    449         return result->get_lvalue();
    450 }
    451434
    452435void UntypedExpr::print( std::ostream & os, Indenter indent ) const {
     
    507490        delete arg2;
    508491        delete arg3;
    509 }
    510 
    511 bool ConditionalExpr::get_lvalue() const {
    512         return result->get_lvalue();
    513492}
    514493
     
    569548}
    570549
    571 bool ConstructorExpr::get_lvalue() const {
    572         return result->get_lvalue();
    573 }
    574 
    575550void ConstructorExpr::print( std::ostream & os, Indenter indent ) const {
    576551        os <<  "Constructor Expression: " << std::endl << indent+1;
     
    590565CompoundLiteralExpr::~CompoundLiteralExpr() {
    591566        delete initializer;
    592 }
    593 
    594 bool CompoundLiteralExpr::get_lvalue() const {
    595         assert( result->get_lvalue() );
    596         return true;
    597567}
    598568
  • src/SynTree/Expression.h

    r1118b8b rdee1f89  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Tue Aug 13 11:30:00 2019
    13 // Update Count     : 52
     12// Last Modified On : Wed Aug  7 16:56:00 2019
     13// Update Count     : 51
    1414//
    1515
     
    7171        const Type * get_result() const { return result; }
    7272        void set_result( Type * newValue ) { result = newValue; }
    73         virtual bool get_lvalue() const;
     73        bool get_lvalue() const;
    7474
    7575        TypeSubstitution * get_env() const { return env; }
     
    9999        virtual ~ApplicationExpr();
    100100
    101         bool get_lvalue() const final;
    102 
    103101        Expression * get_function() const { return function; }
    104102        void set_function( Expression * newValue ) { function = newValue; }
     
    123121        UntypedExpr( const UntypedExpr & other );
    124122        virtual ~UntypedExpr();
    125 
    126         bool get_lvalue() const final;
    127123
    128124        Expression * get_function() const { return function; }
     
    213209        virtual ~CastExpr();
    214210
    215         bool get_lvalue() const final;
    216 
    217211        Expression * get_arg() const { return arg; }
    218212        void set_arg( Expression * newValue ) { arg = newValue; }
     
    298292        virtual ~MemberExpr();
    299293
    300         bool get_lvalue() const final;
    301 
    302294        DeclarationWithType * get_member() const { return member; }
    303295        void set_member( DeclarationWithType * newValue ) { member = newValue; }
     
    322314        VariableExpr( const VariableExpr & other );
    323315        virtual ~VariableExpr();
    324 
    325         bool get_lvalue() const final;
    326316
    327317        DeclarationWithType * get_var() const { return var; }
     
    511501        virtual ~ConditionalExpr();
    512502
    513         bool get_lvalue() const final;
    514 
    515503        Expression * get_arg1() const { return arg1; }
    516504        void set_arg1( Expression * newValue ) { arg1 = newValue; }
     
    537525        virtual ~CommaExpr();
    538526
    539         bool get_lvalue() const final;
    540 
    541527        Expression * get_arg1() const { return arg1; }
    542528        void set_arg1( Expression * newValue ) { arg1 = newValue; }
     
    625611        ~ConstructorExpr();
    626612
    627         bool get_lvalue() const final;
    628 
    629613        Expression * get_callExpr() const { return callExpr; }
    630614        void set_callExpr( Expression * newValue ) { callExpr = newValue; }
     
    645629        CompoundLiteralExpr( const CompoundLiteralExpr & other );
    646630        virtual ~CompoundLiteralExpr();
    647 
    648         bool get_lvalue() const final;
    649631
    650632        Initializer * get_initializer() const { return initializer; }
     
    723705        TupleIndexExpr( const TupleIndexExpr & other );
    724706        virtual ~TupleIndexExpr();
    725 
    726         bool get_lvalue() const final;
    727707
    728708        Expression * get_tuple() const { return tuple; }
  • src/SynTree/TupleExpr.cc

    r1118b8b rdee1f89  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Andrew Beach
    12 // Last Modified On : Mon Aug 12 14:22:00 2019
    13 // Update Count     : 4
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Fri Mar 17 09:42:29 2017
     13// Update Count     : 3
    1414//
    1515
     
    7878}
    7979
    80 bool TupleIndexExpr::get_lvalue() const {
    81         assert( result->get_lvalue() );
    82         return true;
    83 }
    84 
    8580void TupleIndexExpr::print( std::ostream &os, Indenter indent ) const {
    8681        os << "Tuple Index Expression, with tuple:" << std::endl;
Note: See TracChangeset for help on using the changeset viewer.