MCPcopy Create free account
hub / github.com/dylan-sutton-chavez/edge-python / scan_number

Method scan_number

compiler/src/modules/lexer/scan.rs:117–139  ·  view source on GitHub ↗
(&mut self, start: usize)

Source from the content-addressed store, hash-verified

115 }
116
117 fn scan_number(&mut self, start: usize) -> TokenType {
118 if self.src[start] == b'0' && self.pos < self.src.len() {
119 match self.src[self.pos] {
120 b'x' | b'X' => { self.pos += 1; let b = self.pos; self.scan_hex_digits(); self.check_digits(b, self.pos, false); return TokenType::Int; }
121 b'o' | b'O' => { self.pos += 1; let b = self.pos; self.scan_oct_digits(); self.check_digits(b, self.pos, false); return TokenType::Int; }
122 b'b' | b'B' => { self.pos += 1; let b = self.pos; self.scan_bin_digits(); self.check_digits(b, self.pos, false); return TokenType::Int; }
123 _ => {}
124 }
125 }
126 self.scan_digits();
127 self.check_digits(start, self.pos, false);
128 let mut is_float = false;
129 if self.pos < self.src.len() && self.src[self.pos] == b'.' && self.at(1) != Some(b'.') {
130 is_float = true;
131 self.pos += 1;
132 let frac_start = self.pos;
133 self.scan_digits();
134 // Trailing dot like `5.` is valid; only validate non-empty fractions.
135 self.check_digits(frac_start, self.pos, true);
136 }
137 is_float |= self.scan_exponent();
138 if is_float { TokenType::Float } else { TokenType::Int }
139 }
140
141 fn scan_dot_number(&mut self) -> TokenType {
142 let body_start = self.pos;

Callers 1

next_tokenMethod · 0.80

Calls 8

scan_hex_digitsMethod · 0.80
check_digitsMethod · 0.80
scan_oct_digitsMethod · 0.80
scan_bin_digitsMethod · 0.80
scan_digitsMethod · 0.80
scan_exponentMethod · 0.80
lenMethod · 0.45
atMethod · 0.45

Tested by

no test coverage detected