From dd84c9d6638a9bd8adba22d14b3c616a5e36c409 Mon Sep 17 00:00:00 2001 From: Serge Guelton Date: Thu, 3 Jan 2019 15:43:14 +0000 Subject: [PATCH] Python compat - iterator protocol In Python2 next() is used wile it's __next__ in Python3. Differential Revision: https://reviews.llvm.org/D56250 llvm-svn: 350326 --- llvm/bindings/python/llvm/core.py | 21 ++++++++++++++++----- llvm/utils/gdb-scripts/prettyprinters.py | 19 ++++++++++--------- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/llvm/bindings/python/llvm/core.py b/llvm/bindings/python/llvm/core.py index 43a318f2efbd7..81e354af0620d 100644 --- a/llvm/bindings/python/llvm/core.py +++ b/llvm/bindings/python/llvm/core.py @@ -19,6 +19,8 @@ from ctypes import c_char_p from ctypes import c_uint +import sys + __all__ = [ "lib", "Enums", @@ -236,7 +238,7 @@ def __init__(self, module, reverse=False): def __iter__(self): return self - def next(self): + def __next__(self): if not isinstance(self.function, Function): raise StopIteration("") result = self.function @@ -245,7 +247,10 @@ def next(self): else: self.function = self.function.next return result - + + if sys.version_info.major == 2: + next = __next__ + def __iter__(self): return Module.__function_iterator(self) @@ -304,7 +309,7 @@ def __init__(self, function, reverse=False): def __iter__(self): return self - def next(self): + def __next__(self): if not isinstance(self.bb, BasicBlock): raise StopIteration("") result = self.bb @@ -313,6 +318,9 @@ def next(self): else: self.bb = self.bb.next return result + + if sys.version_info.major == 2: + next = __next__ def __iter__(self): return Function.__bb_iterator(self) @@ -381,7 +389,7 @@ def __init__(self, bb, reverse=False): def __iter__(self): return self - def next(self): + def __next__(self): if not isinstance(self.inst, Instruction): raise StopIteration("") result = self.inst @@ -390,7 +398,10 @@ def next(self): else: self.inst = self.inst.next return result - + + if sys.version_info.major == 2: + next = __next__ + def __iter__(self): return BasicBlock.__inst_iterator(self) diff --git a/llvm/utils/gdb-scripts/prettyprinters.py b/llvm/utils/gdb-scripts/prettyprinters.py index bc669abc75c1c..7ddc33acb20c8 100644 --- a/llvm/utils/gdb-scripts/prettyprinters.py +++ b/llvm/utils/gdb-scripts/prettyprinters.py @@ -1,4 +1,5 @@ from __future__ import print_function +import sys import gdb.printing @@ -6,9 +7,9 @@ class Iterator: def __iter__(self): return self - # Python 2 compatibility - def next(self): - return self.__next__() + if sys.version_info.major == 2: + def next(self): + return self.__next__() def children(self): return self @@ -70,7 +71,7 @@ def __init__(self, begin, end): def __iter__(self): return self - def next(self): + def __next__(self): if self.cur == self.end: raise StopIteration count = self.count @@ -79,13 +80,12 @@ def next(self): self.cur = self.cur + 1 return '[%d]' % count, cur.dereference() - __next__ = next + if sys.version_info.major == 2: + next = __next__ def __init__(self, val): self.val = val - __next__ = next - def children(self): data = self.val['Data'] return self._iterator(data, data + self.val['Length']) @@ -169,7 +169,7 @@ def advancePastEmptyBuckets(self): while self.cur != self.end and (is_equal(self.cur.dereference()['first'], empty) or is_equal(self.cur.dereference()['first'], tombstone)): self.cur = self.cur + 1 - def next(self): + def __next__(self): if self.cur == self.end: raise StopIteration cur = self.cur @@ -182,7 +182,8 @@ def next(self): self.first = False return 'x', v - __next__ = next + if sys.version_info.major == 2: + next = __next__ def __init__(self, val): self.val = val