@@ -81,23 +81,41 @@ bash_object.traverse-set() {
8181 return
8282 fi
8383 elif [ " $flag_pass_by_what " = ' by-value' ]; then
84- if [ " $final_value_type " == object ]; then
85- local -A temp_var_name=" __bash_object_${RANDOM} _$RANDOM "
86- local -n temp_var=" $temp_var_name "
84+ if [ " $final_value_type " = object ]; then
85+ final_value=" __bash_object_${RANDOM} _$RANDOM "
86+ local -A " $final_value "
87+ local -n final_value_ref=" $final_value "
88+ final_value_ref=()
89+
8790 if [ " $1 " != -- ]; then
8891 bash_object.util.die ' ERROR_ARGUMENTS_INVALID' " Must pass '--' and the value when using --value"
8992 return
9093 fi
94+ shift
95+
9196 if (( $# & 1 )) ; then
9297 bash_object.util.die ' ERROR_ARGUMENTS_INVALID' " When passing --value with set-object, an even number of values must be passed after the '--'"
9398 return
9499 fi
95- for (( i= 0 ; i< $# ; i+ 2 )) ; do
96- temp_var[" ${! i} " ]=" ${! i+1} "
97- done
98- elif [ " $final_value_type " == array ]; then
99- local -a temp_var_name=" __bash_object_${RANDOM} _$RANDOM "
100- local -n temp_var=" $temp_var_name "
100+
101+ while (( $# )) ; do
102+ local key=" $1 "
103+ if ! shift ; then
104+ bash_object.util.die ' ERROR_INTERNAL' ' Shift failed, but was expected to succeed'
105+ return
106+ fi
107+
108+ local value=" $1 "
109+ if ! shift ; then
110+ bash_object.util.die ' ERROR_INTERNAL' ' Shift failed, but was expected to succeed'
111+ return
112+ fi
113+
114+ final_value_ref[" $key " ]=" $value "
115+ done ; unset key value
116+ elif [ " $final_value_type " = array ]; then
117+ local -a final_value=" __bash_object_${RANDOM} _$RANDOM "
118+ local -n final_value_ref=" $final_value "
101119 if [ " $1 " != -- ]; then
102120 bash_object.util.die ' ERROR_ARGUMENTS_INVALID' " Must pass '--' and the value when using --value"
103121 return
0 commit comments