forked from M-Labs/nac3
core: add attribute field to class definition
This commit is contained in:
parent
144a3fc426
commit
7fe2c3496c
nac3core/src
@ -83,6 +83,7 @@ pub fn get_exn_constructor(
|
|||||||
object_id: DefinitionId(class_id),
|
object_id: DefinitionId(class_id),
|
||||||
type_vars: Vec::default(),
|
type_vars: Vec::default(),
|
||||||
fields: exception_fields,
|
fields: exception_fields,
|
||||||
|
attributes: Vec::default(),
|
||||||
methods: vec![("__init__".into(), signature, DefinitionId(cons_id))],
|
methods: vec![("__init__".into(), signature, DefinitionId(cons_id))],
|
||||||
ancestors: vec![
|
ancestors: vec![
|
||||||
TypeAnnotation::CustomClass { id: DefinitionId(class_id), params: Vec::default() },
|
TypeAnnotation::CustomClass { id: DefinitionId(class_id), params: Vec::default() },
|
||||||
@ -596,6 +597,7 @@ impl<'a> BuiltinBuilder<'a> {
|
|||||||
object_id: prim.id(),
|
object_id: prim.id(),
|
||||||
type_vars: Vec::default(),
|
type_vars: Vec::default(),
|
||||||
fields: make_exception_fields(int32, int64, str),
|
fields: make_exception_fields(int32, int64, str),
|
||||||
|
attributes: Vec::default(),
|
||||||
methods: Vec::default(),
|
methods: Vec::default(),
|
||||||
ancestors: vec![],
|
ancestors: vec![],
|
||||||
constructor: None,
|
constructor: None,
|
||||||
@ -624,7 +626,8 @@ impl<'a> BuiltinBuilder<'a> {
|
|||||||
name: prim.name().into(),
|
name: prim.name().into(),
|
||||||
object_id: prim.id(),
|
object_id: prim.id(),
|
||||||
type_vars: vec![self.option_tvar.ty],
|
type_vars: vec![self.option_tvar.ty],
|
||||||
fields: vec![],
|
fields: Vec::default(),
|
||||||
|
attributes: Vec::default(),
|
||||||
methods: vec![
|
methods: vec![
|
||||||
Self::create_method(PrimDef::OptionIsSome, self.is_some_ty.0),
|
Self::create_method(PrimDef::OptionIsSome, self.is_some_ty.0),
|
||||||
Self::create_method(PrimDef::OptionIsNone, self.is_some_ty.0),
|
Self::create_method(PrimDef::OptionIsNone, self.is_some_ty.0),
|
||||||
@ -738,6 +741,7 @@ impl<'a> BuiltinBuilder<'a> {
|
|||||||
object_id: prim.id(),
|
object_id: prim.id(),
|
||||||
type_vars: vec![self.ndarray_dtype_tvar.ty, self.ndarray_ndims_tvar.ty],
|
type_vars: vec![self.ndarray_dtype_tvar.ty, self.ndarray_ndims_tvar.ty],
|
||||||
fields: Vec::default(),
|
fields: Vec::default(),
|
||||||
|
attributes: Vec::default(),
|
||||||
methods: vec![
|
methods: vec![
|
||||||
Self::create_method(PrimDef::NDArrayCopy, self.ndarray_copy_ty.0),
|
Self::create_method(PrimDef::NDArrayCopy, self.ndarray_copy_ty.0),
|
||||||
Self::create_method(PrimDef::NDArrayFill, self.ndarray_fill_ty.0),
|
Self::create_method(PrimDef::NDArrayFill, self.ndarray_fill_ty.0),
|
||||||
|
@ -474,6 +474,7 @@ impl TopLevelComposer {
|
|||||||
object_id: obj_id,
|
object_id: obj_id,
|
||||||
type_vars: Vec::default(),
|
type_vars: Vec::default(),
|
||||||
fields: Vec::default(),
|
fields: Vec::default(),
|
||||||
|
attributes: Vec::default(),
|
||||||
methods: Vec::default(),
|
methods: Vec::default(),
|
||||||
ancestors: Vec::default(),
|
ancestors: Vec::default(),
|
||||||
constructor,
|
constructor,
|
||||||
|
@ -103,6 +103,10 @@ pub enum TopLevelDef {
|
|||||||
///
|
///
|
||||||
/// Name and type is mutable.
|
/// Name and type is mutable.
|
||||||
fields: Vec<(StrRef, Type, bool)>,
|
fields: Vec<(StrRef, Type, bool)>,
|
||||||
|
/// Class Attributes.
|
||||||
|
///
|
||||||
|
/// Name, type, value.
|
||||||
|
attributes: Vec<(StrRef, Type, ast::Constant)>,
|
||||||
/// Class methods, pointing to the corresponding function definition.
|
/// Class methods, pointing to the corresponding function definition.
|
||||||
methods: Vec<(StrRef, Type, DefinitionId)>,
|
methods: Vec<(StrRef, Type, DefinitionId)>,
|
||||||
/// Ancestor classes, including itself.
|
/// Ancestor classes, including itself.
|
||||||
|
@ -289,6 +289,7 @@ impl TestEnvironment {
|
|||||||
object_id: DefinitionId(i),
|
object_id: DefinitionId(i),
|
||||||
type_vars: Vec::default(),
|
type_vars: Vec::default(),
|
||||||
fields: Vec::default(),
|
fields: Vec::default(),
|
||||||
|
attributes: Vec::default(),
|
||||||
methods: Vec::default(),
|
methods: Vec::default(),
|
||||||
ancestors: Vec::default(),
|
ancestors: Vec::default(),
|
||||||
resolver: None,
|
resolver: None,
|
||||||
@ -331,6 +332,7 @@ impl TestEnvironment {
|
|||||||
object_id: DefinitionId(defs + 1),
|
object_id: DefinitionId(defs + 1),
|
||||||
type_vars: vec![tvar.ty],
|
type_vars: vec![tvar.ty],
|
||||||
fields: [("a".into(), tvar.ty, true)].into(),
|
fields: [("a".into(), tvar.ty, true)].into(),
|
||||||
|
attributes: Vec::default(),
|
||||||
methods: Vec::default(),
|
methods: Vec::default(),
|
||||||
ancestors: Vec::default(),
|
ancestors: Vec::default(),
|
||||||
resolver: None,
|
resolver: None,
|
||||||
@ -365,6 +367,7 @@ impl TestEnvironment {
|
|||||||
object_id: DefinitionId(defs + 2),
|
object_id: DefinitionId(defs + 2),
|
||||||
type_vars: Vec::default(),
|
type_vars: Vec::default(),
|
||||||
fields: [("a".into(), int32, true), ("b".into(), fun, true)].into(),
|
fields: [("a".into(), int32, true), ("b".into(), fun, true)].into(),
|
||||||
|
attributes: Vec::default(),
|
||||||
methods: Vec::default(),
|
methods: Vec::default(),
|
||||||
ancestors: Vec::default(),
|
ancestors: Vec::default(),
|
||||||
resolver: None,
|
resolver: None,
|
||||||
@ -393,6 +396,7 @@ impl TestEnvironment {
|
|||||||
object_id: DefinitionId(defs + 3),
|
object_id: DefinitionId(defs + 3),
|
||||||
type_vars: Vec::default(),
|
type_vars: Vec::default(),
|
||||||
fields: [("a".into(), bool, true), ("b".into(), fun, false)].into(),
|
fields: [("a".into(), bool, true), ("b".into(), fun, false)].into(),
|
||||||
|
attributes: Vec::default(),
|
||||||
methods: Vec::default(),
|
methods: Vec::default(),
|
||||||
ancestors: Vec::default(),
|
ancestors: Vec::default(),
|
||||||
resolver: None,
|
resolver: None,
|
||||||
|
Loading…
Reference in New Issue
Block a user