Ejemplo n.º 1
0
def _optimizeModulePass(module, tag_set):
    def signalChange(tags, source_ref, message):
        """ Indicate a change to the optimization framework.

        """
        debug("%s : %s : %s" % (source_ref.getAsString(), tags, message))

        tag_set.onSignal(tags)

    constraint_collection = ConstraintCollectionModule(signalChange)
    constraint_collection.process(module=module)

    written_variables = constraint_collection.getWrittenVariables()

    for variable in Variables.getModuleVariables(module=module):
        old_value = variable.getReadOnlyIndicator()
        new_value = variable not in written_variables

        if old_value is not new_value and new_value:
            # Don't suddenly start to write.
            assert not (new_value is False and old_value is True)

            constraint_collection.signalChange(
                "read_only_mvar", module.getSourceReference(),
                "Determined variable '%s' is only read." % variable.getName())

            variable.setReadOnlyIndicator(new_value)
Ejemplo n.º 2
0
def _optimizeModulePass( module, tag_set ):
    def signalChange( tags, source_ref, message ):
        """ Indicate a change to the optimization framework.

        """
        debug( "%s : %s : %s" % ( source_ref.getAsString(), tags, message ) )

        tag_set.onSignal( tags )

    constraint_collection = ConstraintCollectionModule( signalChange )
    constraint_collection.process( module = module )

    written_variables = constraint_collection.getWrittenVariables()

    for variable in Variables.getModuleVariables( module = module ):
        old_value = variable.getReadOnlyIndicator()
        new_value = variable not in written_variables

        if old_value is not new_value and new_value:
            # Don't suddenly start to write.
            assert not (new_value is False and old_value is True)

            constraint_collection.signalChange(
                "read_only_mvar",
                module.getSourceReference(),
                "Determined variable '%s' is only read." % variable.getName()
            )

            variable.setReadOnlyIndicator( new_value )