def apply_all(self, ast): """ Apply mutation to all matches """ start_node = None self.ast = ast f = OmpParallelFilter(device = self.device) num = 0; self.kernel_name = self.kernel_prefix old_prefix = self.kernel_prefix old_parallel = self._parallel try: for elem in f.iterate(ast): # Save previous state self.kernel_name = self.kernel_name + str(num) self.kernel_prefix = self.kernel_prefix + str(num) self._clauses = {} # Current scope variables self._func_def = f.get_func_def() self._target_device_node = f._target_device_node self._clauses = self._get_dict_from_clauses(f._target_device_node.clauses, ast) self._parallel = elem start_node = self.mutatorFunction(ast, elem) # Restore previous state # TODO : Maybe a parent relink is needed? self._parallel = old_parallel self.kernel_prefix = old_prefix self.kernel_name = old_prefix num += 1; except NodeNotFound as nf: print str(nf) except StopIteration: return self._parallel return ast
def filter(self, ast): """ Filter definition Returns the first node matching with the filter""" # Build a visitor , matching the OmpFor node of the AST f = OmpParallelFilter(device = self.device) node = f.apply(ast) self._func_def = f.get_func_def() self._parallel = node return node