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

Method parse_data

core/src/parser.rs:447–530  ·  view source on GitHub ↗

Parses a `DATA` statement.

(&mut self)

Source from the content-addressed store, hash-verified

445
446 /// Parses a `DATA` statement.
447 fn parse_data(&mut self) -> Result<Statement> {
448 let mut values = vec![];
449 loop {
450 let peeked = self.lexer.peek()?;
451 match peeked.token {
452 Token::Eof | Token::Eol | Token::Else => {
453 values.push(None);
454 break;
455 }
456 _ => (),
457 }
458
459 let token_span = self.lexer.read()?;
460 match token_span.token {
461 Token::Boolean(b) => {
462 values.push(Some(Expr::Boolean(BooleanSpan { value: b, pos: token_span.pos })))
463 }
464 Token::Double(d) => {
465 values.push(Some(Expr::Double(DoubleSpan { value: d, pos: token_span.pos })))
466 }
467 Token::Integer(i) => {
468 values.push(Some(Expr::Integer(IntegerSpan { value: i, pos: token_span.pos })))
469 }
470 Token::Text(t) => {
471 values.push(Some(Expr::Text(TextSpan { value: t, pos: token_span.pos })))
472 }
473
474 Token::Minus => {
475 let token_span2 = self.lexer.read()?;
476 match token_span2.token {
477 Token::Double(d) => values.push(Some(Expr::Double(DoubleSpan {
478 value: -d,
479 pos: token_span.pos,
480 }))),
481 Token::Integer(i) => values.push(Some(Expr::Integer(IntegerSpan {
482 value: -i,
483 pos: token_span.pos,
484 }))),
485 _ => {
486 return Err(Error::Bad(
487 token_span.pos,
488 "Expected number after -".to_owned(),
489 ));
490 }
491 }
492 }
493
494 Token::Eof | Token::Eol | Token::Else => {
495 panic!("Should not be consumed here; handled above")
496 }
497
498 Token::Comma => {
499 values.push(None);
500 continue;
501 }
502
503 t => {
504 return Err(Error::Bad(

Callers 2

parse_unilineMethod · 0.80
parse_oneMethod · 0.80

Calls 4

pushMethod · 0.80
consume_peekedMethod · 0.80
peekMethod · 0.45
readMethod · 0.45

Tested by

no test coverage detected