Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SynTree/Initializer.cc

    r60089f4 r84bb4d9  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Tue Apr 26 12:50:47 2016
     12// Last Modified On : Tue Apr 26 15:51:35 2016
    1313// Update Count     : 28
    1414//
     
    1616#include "Initializer.h"
    1717#include "Expression.h"
     18#include "Statement.h"
    1819#include "Common/utility.h"
    1920
    20 Initializer::Initializer() {}
     21Initializer::Initializer( bool maybeConstructed ) : maybeConstructed( maybeConstructed ) {}
    2122
    2223Initializer::~Initializer() {}
     
    3132void Initializer::print( std::ostream &os, int indent ) {}
    3233
    33 SingleInit::SingleInit( Expression *v, std::list< Expression *> &_designators ) : value ( v ), designators( _designators ) {
     34SingleInit::SingleInit( Expression *v, const std::list< Expression *> &_designators, bool maybeConstructed ) : Initializer( maybeConstructed ), value ( v ), designators( _designators ) {
    3435}
    3536
    36 SingleInit::SingleInit( const SingleInit &other ) : value ( other.value ) {
     37SingleInit::SingleInit( const SingleInit &other ) : Initializer(other), value ( maybeClone( other.value ) ) {
    3738        cloneAll(other.designators, designators );
    3839}
     
    4445void SingleInit::print( std::ostream &os, int indent ) {
    4546        os << std::endl << std::string(indent, ' ' ) << "Simple Initializer: " << std::endl;
    46         os << std::string(indent+4, ' ' );
    4747        value->print( os, indent+4 );
    4848
     
    5555}
    5656
    57 ListInit::ListInit( std::list<Initializer*> &_initializers, std::list<Expression *> &_designators )
    58         : initializers( _initializers ), designators( _designators ) {
     57ListInit::ListInit( const std::list<Initializer*> &_initializers, const std::list<Expression *> &_designators, bool maybeConstructed )
     58        : Initializer( maybeConstructed), initializers( _initializers ), designators( _designators ) {
    5959}
    6060
     
    8080                (*i)->print( os, indent + 2 );
    8181}
     82
     83
     84ConstructorInit::ConstructorInit( Statement * ctor, Statement * dtor, Initializer * init ) : Initializer( true ), ctor( ctor ), dtor( dtor ), init( init ) {}
     85ConstructorInit::~ConstructorInit() {
     86        delete ctor;
     87        delete init;
     88}
     89
     90ConstructorInit *ConstructorInit::clone() const {
     91        return new ConstructorInit( *this );
     92}
     93
     94void ConstructorInit::print( std::ostream &os, int indent ) {
     95        os << std::endl << std::string(indent, ' ') << "Constructor initializer: " << std::endl;
     96        if ( ctor ) {
     97                os << std::string(indent+2, ' ');
     98                os << "initially constructed with ";
     99                ctor->print( os, indent+4 );
     100        } // if
     101
     102        if ( dtor ) {
     103                os << std::string(indent+2, ' ');
     104                os << "destructed with ";
     105                dtor->print( os, indent+4 );
     106        }
     107
     108        if ( init ) {
     109                os << std::string(indent+2, ' ');
     110                os << "with fallback C-style initializer: ";
     111                init->print( os, indent+4 );
     112        }
     113}
     114
     115std::ostream & operator<<( std::ostream & out, Initializer * init ) {
     116        init->print( out );
     117        return out;
     118}
     119
    82120// Local Variables: //
    83121// tab-width: 4 //
Note: See TracChangeset for help on using the changeset viewer.