Name: assignment, walrus `:=`, call, or plain load. */
(&mut self, t: Token)
| 241 | |
| 242 | /* Name: assignment, walrus `:=`, call, or plain load. */ |
| 243 | pub(super) fn name(&mut self, t: Token) { |
| 244 | let name = self.lexeme(&t).to_string(); |
| 245 | match self.peek() { |
| 246 | // In f-string context, `=` is the debug marker `f"{x=}"`, not assignment. |
| 247 | Some(TokenType::Equal) if !self.in_fstring_expr => { |
| 248 | self.assign(name.clone()); |
| 249 | self.emit_load_ssa(name); |
| 250 | } |
| 251 | Some(TokenType::ColonEqual) => { |
| 252 | self.advance(); |
| 253 | self.expr(); |
| 254 | if self.globals_decl.contains(&name) { |
| 255 | // Walrus must honor an enclosing `global` declaration. |
| 256 | let i = self.chunk.push_name(&name); |
| 257 | self.chunk.emit(OpCode::StoreGlobal, i); |
| 258 | self.chunk.emit(OpCode::LoadGlobal, i); |
| 259 | } else { |
| 260 | let ver = self.increment_version(&name); |
| 261 | let i = self.push_ssa_name(&name, ver); |
| 262 | self.chunk.emit(OpCode::StoreName, i); |
| 263 | self.chunk.emit(OpCode::LoadName, i); |
| 264 | } |
| 265 | } |
| 266 | Some(TokenType::Lpar) => { |
| 267 | let _ = self.call(name); |
| 268 | } |
| 269 | _ => self.emit_load_ssa(name), |
| 270 | } |
| 271 | self.postfix_tail(); |
| 272 | } |
| 273 | |
| 274 | fn parse_int_prefix(s: &str) -> (&str, u32) { |
| 275 | if let Some(h) = s.strip_prefix("0x").or_else(|| s.strip_prefix("0X")) { (h, 16) } |
no test coverage detected