Python compat - iterator protocol

In Python2 next() is used wile it's __next__ in Python3.

Differential Revision: https://reviews.llvm.org/D56250

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350326 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Serge Guelton 2019-01-03 15:43:14 +00:00
parent 39c11273d1
commit 19b8509e55
2 changed files with 26 additions and 14 deletions

View File

@ -19,6 +19,8 @@ from ctypes import byref
from ctypes import c_char_p
from ctypes import c_uint
import sys
__all__ = [
"lib",
"Enums",
@ -236,7 +238,7 @@ class Module(LLVMObject):
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 @@ class Module(LLVMObject):
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 @@ class Function(Value):
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 @@ class Function(Value):
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 @@ class BasicBlock(LLVMObject):
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 @@ class BasicBlock(LLVMObject):
else:
self.inst = self.inst.next
return result
if sys.version_info.major == 2:
next = __next__
def __iter__(self):
return BasicBlock.__inst_iterator(self)

View File

@ -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 @@ class ArrayRefPrinter:
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 @@ class ArrayRefPrinter:
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 @@ class DenseMapPrinter:
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 @@ class DenseMapPrinter:
self.first = False
return 'x', v
__next__ = next
if sys.version_info.major == 2:
next = __next__
def __init__(self, val):
self.val = val