MCPcopy Create free account
hub / github.com/d0iasm/saba / statement

Method statement

core/src/renderer/js/ast.rs:385–418  ·  view source on GitHub ↗

https://262.ecma-international.org/12.0/#prod-Statement AssignmentExpression ::= ( LeftHandSideExpression AssignmentOperator AssignmentExpression | ConditionalExpression ) Expression ::= AssignmentExpression ( "," AssignmentExpression ) VariableStatement ::= "var" VariableDeclarationList ( ";" )? ExpressionStatement ::= Expression ( ";" )? ReturnStatement ::= "return" ( Expression )? ( ";" )?

(&mut self)

Source from the content-addressed store, hash-verified

383 ///
384 /// Statement ::= ExpressionStatement | VariableStatement | ReturnStatement
385 fn statement(&mut self) -> Option<Rc<Node>> {
386 let t = match self.t.peek() {
387 Some(t) => t,
388 None => return None,
389 };
390
391 let node = match t {
392 Token::Keyword(keyword) => {
393 if keyword == "var" {
394 // consume "var"
395 assert!(self.t.next().is_some());
396
397 self.variable_declaration()
398 } else if keyword == "return" {
399 // consume "return"
400 assert!(self.t.next().is_some());
401
402 Node::new_return_statement(self.assignment_expression())
403 } else {
404 None
405 }
406 }
407 _ => Node::new_expression_statement(self.assignment_expression()),
408 };
409
410 if let Some(Token::Punctuator(c)) = self.t.peek() {
411 // consume ';'
412 if c == &';' {
413 assert!(self.t.next().is_some());
414 }
415 }
416
417 node
418 }
419
420 /// FunctionBody ::= "{" ( SourceElements )? "}"
421 fn function_body(&mut self) -> Option<Rc<Node>> {

Callers 1

source_elementMethod · 0.80

Calls 2

variable_declarationMethod · 0.80
assignment_expressionMethod · 0.80

Tested by

no test coverage detected