diff --git a/nac3core/src/toplevel/composer.rs b/nac3core/src/toplevel/composer.rs index 16f508a..027777f 100644 --- a/nac3core/src/toplevel/composer.rs +++ b/nac3core/src/toplevel/composer.rs @@ -1067,12 +1067,27 @@ impl TopLevelComposer { let mut defined_fields: HashSet<_> = HashSet::new(); for b in class_body_ast { match &b.node { - ast::StmtKind::FunctionDef { args, returns, name, .. } => { + ast::StmtKind::FunctionDef { args, returns, name, decorator_list, .. } => { let (method_dummy_ty, method_id) = Self::get_class_method_def_info(class_methods_def, *name)?; let mut method_var_map: HashMap = HashMap::new(); + // This part check if __init__ method decorate with inappropriate decorator (rpc) + if name == &"__init__".into() { + if let Some(_) = decorator_list + .iter() + .find(|ast::Located { node, .. }| match node { + &ast::ExprKind::Name { id, .. } => id == "rpc".into(), + _ => false + }) { + return Err(format!( + "class {} constructor {} (at {}) must not be decorated with rpc", + _class_name, name, b.location + )); + } + } + let arg_types: Vec = { // check method parameters cannot have same name let mut defined_parameter_name: HashSet<_> = HashSet::new();