diff --git a/nac3core/src/toplevel/builtins.rs b/nac3core/src/toplevel/builtins.rs index 5602617..295a400 100644 --- a/nac3core/src/toplevel/builtins.rs +++ b/nac3core/src/toplevel/builtins.rs @@ -87,6 +87,7 @@ pub fn get_exn_constructor( object_id: DefinitionId(class_id), type_vars: Vec::default(), fields: exception_fields, + attr: Vec::default(), methods: vec![("__init__".into(), signature, DefinitionId(cons_id))], ancestors: vec![ TypeAnnotation::CustomClass { id: DefinitionId(class_id), params: Vec::default() }, @@ -444,6 +445,7 @@ pub fn get_builtins(unifier: &mut Unifier, primitives: &PrimitiveStore) -> Built object_id: PRIMITIVE_DEF_IDS.exception, type_vars: Vec::default(), fields: exception_fields, + attr: Vec::default(), methods: Vec::default(), ancestors: vec![], constructor: None, @@ -470,6 +472,7 @@ pub fn get_builtins(unifier: &mut Unifier, primitives: &PrimitiveStore) -> Built object_id: PRIMITIVE_DEF_IDS.option, type_vars: vec![option_ty_var], fields: vec![], + attr: Vec::default(), methods: vec![ ("is_some".into(), is_some_ty.0, DefinitionId(PRIMITIVE_DEF_IDS.option.0 + 1)), ("is_none".into(), is_some_ty.0, DefinitionId(PRIMITIVE_DEF_IDS.option.0 + 2)), @@ -560,6 +563,7 @@ pub fn get_builtins(unifier: &mut Unifier, primitives: &PrimitiveStore) -> Built object_id: PRIMITIVE_DEF_IDS.ndarray, type_vars: vec![ndarray_dtype_ty, ndarray_ndims_ty], fields: Vec::default(), + attr: Vec::default(), methods: vec![ ("copy".into(), ndarray_copy_ty.0, DefinitionId(PRIMITIVE_DEF_IDS.ndarray.0 + 1)), ("fill".into(), ndarray_fill_ty.0, DefinitionId(PRIMITIVE_DEF_IDS.ndarray.0 + 2)), diff --git a/nac3core/src/toplevel/helper.rs b/nac3core/src/toplevel/helper.rs index e212ac8..5e34052 100644 --- a/nac3core/src/toplevel/helper.rs +++ b/nac3core/src/toplevel/helper.rs @@ -280,6 +280,7 @@ impl TopLevelComposer { object_id: obj_id, type_vars: Vec::default(), fields: Vec::default(), + attr: Vec::default(), methods: Vec::default(), ancestors: Vec::default(), constructor, diff --git a/nac3core/src/toplevel/mod.rs b/nac3core/src/toplevel/mod.rs index e38207f..369c219 100644 --- a/nac3core/src/toplevel/mod.rs +++ b/nac3core/src/toplevel/mod.rs @@ -99,6 +99,10 @@ pub enum TopLevelDef { /// /// Name and type is mutable. fields: Vec<(StrRef, Type, bool)>, + /// Class Attributes + /// + /// Same as fields, but are immutable + attr: Vec<(StrRef, Type, bool)>, /// Class methods, pointing to the corresponding function definition. methods: Vec<(StrRef, Type, DefinitionId)>, /// Ancestor classes, including itself. diff --git a/nac3core/src/typecheck/type_inferencer/test.rs b/nac3core/src/typecheck/type_inferencer/test.rs index e6fe800..f036403 100644 --- a/nac3core/src/typecheck/type_inferencer/test.rs +++ b/nac3core/src/typecheck/type_inferencer/test.rs @@ -289,6 +289,7 @@ impl TestEnvironment { object_id: DefinitionId(i), type_vars: Default::default(), fields: Default::default(), + attr: Default::default(), methods: Default::default(), ancestors: Default::default(), resolver: None, @@ -331,6 +332,7 @@ impl TestEnvironment { object_id: DefinitionId(defs + 1), type_vars: vec![v0], fields: [("a".into(), v0, true)].into(), + attr: Default::default(), methods: Default::default(), ancestors: Default::default(), resolver: None, @@ -368,6 +370,7 @@ impl TestEnvironment { object_id: DefinitionId(defs + 2), type_vars: Default::default(), fields: [("a".into(), int32, true), ("b".into(), fun, true)].into(), + attr: Default::default(), methods: Default::default(), ancestors: Default::default(), resolver: None, @@ -399,6 +402,7 @@ impl TestEnvironment { object_id: DefinitionId(defs + 3), type_vars: Default::default(), fields: [("a".into(), bool, true), ("b".into(), fun, false)].into(), + attr: Default::default(), methods: Default::default(), ancestors: Default::default(), resolver: None,