MCPcopy Create free account
hub / github.com/borgo-lang/borgo / stmt_loop

Method stmt_loop

compiler/src/parser.rs:870–914  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

868 }
869
870 fn stmt_loop(&mut self) -> Expr {
871 let start = self.start();
872
873 let kind = match self.tok.kind {
874 TokenKind::For => {
875 // consume 'for'
876 self.next();
877
878 let binding = self.parse_binding(&AnnotationMode::Optional);
879
880 self.expect(TokenKind::In_);
881 let expr = self.parse_expr_no_struct();
882
883 Loop::WithCondition {
884 binding,
885 expr: expr.into(),
886 }
887 }
888
889 TokenKind::While => {
890 // consume 'while'
891 self.next();
892
893 let expr = self.parse_expr_no_struct();
894 Loop::While { expr: expr.into() }
895 }
896
897 TokenKind::Loop => {
898 // consume 'loop'
899 self.next();
900
901 Loop::NoCondition
902 }
903
904 _ => unreachable!(),
905 };
906
907 let body = self.expr_block();
908
909 Expr::Loop {
910 kind,
911 body: body.into(),
912 span: self.make_span(start),
913 }
914 }
915
916 fn stmt_loop_flow(&mut self) -> Expr {
917 let kind = match self.tok.kind {

Callers 1

parse_stmtMethod · 0.80

Calls 7

parse_bindingMethod · 0.80
expectMethod · 0.80
parse_expr_no_structMethod · 0.80
expr_blockMethod · 0.80
make_spanMethod · 0.80
startMethod · 0.45
nextMethod · 0.45

Tested by

no test coverage detected