MCPcopy Index your code
hub / github.com/endbasic/endbasic / parse_on

Method parse_on

core/src/parser.rs:1554–1585  ·  view source on GitHub ↗

Parses an `ON ERROR` statement. Only `ON` has been consumed so far.

(&mut self, pos: LineCol)

Source from the content-addressed store, hash-verified

1552
1553 /// Parses an `ON ERROR` statement. Only `ON` has been consumed so far.
1554 fn parse_on(&mut self, pos: LineCol) -> Result<Statement> {
1555 self.expect_and_consume(Token::Error, "Expected ERROR after ON")?;
1556
1557 let token_span = self.lexer.read()?;
1558 match token_span.token {
1559 Token::Goto => {
1560 let token_span = self.lexer.read()?;
1561 match token_span.token {
1562 Token::Integer(0) => Ok(Statement::OnError(OnErrorSpan::Reset(pos))),
1563 Token::Integer(i) => Ok(Statement::OnError(OnErrorSpan::Goto(
1564 GotoSpan { target: format!("{}", i), target_pos: token_span.pos },
1565 pos,
1566 ))),
1567 Token::Label(target) => Ok(Statement::OnError(OnErrorSpan::Goto(
1568 GotoSpan { target, target_pos: token_span.pos },
1569 pos,
1570 ))),
1571 _ => Err(Error::Bad(
1572 token_span.pos,
1573 "Expected label name or 0 after ON ERROR GOTO".to_owned(),
1574 )),
1575 }
1576 }
1577 Token::Resume => {
1578 self.expect_and_consume(Token::Next, "Expected NEXT after ON ERROR RESUME")?;
1579 Ok(Statement::OnError(OnErrorSpan::ResumeNext(pos)))
1580 }
1581 _ => {
1582 Err(Error::Bad(token_span.pos, "Expected GOTO or RESUME after ON ERROR".to_owned()))
1583 }
1584 }
1585 }
1586
1587 /// Parses the guards after a `CASE` keyword.
1588 fn parse_case_guards(&mut self) -> Result<Vec<CaseGuardSpan>> {

Callers 2

parse_unilineMethod · 0.80
parse_oneMethod · 0.80

Calls 2

expect_and_consumeMethod · 0.80
readMethod · 0.45

Tested by

no test coverage detected