MCPcopy Index your code
hub / github.com/RustPython/RustPython / validate_stmt

Function validate_stmt

crates/vm/src/stdlib/_ast/validate.rs:472–644  ·  view source on GitHub ↗
(vm: &VirtualMachine, stmt: &ast::Stmt)

Source from the content-addressed store, hash-verified

470}
471
472fn validate_stmt(vm: &VirtualMachine, stmt: &ast::Stmt) -> PyResult<()> {
473 match stmt {
474 ast::Stmt::FunctionDef(func) => {
475 let owner = if func.is_async {
476 "AsyncFunctionDef"
477 } else {
478 "FunctionDef"
479 };
480 validate_body(vm, &func.body, owner)?;
481 validate_type_params(vm, &func.type_params)?;
482 validate_parameters(vm, &func.parameters)?;
483 validate_decorators(vm, &func.decorator_list)?;
484 if let Some(returns) = &func.returns {
485 validate_expr(vm, returns, ast::ExprContext::Load)?;
486 }
487 Ok(())
488 }
489 ast::Stmt::ClassDef(class_def) => {
490 validate_body(vm, &class_def.body, "ClassDef")?;
491 validate_type_params(vm, &class_def.type_params)?;
492 if let Some(arguments) = &class_def.arguments {
493 validate_exprs(vm, &arguments.args, ast::ExprContext::Load, false)?;
494 validate_keywords(vm, &arguments.keywords)?;
495 }
496 validate_decorators(vm, &class_def.decorator_list)
497 }
498 ast::Stmt::Return(ret) => {
499 if let Some(value) = &ret.value {
500 validate_expr(vm, value, ast::ExprContext::Load)?;
501 }
502 Ok(())
503 }
504 ast::Stmt::Delete(del) => validate_assignlist(vm, &del.targets, ast::ExprContext::Del),
505 ast::Stmt::Assign(assign) => {
506 validate_assignlist(vm, &assign.targets, ast::ExprContext::Store)?;
507 validate_expr(vm, &assign.value, ast::ExprContext::Load)
508 }
509 ast::Stmt::AugAssign(assign) => {
510 validate_expr(vm, &assign.target, ast::ExprContext::Store)?;
511 validate_expr(vm, &assign.value, ast::ExprContext::Load)
512 }
513 ast::Stmt::AnnAssign(assign) => {
514 if assign.simple && !matches!(&*assign.target, ast::Expr::Name(_)) {
515 return Err(vm.new_type_error("AnnAssign with simple non-Name target"));
516 }
517 validate_expr(vm, &assign.target, ast::ExprContext::Store)?;
518 if let Some(value) = &assign.value {
519 validate_expr(vm, value, ast::ExprContext::Load)?;
520 }
521 validate_expr(vm, &assign.annotation, ast::ExprContext::Load)
522 }
523 ast::Stmt::TypeAlias(alias) => {
524 if !matches!(&*alias.name, ast::Expr::Name(_)) {
525 return Err(vm.new_type_error("TypeAlias with non-Name name"));
526 }
527 validate_expr(vm, &alias.name, ast::ExprContext::Store)?;
528 validate_type_params(vm, &alias.type_params)?;
529 validate_expr(vm, &alias.value, ast::ExprContext::Load)

Callers 1

validate_stmtsFunction · 0.85

Calls 14

validate_bodyFunction · 0.85
validate_type_paramsFunction · 0.85
validate_parametersFunction · 0.85
validate_decoratorsFunction · 0.85
validate_exprFunction · 0.85
validate_exprsFunction · 0.85
validate_keywordsFunction · 0.85
validate_assignlistFunction · 0.85
validate_stmtsFunction · 0.85
validate_nonempty_seqFunction · 0.85
validate_patternFunction · 0.85
ErrClass · 0.50

Tested by

no test coverage detected