nac3core: disallow methods/fields in Exception subclass

Fixes #192
escape-analysis
pca006132 2022-02-13 21:43:45 +08:00
parent 91f41052fe
commit 21d9182ba2
1 changed files with 4 additions and 2 deletions

View File

@ -588,8 +588,10 @@ impl TopLevelComposer {
if class_ancestors.iter().any(|ann| matches!(ann, TypeAnnotation::CustomClass { id, .. } if id.0 == 7)) {
// if inherited from Exception, the body should be a pass
if let ast::StmtKind::ClassDef { body, .. } = &class_ast.as_ref().unwrap().node {
if body.len() != 1 || !matches!(body[0].node, ast::StmtKind::Pass { .. }) {
return Err("Classes inherited from exception should have `pass` as body".into());
for stmt in body.iter() {
if matches!(stmt.node, ast::StmtKind::FunctionDef { .. } | ast::StmtKind::AnnAssign { .. }) {
return Err("Classes inherited from exception should have no custom fields/methods".into());
}
}
} else {
unreachable!()