Ignore:
Timestamp:
Jan 19, 2015, 6:29:10 PM (10 years ago)
Author:
Peter A. Buhr <pabuhr@…>
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:
f7f6785
Parents:
0b8cd722
Message:

add list initializer, formatting changes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • translator/ResolvExpr/Resolver.cc

    r0b8cd722 r6c3744e  
    246246            singleInit->set_value( newExpr );
    247247        } // if
    248         singleInit->get_value()->accept( *this );
     248//      singleInit->get_value()->accept( *this );
    249249    }
    250250
    251251    void Resolver::visit( ListInit *listInit ) {
    252         // no cast necessary
     252        if ( ArrayType *at = dynamic_cast<ArrayType*>(initContext) ) {
     253            initContext = at->get_base();
     254            Visitor::visit( listInit );
     255        } else if ( StructInstType *st = dynamic_cast<StructInstType*>(initContext) ) {
     256            StructDecl *baseStruct = st->get_baseStruct();
     257            std::list<Declaration *>::iterator iter1( baseStruct->get_members().begin() );
     258            std::list<Initializer *>::iterator iter2( listInit->begin_initializers() );
     259            for ( ; iter1 != baseStruct->get_members().end() && iter2 != listInit->end_initializers() ; ++iter1, ++iter2 ) {
     260                DeclarationWithType *dt = dynamic_cast<DeclarationWithType *>( *iter1 );
     261                initContext = dt->get_type();
     262                (*iter2)->accept( *this );
     263            }
     264        } else if ( UnionInstType *st = dynamic_cast<UnionInstType*>(initContext) ) {
     265            DeclarationWithType *dt = dynamic_cast<DeclarationWithType *>( *st->get_baseUnion()->get_members().begin() );
     266            initContext = dt->get_type();
     267            (*listInit->begin_initializers())->accept( *this );
     268        } // if
    253269    }
    254270} // namespace ResolvExpr
Note: See TracChangeset for help on using the changeset viewer.