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

Method parse_args

compiler/src/modules/parser/literals.rs:428–475  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

426 }
427
428 pub(super) fn parse_args(&mut self) -> (u16, u16) {
429 self.advance();
430 let mut pos = 0u16;
431 let mut kw = 0u16;
432 self.comma_list(|t| t == TokenType::Rpar, |s| {
433 let unpack = if s.eat_if(TokenType::DoubleStar) { Some(2u16) }
434 else if s.eat_if(TokenType::Star) { Some(1u16) }
435 else { None };
436 if let Some(kind) = unpack {
437 s.expr();
438 s.chunk.emit(OpCode::UnpackArgs, kind);
439 pos = pos.saturating_add(1);
440 } else if matches!(s.peek(), Some(TokenType::Name)) {
441 let t = s.advance();
442 if matches!(s.peek(), Some(TokenType::Equal)) {
443 let kw_name = s.lexeme(&t).to_string();
444 s.advance();
445 let i = s.chunk.push_const(Value::Str(kw_name));
446 s.chunk.emit(OpCode::LoadConst, i);
447 s.expr();
448 kw = kw.saturating_add(1);
449 } else {
450 let elem_start = s.chunk.instructions.len();
451 s.name(t);
452 s.infix_bp(0);
453 if matches!(s.peek(), Some(TokenType::For)) {
454 let versions_before = s.ssa_versions.clone();
455 let elem_ins: Vec<Instruction> = s.chunk.instructions.drain(elem_start..).collect();
456 s.chunk.emit(OpCode::BuildList, 0);
457 s.comprehension_loop(&[(elem_start, elem_ins)], OpCode::ListAppend, &versions_before);
458 }
459 pos = pos.saturating_add(1);
460 }
461 } else {
462 let elem_start = s.chunk.instructions.len();
463 s.expr();
464 if matches!(s.peek(), Some(TokenType::For)) {
465 let versions_before = s.ssa_versions.clone();
466 let elem_ins: Vec<Instruction> = s.chunk.instructions.drain(elem_start..).collect();
467 s.chunk.emit(OpCode::BuildList, 0);
468 s.comprehension_loop(&[(elem_start, elem_ins)], OpCode::ListAppend, &versions_before);
469 }
470 pos = pos.saturating_add(1);
471 }
472 });
473 self.eat(TokenType::Rpar);
474 (pos, kw)
475 }
476
477 /* class: compiles body into fresh chunk, emits MakeClass+decorators+StoreName. */
478 pub(super) fn class_def(&mut self) { self.class_def_with(0) }

Callers 3

name_stmtMethod · 0.80
callMethod · 0.80
postfix_tailMethod · 0.80

Calls 13

advanceMethod · 0.80
comma_listMethod · 0.80
eat_ifMethod · 0.80
exprMethod · 0.80
emitMethod · 0.80
lexemeMethod · 0.80
push_constMethod · 0.80
infix_bpMethod · 0.80
collectMethod · 0.80
comprehension_loopMethod · 0.80
eatMethod · 0.80
lenMethod · 0.45

Tested by

no test coverage detected