classification
Title: Ensure opcode names and args fit in disassembly output
Type: enhancement Stage: resolved
Components: Library (Lib) Versions: Python 3.7
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: ncoghlan, serhiy.storchaka
Priority: low Keywords:

Created on 2014-09-07 04:58 by ncoghlan, last changed 2017-04-19 17:43 by serhiy.storchaka. This issue is now closed.

Pull Requests
URL Status Linked Edit
PR 1153 merged serhiy.storchaka, 2017-04-15 08:34
Messages (3)
msg226530 - (view) Author: Nick Coghlan (ncoghlan) * (Python committer) Date: 2014-09-07 04:58
While exploring display options for issue 11822, I found that the new matrix multiplication opcode names (BINARY_MATRIX_MULTIPLY and INPLACE_MATRIX_MULTIPLY) don't fit in the nominal field width in the disassembly output (which is currently 20 characters).

These two clock in at 22 and 23 characters respectively.

In practice, they do fit, since neither takes on argument, which effectively allows an extra 5 characters (while still looking neat) and unlimited characters if we ignore expanding past the column of opcode arguments.

However, it would be good to:

1. Factor out the opname and oparg sizes to private class attributes on dis.Instruction

2. have a test in test_dis that scans dis.opnames and ensures all opcodes < dis.HAVE_ARGUMENT have names shorter than the combined length of the two fields, and that all opcodes >= HAVE_ARGUMENT will fit in the opname field, even with an argument present.

Have such a test will ensure any new opcodes added can be displayed without any problems, rather than anyone having to remember to check manually.
msg291710 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2017-04-15 08:38
Proposed patch adjusts column widths of the output of dis.dis() for large line numbers and instruction offsets and adds tests for widths of opcode names.

Unfortunately this test is failed for two new opcodes: BUILD_MAP_UNPACK_WITH_CALL and BUILD_TUPLE_UNPACK_WITH_CALL (26 and 28 characters respectively).
msg291889 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2017-04-19 17:36
New changeset d90045f319e2ea9772b9fbd62a05fdf34af96b6c by Serhiy Storchaka in branch 'master':
bpo-22352: Adjust widths in the output of dis.dis() for large line numbers and (#1153)
https://github.com/python/cpython/commit/d90045f319e2ea9772b9fbd62a05fdf34af96b6c
History
Date User Action Args
2017-04-19 17:43:19serhiy.storchakasetstatus: open -> closed
resolution: fixed
stage: patch review -> resolved
2017-04-19 17:36:34serhiy.storchakasetmessages: + msg291889
2017-04-15 08:38:31serhiy.storchakasetversions: + Python 3.7, - Python 3.5
nosy: + serhiy.storchaka

messages: + msg291710

type: behavior -> enhancement
stage: patch review
2017-04-15 08:34:59serhiy.storchakasetpull_requests: + pull_request1284
2015-06-28 03:03:16ncoghlansetassignee: ncoghlan ->
2014-09-07 04:58:11ncoghlancreate