diff options
author | dakkar <dakkar@thenautilus.net> | 2023-07-28 11:34:57 +0100 |
---|---|---|
committer | dakkar <dakkar@thenautilus.net> | 2023-07-28 11:34:57 +0100 |
commit | 59f6d9b888bb0b224754e4bce3a5c01314002202 (patch) | |
tree | d2f5f3daab8800e27980f4a1a8c4cf647081811a /bos-meta-class.sh | |
parent | BROKEN (diff) | |
download | bash-object-system-59f6d9b888bb0b224754e4bce3a5c01314002202.tar.gz bash-object-system-59f6d9b888bb0b224754e4bce3a5c01314002202.tar.bz2 bash-object-system-59f6d9b888bb0b224754e4bce3a5c01314002202.zip |
STILL BORKEN
we need attribute defaults, probably via functions?
it currently explodes when it can't find a value for
`class_attributes` for metaclasses of non-bootstrap classes
Diffstat (limited to 'bos-meta-class.sh')
-rw-r--r-- | bos-meta-class.sh | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/bos-meta-class.sh b/bos-meta-class.sh index 9e25b90..bd83c29 100644 --- a/bos-meta-class.sh +++ b/bos-meta-class.sh @@ -154,7 +154,7 @@ function bos/meta/class/find-attribute-into() { # minimal MRO: the class itself if [[ "${#mro[@]}" -eq 0 ]]; then - mro=( "$class" ) + mro=( "$bos_meta_class_find_attribute_class" ) fi local bos_meta_class_for_class @@ -163,6 +163,8 @@ function bos/meta/class/find-attribute-into() { for bos_class_from_mro in "${mro[@]}"; do bos-meta/metaclass-instance-for-class-into bos_meta_class_for_class "$bos_class_from_mro" + >&2 echo "from mro(${mro[*]})=$bos_class_from_mro meta=$bos_meta_class_for_class" + $bos_meta_class_for_class get-attribute-by-name-into bos_meta_class_find_attribute_result "$bos_meta_class_find_attribute_attribute_name" if [[ -n "$bos_meta_class_find_attribute_result" ]]; then @@ -171,7 +173,7 @@ function bos/meta/class/find-attribute-into() { done # TODO: better error / failure - >&2 echo "attribute $attribute_name not found via class $class" + >&2 echo "attribute $bos_meta_class_find_attribute_attribute_name not found via class $bos_meta_class_find_attribute_class" return 1 } @@ -200,9 +202,11 @@ function bos/meta/class/invoke() { local ffsname="to_invoke_${#FUNCNAME[*]}" $self find-method-into "$ffsname" "$bos_invoke_class" "$bos_invoke_start_from_class" "$bos_invoke_method" + local bos_invoke_target_class="${!ffsname%/*}" local bos_invoke_attrs_attr - $self find-attribute-into bos_invoke_attrs_attr "$bos_invoke_class" 'class_attributes' - + $self find-attribute-into bos_invoke_attrs_attr "$bos_invoke_target_class" 'class_attributes' + >&2 echo "for (${bos_invoke_class}->${bos_invoke_target_class}) class_attributes = $bos_invoke_attrs_attr" + if [[ -n "$bos_invoke_attrs_attr" ]]; then local -A bos_invoke_attrs $bos_invoke_attrs_attr get-value-into bos_invoke_attrs "$self" @@ -220,7 +224,7 @@ function bos/meta/class/invoke() { assoc) local -A "$bos_invoke_attr_name" ;; esac - $bos_invoke_attr_obj get-value-into "$bos_invoke_attr_name" + $bos_invoke_attr_obj get-value-into "$bos_invoke_attr_name" "$self" done fi |