Ignore:
Timestamp:
May 25, 2018, 5:01:37 PM (4 years ago)
Author:
Rob Schluntz <rschlunt@…>
Branches:
aaron-thesis, arm-eh, cleanup-dtors, deferred_resn, demangler, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, with_gc
Children:
3ed994e
Parents:
2c88368
git-author:
Rob Schluntz <rschlunt@…> (05/25/18 16:59:30)
git-committer:
Rob Schluntz <rschlunt@…> (05/25/18 17:01:37)
Message:

Add AST support for _Generic, along with C codegen

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SynTree/Expression.cc

    r2c88368 rd807ca2  
    748748}
    749749
     750GenericExpr::Association::Association( Type * type, Expression * expr ) : type( type ), expr( expr ), isDefault( false ) {}
     751GenericExpr::Association::Association( Expression * expr ) : type( nullptr ), expr( expr ), isDefault( true ) {}
     752GenericExpr::Association::Association( const Association & other ) : type( maybeClone( other.type ) ), expr( maybeClone( other.expr ) ), isDefault( other.isDefault ) {}
     753GenericExpr::Association::~Association() {
     754        delete type;
     755        delete expr;
     756}
     757
     758GenericExpr::GenericExpr( Expression * control, const std::list<Association> & assoc ) : Expression(), control( control ), associations( assoc ) {}
     759GenericExpr::GenericExpr( const GenericExpr & other ) : Expression(other), control( maybeClone( other.control ) ), associations( other.associations ) {
     760}
     761GenericExpr::~GenericExpr() {
     762        delete control;
     763}
     764
     765void GenericExpr::print( std::ostream & os, Indenter indent ) const {
     766        os << "C11 _Generic Expression" << std::endl << indent+1;
     767        control->print( os, indent+1 );
     768        os << std::endl << indent+1 << "... with associations: " << std::endl;
     769        for ( const Association & assoc : associations ) {
     770                os << indent+1;
     771                if (assoc.isDefault) {
     772                        os << "... default: ";
     773                        assoc.expr->print( os, indent+1 );
     774                } else {
     775                        os << "... type: ";
     776                        assoc.type->print( os, indent+1 );
     777                        os << std::endl << indent+1 << "... expression: ";
     778                        assoc.expr->print( os, indent+1 );
     779                        os << std::endl;
     780                }
     781                os << std::endl;
     782        }
     783}
    750784
    751785// Local Variables: //
Note: See TracChangeset for help on using the changeset viewer.