MCPcopy Index your code
hub / github.com/RustPython/RustPython / advance

Method advance

crates/vm/src/builtins/code.rs:51–98  ·  view source on GitHub ↗

Advance to next address range

(&mut self)

Source from the content-addressed store, hash-verified

49
50 /// Advance to next address range
51 fn advance(&mut self) -> bool {
52 if self.reader.at_end() {
53 return false;
54 }
55
56 let first_byte = match self.reader.read_byte() {
57 Some(b) => b,
58 None => return false,
59 };
60
61 if (first_byte & 0x80) == 0 {
62 return false; // Invalid linetable
63 }
64
65 let code = (first_byte >> 3) & 0x0f;
66 let length = ((first_byte & 0x07) + 1) as i32;
67
68 // Get line delta for this entry
69 let line_delta = self.get_line_delta(code);
70
71 // Update computed line
72 self.computed_line += line_delta;
73
74 // Check for NO_LINE marker
75 if Self::is_no_line_marker(first_byte) {
76 self.ar_line = -1;
77 } else {
78 self.ar_line = self.computed_line;
79 }
80
81 // Update address range
82 self.ar_start = self.ar_end;
83 self.ar_end += length * 2; // sizeof(_Py_CODEUNIT) = 2
84
85 // Skip remaining bytes for this entry
86 while !self.reader.at_end() {
87 if let Some(b) = self.reader.peek_byte() {
88 if (b & 0x80) != 0 {
89 break;
90 }
91 self.reader.read_byte();
92 } else {
93 break;
94 }
95 }
96
97 true
98 }
99
100 fn get_line_delta(&mut self, code: u8) -> i32 {
101 let kind = match PyCodeLocationInfoKind::from_code(code) {

Callers 1

co_linesMethod · 0.45

Calls 4

get_line_deltaMethod · 0.80
at_endMethod · 0.45
read_byteMethod · 0.45
peek_byteMethod · 0.45

Tested by

no test coverage detected