Ignore:
Timestamp:
Jul 25, 2017, 10:41:24 AM (7 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:
d335627
Parents:
9191a8e
Message:

Add unsafe_group_iterate

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Tuples/Explode.h

    r9191a8e r6d267ca  
    3030        template< typename OutputIterator >
    3131        void explodeUnique( Expression * expr, const ResolvExpr::Alternative & alt, const SymTab::Indexer & indexer, OutputIterator out, bool isTupleAssign ) {
    32                 Type * res = expr->get_result();
     32                Type * res = expr->get_result()->stripReferences();
    3333                if ( TupleType * tupleType = dynamic_cast< TupleType * > ( res ) ) {
    3434                        if ( TupleExpr * tupleExpr = dynamic_cast< TupleExpr * >( expr ) ) {
     
    3838                                }
    3939                        } else {
    40                                 // tuple type, but not tuple expr - recursively index into its components
     40                                // tuple type, but not tuple expr - recursively index into its components.
     41                                // if expr type is reference, convert to value type
    4142                                Expression * arg = expr->clone();
     43
     44                                if ( dynamic_cast<ReferenceType *>( arg->get_result() ) ) {
     45                                        // TODO: does this go here (inside uniqueexpr) or outside uniqueexpr? I'm guessing probably should go after...
     46                                        arg = new CastExpr( arg, tupleType->clone() );
     47                                }
    4248                                if ( Tuples::maybeImpure( arg ) && ! dynamic_cast< UniqueExpr * >( arg ) ) {
    4349                                        // expressions which may contain side effects require a single unique instance of the expression.
Note: See TracChangeset for help on using the changeset viewer.