From 59f6d9b888bb0b224754e4bce3a5c01314002202 Mon Sep 17 00:00:00 2001 From: dakkar Date: Fri, 28 Jul 2023 11:34:57 +0100 Subject: 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 --- bos-meta-class.sh | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'bos-meta-class.sh') 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 -- cgit v1.2.3