summaryrefslogtreecommitdiff
path: root/bos-meta-class.sh
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2023-07-28 11:34:57 +0100
committerdakkar <dakkar@thenautilus.net>2023-07-28 11:34:57 +0100
commit59f6d9b888bb0b224754e4bce3a5c01314002202 (patch)
treed2f5f3daab8800e27980f4a1a8c4cf647081811a /bos-meta-class.sh
parentBROKEN (diff)
downloadbash-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.sh14
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