Ignore:
Timestamp:
Feb 8, 2017, 5:04:20 PM (8 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:
aa9ee19
Parents:
52c14b3
Message:

make Tuples::maybeImpure slightly more precise

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Tuples/TupleExpansion.cc

    r52c14b3 rb7b8674  
    2929#include "ResolvExpr/typeops.h"
    3030#include "InitTweak/GenInit.h"
     31#include "InitTweak/InitTweak.h"
    3132
    3233namespace Tuples {
     
    337338                public:
    338339                        typedef Visitor Parent;
    339                         virtual void visit( ApplicationExpr * appExpr ) { maybeImpure = true;   }
     340                        virtual void visit( ApplicationExpr * appExpr ) {
     341                                if ( DeclarationWithType * function = InitTweak::getFunction( appExpr ) ) {
     342                                        if ( function->get_linkage() == LinkageSpec::Intrinsic ) {
     343                                                if ( function->get_name() == "*?" || function->get_name() == "?[?]" ) {
     344                                                        // intrinsic dereference, subscript are pure, but need to recursively look for impurity
     345                                                        Parent::visit( appExpr );
     346                                                        return;
     347                                                }
     348                                        }
     349                                }
     350                                maybeImpure = true;
     351                        }
    340352                        virtual void visit( UntypedExpr * untypedExpr ) { maybeImpure = true; }
    341353                        bool maybeImpure = false;
Note: See TracChangeset for help on using the changeset viewer.