mirror of
https://github.com/slint-ui/slint.git
synced 2025-09-29 13:24:48 +00:00
28 lines
800 B
Rust
28 lines
800 B
Rust
use super::expressions::parse_expression;
|
|
use super::prelude::*;
|
|
|
|
#[cfg_attr(test, parser_test)]
|
|
/// ```test
|
|
/// expression
|
|
/// expression += expression
|
|
/// expression.expression *= 45.2
|
|
/// ```
|
|
pub fn parse_statement(p: &mut impl Parser) {
|
|
if matches!(p.nth(0), SyntaxKind::Semicolon | SyntaxKind::RBrace) {
|
|
return;
|
|
}
|
|
let checkpoint = p.checkpoint();
|
|
parse_expression(p);
|
|
if matches!(
|
|
p.nth(0),
|
|
SyntaxKind::MinusEqual
|
|
| SyntaxKind::PlusEqual
|
|
| SyntaxKind::StarEqual
|
|
| SyntaxKind::DivEqual
|
|
) {
|
|
let mut p = p.start_node_at(checkpoint.clone(), SyntaxKind::Expression);
|
|
let mut p = p.start_node_at(checkpoint, SyntaxKind::SelfAssignment);
|
|
p.consume();
|
|
parse_expression(&mut *p);
|
|
}
|
|
}
|