MCPcopy Create free account
hub / github.com/bytecodealliance/wasmtime / parse_preamble

Method parse_preamble

cranelift/reader/src/parser.rs:1470–1526  ·  view source on GitHub ↗

Parse the function preamble. preamble ::= * { preamble-decl } preamble-decl ::= * stack-slot-decl function-decl signature-decl jump-table-decl stack-limit-decl The parsed decls are added to `ctx` rather than returned.

(&mut self, ctx: &mut Context)

Source from the content-addressed store, hash-verified

1468 //
1469 // The parsed decls are added to `ctx` rather than returned.
1470 fn parse_preamble(&mut self, ctx: &mut Context) -> ParseResult<()> {
1471 loop {
1472 match self.token() {
1473 Some(Token::StackSlot(..)) => {
1474 self.start_gathering_comments();
1475 let loc = self.loc;
1476 self.parse_stack_slot_decl()
1477 .and_then(|(ss, dat)| ctx.add_ss(ss, dat, loc))
1478 }
1479 Some(Token::DynamicStackSlot(..)) => {
1480 self.start_gathering_comments();
1481 let loc = self.loc;
1482 self.parse_dynamic_stack_slot_decl()
1483 .and_then(|(dss, dat)| ctx.add_dss(dss, dat, loc))
1484 }
1485 Some(Token::DynamicType(..)) => {
1486 self.start_gathering_comments();
1487 let loc = self.loc;
1488 self.parse_dynamic_type_decl()
1489 .and_then(|(dt, dat)| ctx.add_dt(dt, dat, loc))
1490 }
1491 Some(Token::GlobalValue(..)) => {
1492 self.start_gathering_comments();
1493 self.parse_global_value_decl(&mut ctx.function.dfg.mem_flags)
1494 .and_then(|(gv, dat)| ctx.add_gv(gv, dat, self.loc))
1495 }
1496 Some(Token::SigRef(..)) => {
1497 self.start_gathering_comments();
1498 self.parse_signature_decl().and_then(|(sig, dat)| {
1499 ctx.add_sig(sig, dat, self.loc, self.default_calling_convention)
1500 })
1501 }
1502 Some(Token::FuncRef(..)) => {
1503 self.start_gathering_comments();
1504 self.parse_function_decl(ctx)
1505 .and_then(|(fn_, dat)| ctx.add_fn(fn_, dat, self.loc))
1506 }
1507 Some(Token::Constant(..)) => {
1508 self.start_gathering_comments();
1509 self.parse_constant_decl()
1510 .and_then(|(c, v)| ctx.add_constant(c, v, self.loc))
1511 }
1512 Some(Token::Identifier("stack_limit")) => {
1513 self.start_gathering_comments();
1514 self.parse_stack_limit_decl()
1515 .and_then(|gv| ctx.add_stack_limit(gv, self.loc))
1516 }
1517 Some(Token::AliasRegion(..)) => {
1518 self.start_gathering_comments();
1519 self.parse_alias_region_decl()
1520 .and_then(|(ar, dat)| ctx.add_alias_region(ar, dat, self.loc))
1521 }
1522 // More to come..
1523 _ => return Ok(()),
1524 }?;
1525 }
1526 }
1527

Callers 1

parse_functionMethod · 0.80

Calls 15

OkFunction · 0.85
tokenMethod · 0.80
parse_stack_slot_declMethod · 0.80
add_ssMethod · 0.80
add_dssMethod · 0.80
add_dtMethod · 0.80
add_gvMethod · 0.80
parse_signature_declMethod · 0.80

Tested by

no test coverage detected