MCPcopy Index your code
hub / github.com/aiscriptdev/aiscript / generate_block_expr

Method generate_block_expr

aiscript-vm/src/compiler/codegen.rs:1540–1560  ·  view source on GitHub ↗
(&mut self, mut statements: Vec<Stmt<'gc>>)

Source from the content-addressed store, hash-verified

1538 }
1539
1540 fn generate_block_expr(&mut self, mut statements: Vec<Stmt<'gc>>) -> Result<(), VmError> {
1541 let last_stmt = statements.pop();
1542 for stmt in statements {
1543 self.generate_stmt(stmt)?;
1544 }
1545 // Special handle the last statement to determine how to emit Return
1546 match last_stmt {
1547 Some(stmt) if matches!(stmt, Stmt::BlockReturn { .. }) => {
1548 self.generate_stmt(stmt)?;
1549 self.emit(OpCode::Return);
1550 }
1551 Some(s) if !matches!(s, Stmt::Return { .. }) => {
1552 self.generate_stmt(s)?;
1553 // Emit return instruction if the last stmt isn't return
1554 self.emit_return();
1555 }
1556 Some(stmt) => self.generate_stmt(stmt)?,
1557 None => self.emit_return(),
1558 }
1559 Ok(())
1560 }
1561
1562 fn validate_enum_variant(&mut self, enum_name: Token<'gc>, variant: Token<'gc>) {
1563 // Validate enums and variants

Callers 2

generate_exprMethod · 0.80
generate_functionMethod · 0.80

Calls 3

generate_stmtMethod · 0.80
emitMethod · 0.80
emit_returnMethod · 0.80

Tested by

no test coverage detected