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

Method parse_jump_table

cranelift/reader/src/parser.rs:1805–1848  ·  view source on GitHub ↗

Parse a jump table literal. jump-table-lit ::= "[" block(args) {"," block(args) } "]" | "[]"

(
        &mut self,
        ctx: &mut Context,
        def: ir::BlockCall,
    )

Source from the content-addressed store, hash-verified

1803 // jump-table-lit ::= "[" block(args) {"," block(args) } "]"
1804 // | "[]"
1805 fn parse_jump_table(
1806 &mut self,
1807 ctx: &mut Context,
1808 def: ir::BlockCall,
1809 ) -> ParseResult<ir::JumpTable> {
1810 self.match_token(Token::LBracket, "expected '[' before jump table contents")?;
1811
1812 let mut data = Vec::new();
1813
1814 match self.token() {
1815 Some(Token::Block(dest)) => {
1816 self.consume();
1817 let args = self.parse_opt_block_call_args()?;
1818 data.push(ctx.function.dfg.block_call(dest, &args));
1819
1820 loop {
1821 match self.token() {
1822 Some(Token::Comma) => {
1823 self.consume();
1824 if let Some(Token::Block(dest)) = self.token() {
1825 self.consume();
1826 let args = self.parse_opt_block_call_args()?;
1827 data.push(ctx.function.dfg.block_call(dest, &args));
1828 } else {
1829 return err!(self.loc, "expected jump_table entry");
1830 }
1831 }
1832 Some(Token::RBracket) => break,
1833 _ => return err!(self.loc, "expected ']' after jump table contents"),
1834 }
1835 }
1836 }
1837 Some(Token::RBracket) => (),
1838 _ => return err!(self.loc, "expected jump_table entry"),
1839 }
1840
1841 self.consume();
1842
1843 Ok(ctx
1844 .function
1845 .dfg
1846 .jump_tables
1847 .push(JumpTableData::new(def, &data)))
1848 }
1849
1850 // Parse an exception-table decl.
1851 //

Callers 1

parse_inst_operandsMethod · 0.80

Calls 8

OkFunction · 0.85
match_tokenMethod · 0.80
tokenMethod · 0.80
block_callMethod · 0.80
newFunction · 0.50
consumeMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected