MCPcopy
hub / github.com/rocky/python-uncompyle6 / build_lines_data

Method build_lines_data

uncompyle6/scanner.py:234–268  ·  view source on GitHub ↗

Generate various line-related helper data.

(self, code_obj)

Source from the content-addressed store, hash-verified

232 return bytecode
233
234 def build_lines_data(self, code_obj):
235 """
236 Generate various line-related helper data.
237 """
238
239 # Offset: lineno pairs, only for offsets which start line.
240 # Locally we use list for more convenient iteration using indices
241 linestarts = list(self.opc.findlinestarts(code_obj))
242 self.linestarts = dict(linestarts)
243 if not self.linestarts:
244 return []
245
246 # 'List-map' which shows line number of current op and offset of
247 # first op on following line, given offset of op as index
248 lines = []
249 LineTuple = namedtuple("LineTuple", ["l_no", "next"])
250
251 # Iterate through available linestarts, and fill
252 # the data for all code offsets encountered until
253 # last linestart offset
254 _, prev_line_no = linestarts[0]
255 offset = 0
256 for start_offset, line_no in linestarts[1:]:
257 while offset < start_offset:
258 lines.append(LineTuple(prev_line_no, start_offset))
259 offset += 1
260 prev_line_no = line_no
261
262 # Fill remaining offsets with reference to last line number
263 # and code length as start offset of following non-existing line
264 codelen = len(self.code)
265 while offset < codelen:
266 lines.append(LineTuple(prev_line_no, codelen))
267 offset += 1
268 return lines
269
270 def build_prev_op(self):
271 """

Callers 1

build_instructionsMethod · 0.95

Calls 1

appendMethod · 0.45

Tested by

no test coverage detected