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)
| 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 |
no test coverage detected