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

Method stmt

compiler/src/modules/parser/stmt.rs:13–288  ·  view source on GitHub ↗

Statement dispatch; returns true if a value is left on the stack for caller to PopTop. */

(&mut self)

Source from the content-addressed store, hash-verified

11
12 /* Statement dispatch; returns true if a value is left on the stack for caller to PopTop. */
13 pub(super) fn stmt(&mut self) -> bool {
14 // Record ip->source offset before any emit so `resolve()` can map ip to source.
15 let ip = self.chunk.instructions.len() as u32;
16 let pos = self.tokens.peek().map(|t| t.start as u32).unwrap_or(self.last_end as u32);
17 self.chunk.stmt_pos.push((ip, pos));
18
19 match self.peek() {
20 Some(TokenType::If) => {
21 self.if_stmt();
22 false
23 }
24 Some(TokenType::For) => {
25 self.for_stmt_inner(false);
26 false
27 }
28 Some(TokenType::Def) => {
29 self.advance();
30 self.func_def_inner(0, false);
31 false
32 }
33 Some(TokenType::With) => {
34 self.with_stmt_inner(false);
35 false
36 }
37 Some(TokenType::While) => {
38 self.while_stmt();
39 false
40 }
41 Some(TokenType::Match) => {
42 self.match_stmt();
43 false
44 }
45 Some(TokenType::Yield) => {
46 self.advance();
47 self.emit_yield();
48 true
49 }
50 Some(TokenType::Async) => {
51 self.advance();
52 match self.peek() {
53 Some(TokenType::Def) => {
54 self.advance();
55 self.func_def_inner(0, true);
56 }
57 Some(TokenType::For) => { self.for_stmt_inner(true); }
58 Some(TokenType::With) => { self.with_stmt_inner(true); }
59 _ => {}
60 }
61 false
62 }
63 Some(TokenType::Await) => {
64 self.advance();
65 self.expr();
66 self.chunk.emit(OpCode::Await, 0);
67 true
68 }
69 Some(TokenType::At) => {
70 let mut count = 0u16;

Callers 2

compile_block_innerMethod · 0.80
parseMethod · 0.80

Calls 15

pushMethod · 0.80
if_stmtMethod · 0.80
for_stmt_innerMethod · 0.80
advanceMethod · 0.80
func_def_innerMethod · 0.80
with_stmt_innerMethod · 0.80
while_stmtMethod · 0.80
match_stmtMethod · 0.80
emit_yieldMethod · 0.80
exprMethod · 0.80
emitMethod · 0.80
eat_ifMethod · 0.80

Tested by

no test coverage detected