Skip to content

Commit 6033cee

Browse files
author
rocky
committed
Add line table info to RustPython 3.12
1 parent bce2dd5 commit 6033cee

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

xdis/codetype/code312rust.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ def __init__(
4747
co_argcount: int,
4848
co_posonlyargcount: int,
4949
co_kwonlyargcount: int,
50+
co_lnotab: dict,
5051
co_stacksize: int,
5152
co_flags: int,
5253
co_code: bytes,
@@ -65,7 +66,7 @@ def __init__(
6566
self.co_argcount = co_argcount
6667
self.co_posonlyargcount = co_posonlyargcount
6768
self.co_kwonlyargcount = co_kwonlyargcount
68-
self.co_lnotab={} # FIXME: compute this from locations.
69+
self.co_lnotab = co_lnotab
6970
self.co_stacksize = co_stacksize
7071
self.co_flags = co_flags
7172
self.co_code = co_code

xdis/unmarsh_rust.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,12 +163,15 @@ def t_code_rust(self, save_ref, bytes_for_s: bool = False) -> Code313Rust:
163163
instr_count = self.read_int32()
164164
co_code = self.read_slice(instr_count * 2)
165165

166-
instructions = [int(co_code[i]) for i in range(len(co_code))] # debug
166+
# instructions = [int(co_code[i]) for i in range(len(co_code))] # debug
167+
co_lnotab = {}
167168

168169
# read locations
169170
loc_count = self.read_int32()
170171
locations: List[SourceLocation] = []
171-
for _ in range(loc_count):
172+
last_line_number = -1
173+
for i in range(loc_count):
174+
offset = i * 2
172175
line_number = self.read_int32()
173176
if line_number == 0:
174177
raise MarshalError("invalid source location")
@@ -180,6 +183,9 @@ def t_code_rust(self, save_ref, bytes_for_s: bool = False) -> Code313Rust:
180183
column_offset=char_off_zero_indexed + 1 # convert from zero-indexed
181184
)
182185
)
186+
if line_number != last_line_number and offset not in co_lnotab:
187+
co_lnotab[offset] = line_number
188+
last_line_number = line_number
183189

184190
flags = self.read_int16()
185191

@@ -269,6 +275,7 @@ def read_names():
269275
co_argcount=arg_count,
270276
co_posonlyargcount=posonlyarg_count,
271277
co_kwonlyargcount=kwonlyarg_count,
278+
co_lnotab=co_lnotab,
272279
co_stacksize=max_stackdepth,
273280
co_flags=flags,
274281
co_code=co_code,

0 commit comments

Comments
 (0)