Author: Armin Rigo <[email protected]>
Branch: py3.5
Changeset: r88345:0f0cf56e8485
Date: 2016-11-13 14:56 +0000
http://bitbucket.org/pypy/pypy/changeset/0f0cf56e8485/
Log: hg merge default
diff --git a/rpython/tool/disassembler.py b/rpython/tool/disassembler.py
--- a/rpython/tool/disassembler.py
+++ b/rpython/tool/disassembler.py
@@ -65,6 +65,9 @@
def name(self):
return self.co.co_name
+ def match_name(self, opcode_name):
+ return self.__class__.__name__ == opcode_name
+
def _setup():
for opcode in opname:
diff --git a/rpython/tool/jitlogparser/storage.py
b/rpython/tool/jitlogparser/storage.py
--- a/rpython/tool/jitlogparser/storage.py
+++ b/rpython/tool/jitlogparser/storage.py
@@ -95,7 +95,7 @@
self.filename = fname
self.startlineno = startlineno
self.name = name
- self._first_bytecodes = {} # {lineno: info}
+ self._first_bytecodes = {} # {lineno: bytecode_name}
self._source = None
def __repr__(self):
@@ -104,13 +104,14 @@
def get_opcode_from_info(self, info):
lineno = ~info.bytecode_no
- if self._first_bytecodes.setdefault(lineno, info) is info:
+ bname = info.bytecode_name
+ if self._first_bytecodes.setdefault(lineno, bname) == bname:
# this is the first opcode of the line---or, at least,
# the first time we ask for an Opcode on that line.
line_starts_here = True
else:
line_starts_here = False
- return GenericOpcode(lineno, line_starts_here)
+ return GenericOpcode(lineno, line_starts_here, bname)
@property
def source(self):
@@ -121,7 +122,32 @@
self._source = [s.rstrip('\n\r') for s in src]
return self._source
+
class GenericOpcode(object):
- def __init__(self, lineno, line_starts_here):
+ def __init__(self, lineno, line_starts_here, bytecode_extra=''):
self.lineno = lineno
self.line_starts_here = line_starts_here
+ self.bytecode_extra = bytecode_extra
+
+ def __repr__(self):
+ return 'GenericOpcode(%r, %r, %r)' % (
+ self.lineno, self.line_starts_here, self.bytecode_extra)
+
+ def __eq__(self, other):
+ if not isinstance(other, GenericOpcode):
+ return NotImplemented
+ return (self.lineno == other.lineno and
+ self.line_starts_here == other.line_starts_here and
+ self.bytecode_extra == other.bytecode_extra)
+
+ def __ne__(self, other):
+ if not isinstance(other, GenericOpcode):
+ return NotImplemented
+ return not (self == other)
+
+ def __hash__(self):
+ return hash((self.lineno, self.line_starts_here, self.bytecode_extra))
+
+ def match_name(self, opcode_name):
+ return (self.bytecode_extra == opcode_name or
+ self.bytecode_extra.endswith(' ' + opcode_name))
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit