Index: third_party/google-endpoints/setuptools/py33compat.py |
diff --git a/third_party/google-endpoints/setuptools/py33compat.py b/third_party/google-endpoints/setuptools/py33compat.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0caa2003d816997921972cc5f63f180da1a2f05f |
--- /dev/null |
+++ b/third_party/google-endpoints/setuptools/py33compat.py |
@@ -0,0 +1,45 @@ |
+import dis |
+import array |
+import collections |
+ |
+import six |
+ |
+ |
+OpArg = collections.namedtuple('OpArg', 'opcode arg') |
+ |
+ |
+class Bytecode_compat(object): |
+ def __init__(self, code): |
+ self.code = code |
+ |
+ def __iter__(self): |
+ """Yield '(op,arg)' pair for each operation in code object 'code'""" |
+ |
+ bytes = array.array('b', self.code.co_code) |
+ eof = len(self.code.co_code) |
+ |
+ ptr = 0 |
+ extended_arg = 0 |
+ |
+ while ptr < eof: |
+ |
+ op = bytes[ptr] |
+ |
+ if op >= dis.HAVE_ARGUMENT: |
+ |
+ arg = bytes[ptr + 1] + bytes[ptr + 2] * 256 + extended_arg |
+ ptr += 3 |
+ |
+ if op == dis.EXTENDED_ARG: |
+ long_type = six.integer_types[-1] |
+ extended_arg = arg * long_type(65536) |
+ continue |
+ |
+ else: |
+ arg = None |
+ ptr += 1 |
+ |
+ yield OpArg(op, arg) |
+ |
+ |
+Bytecode = getattr(dis, 'Bytecode', Bytecode_compat) |