Changeset 462a7c7


Ignore:
Timestamp:
Jun 14, 2019, 11:56:12 AM (5 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
Children:
120a28c3
Parents:
21300d7
Message:

Removed non-moving assignment on ParamEntry? to help debugging

Location:
src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/ResolveAssertions.cc

    r21300d7 r462a7c7  
    325325                                        entry.second.expr = postmutate( entry.second.expr );
    326326                                        // xxx - look at entry.second.inferParams?
    327                                         expr->inferParams[ entry.first ] = entry.second;
     327                                        auto res = expr->inferParams.emplace( entry.first, entry.second );
     328                                        assert(res.second);
    328329                                }
    329330                        }
  • src/SynTree/ApplicationExpr.cc

    r21300d7 r462a7c7  
    2828#include "Type.h"                // for Type, PointerType, FunctionType
    2929
     30ParamEntry::ParamEntry( UniqueId decl, Declaration * declptr, Type * actualType, Type * formalType, Expression* expr )
     31                : decl( decl ), declptr( declptr ), actualType( actualType ), formalType( formalType ), expr( expr ) {
     32        }
     33
    3034ParamEntry::ParamEntry( const ParamEntry &other ) :
    31                 decl( other.decl ), declptr( maybeClone( other.declptr ) ), actualType( maybeClone( other.actualType ) ), formalType( maybeClone( other.formalType ) ), expr( maybeClone( other.expr ) )/*, inferParams( new InferredParams( *other.inferParams ) )*/ {
    32 }
    33 
    34 ParamEntry &ParamEntry::operator=( const ParamEntry &other ) {
    35         if ( &other == this ) return *this;
    36         const_cast<UniqueId &>(decl) = other.decl;
    37         const_cast<Declaration * &>(declptr) = maybeClone( other.declptr );
    38         // xxx - this looks like a memory leak
    39         const_cast<Type * &>(actualType) = maybeClone( other.actualType );
    40         const_cast<Type * &>(formalType) = maybeClone( other.formalType );
    41         expr = maybeClone( other.expr );
    42         // *inferParams = *other.inferParams;
    43         return *this;
     35                decl( other.decl ), declptr( maybeClone( other.declptr ) ), actualType( maybeClone( other.actualType ) ), formalType( maybeClone( other.formalType ) ), expr( maybeClone( other.expr ) ) {
    4436}
    4537
     
    5244
    5345ParamEntry::ParamEntry( ParamEntry && other ) :
    54                 decl( other.decl ), declptr( other.declptr ), actualType( other.actualType ), formalType( other.formalType ), expr( other.expr )/*, inferParams( std::move( other.inferParams ) )*/ {
    55         const_cast<Declaration * &>(other.declptr) = nullptr;
    56         const_cast<Type * &>(other.actualType) = nullptr;
    57         const_cast<Type * &>(other.formalType) = nullptr;
    58         other.expr = nullptr;
     46                decl( other.decl ), declptr( other.declptr ), actualType( other.actualType ), formalType( other.formalType ), expr( other.expr ) {
     47        new (&other) ParamEntry();
    5948}
    6049
    6150ParamEntry & ParamEntry::operator=( ParamEntry && other ) {
    6251        if ( &other == this ) return *this;
    63         delete declptr;
    64         delete actualType;
    65         delete formalType;
    66         delete expr;
    67         const_cast<UniqueId &>(decl) = other.decl;
    68         const_cast<Declaration * &>(declptr) = other.declptr;
    69         const_cast<Type * &>(actualType) = other.actualType;
    70         const_cast<Type * &>(formalType) = other.formalType;
    71         expr = other.expr;
    72         const_cast<Declaration * &>(other.declptr) = nullptr;
    73         const_cast<Type * &>(other.actualType) = nullptr;
    74         const_cast<Type * &>(other.formalType) = nullptr;
    75         other.expr = nullptr;
    76         // inferParams = std::move( other.inferParams );
     52        this->~ParamEntry();
     53        new (this) ParamEntry(other.decl, other.declptr, other.actualType, other.formalType, other.expr);
     54        new (&other) ParamEntry();
     55
    7756        return *this;
    7857}
  • src/SynTree/Expression.h

    r21300d7 r462a7c7  
    3939/// but subject to decay-to-pointer and type parameter renaming
    4040struct ParamEntry {
    41         ParamEntry(): decl( 0 ), declptr(nullptr), actualType( 0 ), formalType( 0 ), expr( 0 )/*, inferParams( new InferredParams )*/ {}
    42         ParamEntry( UniqueId decl, Declaration * declptr, Type * actualType, Type * formalType, Expression* expr )
    43                 : decl( decl ), declptr( declptr ), actualType( actualType ), formalType( formalType ), expr( expr )/*, inferParams( new InferredParams )*/ {
    44         }
     41        ParamEntry(): decl( 0 ), declptr( nullptr ), actualType( nullptr ), formalType( nullptr ), expr( nullptr ) {}
     42        ParamEntry( UniqueId decl, Declaration * declptr, Type * actualType, Type * formalType, Expression* expr );
    4543        ParamEntry( const ParamEntry & other );
    4644        ParamEntry( ParamEntry && other );
    4745        ~ParamEntry();
    48         ParamEntry & operator=( const ParamEntry & other );
    4946        ParamEntry & operator=( ParamEntry && other );
    5047
     
    5451        Type * const formalType;
    5552        Expression * expr;
    56         // std::unique_ptr< InferredParams > inferParams;
    5753};
    5854
Note: See TracChangeset for help on using the changeset viewer.