@@ -81,23 +81,41 @@ bash_object.traverse-set() {
81
81
return
82
82
fi
83
83
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
+
87
90
if [ " $1 " != -- ]; then
88
91
bash_object.util.die ' ERROR_ARGUMENTS_INVALID' " Must pass '--' and the value when using --value"
89
92
return
90
93
fi
94
+ shift
95
+
91
96
if (( $# & 1 )) ; then
92
97
bash_object.util.die ' ERROR_ARGUMENTS_INVALID' " When passing --value with set-object, an even number of values must be passed after the '--'"
93
98
return
94
99
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 "
101
119
if [ " $1 " != -- ]; then
102
120
bash_object.util.die ' ERROR_ARGUMENTS_INVALID' " Must pass '--' and the value when using --value"
103
121
return
0 commit comments