def _visit_Assign(self, stmt): lhs = self._visit(stmt.targets) if len(lhs) == 1: lhs = lhs[0] else: lhs = PythonTuple(*lhs) rhs = self._visit(stmt.value) expr = Assign(lhs, rhs) # we set the fst to keep track of needed information for errors expr.set_fst(stmt) return expr
def _visit_ListComp(self, stmt): result = self._visit(stmt.elt) generators = list(self._visit(stmt.generators)) if not isinstance(self._scope[-2], ast.Assign): errors.report(PYCCEL_RESTRICTION_LIST_COMPREHENSION_ASSIGN, symbol=stmt, severity='error') lhs = self.get_new_variable() else: lhs = self._visit(self._scope[-2].targets) if len(lhs) == 1: lhs = lhs[0] else: raise NotImplementedError( "A list comprehension cannot be unpacked") index = self.get_new_variable() args = [index] target = IndexedBase(lhs)[args] target = Assign(target, result) assign1 = Assign(index, LiteralInteger(0)) assign1.set_fst(stmt) target.set_fst(stmt) generators[-1].insert2body(target) assign2 = Assign(index, PyccelAdd(index, LiteralInteger(1))) assign2.set_fst(stmt) generators[-1].insert2body(assign2) indices = [generators[-1].target] while len(generators) > 1: F = generators.pop() generators[-1].insert2body(F) indices.append(generators[-1].target) indices = indices[::-1] return FunctionalFor([assign1, generators[-1]], target.rhs, target.lhs, indices, index)