Ignore:
Timestamp:
Nov 9, 2016, 2:21:05 PM (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:
b726084
Parents:
23bb1b9
Message:

rework UniqueExpr?, handle UniqueExpr? in FixInit?, fix translation for UniqueExprs?, refactor explode functions and fix AddressExpr? distribution over exploded tuple exprs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SynTree/Expression.cc

    r23bb1b9 r141b786  
    609609
    610610long long UniqueExpr::count = 0;
    611 UniqueExpr::UniqueExpr( Expression *expr, long long idVal ) : expr( new Expression* ), object( new ObjectDecl* ), id( idVal ) {
     611UniqueExpr::UniqueExpr( Expression *expr, long long idVal ) : expr( expr ), object( nullptr ), var( nullptr ), id( idVal ) {
     612        assert( expr );
    612613        assert( count != -1 );
    613614        if ( id == -1 ) id = count++;
    614         set_expr( expr );
    615         assert( expr );
    616615        if ( expr->get_result() ) {
    617616                set_result( expr->get_result()->clone() );
    618617        }
    619         set_object( nullptr );
    620 }
    621 UniqueExpr::UniqueExpr( const UniqueExpr &other ) : Expression( other ), expr( other.expr ), object( other.object ), id( other.id ) {
     618}
     619UniqueExpr::UniqueExpr( const UniqueExpr &other ) : Expression( other ), expr( maybeClone( other.expr ) ), object( maybeClone( other.object ) ), var( maybeClone( other.var ) ), id( other.id ) {
    622620}
    623621UniqueExpr::~UniqueExpr() {
    624         if ( expr.unique() ) {
    625                 delete *expr;
    626         }
    627         if ( object.unique() ) {
    628                 delete *object;
    629         }
     622        delete expr;
     623        delete object;
     624        delete var;
    630625}
    631626void UniqueExpr::print( std::ostream &os, int indent ) const {
Note: See TracChangeset for help on using the changeset viewer.