From b514f91441420ee86a547b6a69bfeee8fb04bbbf Mon Sep 17 00:00:00 2001 From: z78078 Date: Thu, 28 Jul 2022 19:18:36 +0800 Subject: [PATCH] nac3artiq: inherit kernel constructors Closes #139 Co-authored-by: z78078 Co-committed-by: z78078 --- nac3artiq/src/symbol_resolver.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/nac3artiq/src/symbol_resolver.rs b/nac3artiq/src/symbol_resolver.rs index 434a724f..661da704 100644 --- a/nac3artiq/src/symbol_resolver.rs +++ b/nac3artiq/src/symbol_resolver.rs @@ -545,6 +545,31 @@ impl InnerResolver { if let Some(ty) = self.pyid_to_type.read().get(&py_obj_id) { return Ok(Ok(*ty)) } + + // check if constructor function exists in the methods list + let pyid_to_def = self.pyid_to_def.read(); + let constructor_ty = pyid_to_def + .get(&py_obj_id) + .and_then(|def_id| { + defs + .iter() + .find_map(|def| { + if let TopLevelDef::Class { + object_id, methods, constructor, .. + } = &*def.read() { + if object_id == def_id && constructor.is_some() && methods.iter().any(|(s, _, _)| s == &"__init__".into()) { + return constructor.clone(); + } + } + None + }) + }); + + if let Some(ty) = constructor_ty { + self.pyid_to_type.write().insert(py_obj_id, ty); + return Ok(Ok(ty)) + } + let (extracted_ty, inst_check) = match self.get_pyty_obj_type( py, {