Changeset 3848e0e for translator/Parser/InitializerNode.cc
- Timestamp:
- Dec 3, 2014, 3:08:38 PM (10 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, gc_noraii, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, string, with_gc
- Children:
- d9a0e76
- Parents:
- 42dcae7
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
translator/Parser/InitializerNode.cc
r42dcae7 r3848e0e 9 9 10 10 InitializerNode::InitializerNode( ExpressionNode *_expr, bool aggrp, ExpressionNode *des ) 11 : expr( _expr ), aggregate( aggrp ), designator( des ), kids( 0 ) 12 { 13 if ( aggrp ) 14 kids = dynamic_cast< InitializerNode *>( get_link() ); 11 : expr( _expr ), aggregate( aggrp ), designator( des ), kids( 0 ) { 12 if ( aggrp ) 13 kids = dynamic_cast< InitializerNode *>( get_link() ); 15 14 16 if ( kids != 0 )17 15 if ( kids != 0 ) 16 set_link( 0 ); 18 17 } 19 18 20 19 InitializerNode::InitializerNode( InitializerNode *init, bool aggrp, ExpressionNode *des ) 21 : aggregate( aggrp ), designator( des ), kids( 0 ) 22 { 23 if (init != 0) 24 set_link(init); 20 : aggregate( aggrp ), designator( des ), kids( 0 ) { 21 if ( init != 0 ) 22 set_link(init); 25 23 26 if ( aggrp )27 24 if ( aggrp ) 25 kids = dynamic_cast< InitializerNode *>( get_link() ); 28 26 29 if ( kids != 0 )30 27 if ( kids != 0 ) 28 set_next( 0 ); 31 29 } 32 30 33 31 InitializerNode::~InitializerNode() { 34 delete expr;32 delete expr; 35 33 } 36 34 37 35 void InitializerNode::print( std::ostream &os, int indent ) const { 38 os << std::string(indent, ' ') << "Initializer expression" << std::endl;36 os << std::string(indent, ' ') << "Initializer expression" << std::endl; 39 37 } 40 38 41 39 void InitializerNode::printOneLine( std::ostream &os ) const { 42 if (!aggregate) 43 { 44 45 if ( designator != 0 ) 46 { 47 os << "designated by: ("; 48 ExpressionNode *curdes = designator; 49 while( curdes != 0){ 50 curdes->printOneLine(os); 51 curdes = (ExpressionNode *)(curdes->get_link()); 52 if(curdes) os << ", "; 53 } 54 os << ")"; 40 if ( ! aggregate ) { 41 if ( designator != 0 ) { 42 os << "designated by: ("; 43 ExpressionNode *curdes = designator; 44 while( curdes != 0) { 45 curdes->printOneLine(os); 46 curdes = (ExpressionNode *)(curdes->get_link()); 47 if ( curdes ) os << ", "; 48 } 49 os << ")"; 55 50 } 56 57 if (expr) expr->printOneLine(os); 58 } 59 else // It's an aggregate 60 { 61 os << "[--"; 62 if( next_init() != 0 ) 63 next_init()->printOneLine(os); 64 65 if (aggregate) os << "--]"; 51 if ( expr ) expr->printOneLine(os); 52 } else { // It's an aggregate 53 os << "[--"; 54 if ( next_init() != 0 ) 55 next_init()->printOneLine(os); 56 if (aggregate) os << "--]"; 66 57 } 67 58 68 InitializerNode *moreInit;69 if ( get_link() != 0 && ((moreInit = dynamic_cast< InitializerNode * >( get_link() ) ) != 0) )70 59 InitializerNode *moreInit; 60 if ( get_link() != 0 && ((moreInit = dynamic_cast< InitializerNode * >( get_link() ) ) != 0) ) 61 moreInit->printOneLine( os ); 71 62 } 72 63 73 64 Initializer *InitializerNode::build() const { 74 // if ( get_expression() == 0 ) return 0; // XXX (?)65 // if ( get_expression() == 0 ) return 0; // XXX (?) 75 66 76 if ( aggregate ) 77 { 78 assert( next_init() != 0 ); 67 if ( aggregate ) { 68 assert( next_init() != 0 ); 79 69 80 81 70 std::list< Initializer *> initlist; 71 buildList<Initializer, InitializerNode>( next_init(), initlist ); 82 72 83 84 85 buildList<Expression, ExpressionNode>( designator, designlist );73 std::list< Expression *> designlist; 74 if ( designator != 0 ) 75 buildList<Expression, ExpressionNode>( designator, designlist ); 86 76 87 return new ListInit( initlist, designlist ); 88 } 89 else 90 { 91 std::list< Expression *> designators; 77 return new ListInit( initlist, designlist ); 78 } else { 79 std::list< Expression *> designators; 92 80 93 94 buildList<Expression, ExpressionNode>( designator, designators );81 if ( designator != 0 ) 82 buildList<Expression, ExpressionNode>( designator, designators ); 95 83 96 97 return new SingleInit( get_expression()->build(), designators );84 if ( get_expression() != 0) 85 return new SingleInit( get_expression()->build(), designators ); 98 86 } 99 87 100 return 0;88 return 0; 101 89 } 102 103
Note: See TracChangeset
for help on using the changeset viewer.