@@ -49,15 +49,20 @@ void BuzzPut(buzzvm_t t_vm,
4949/* ***************************************/
5050/* ***************************************/
5151
52- void BuzzTableOpen (buzzvm_t t_vm,
53- const std::string& str_var) {
52+ bool BuzzTableOpen (buzzvm_t t_vm,
53+ const std::string& str_var,
54+ bool b_create) {
5455 buzzvm_pushs (t_vm, buzzvm_string_register (t_vm, str_var.c_str (), 1 ));
5556 buzzvm_dup (t_vm);
5657 buzzvm_gload (t_vm);
5758 if (!buzzobj_istable (buzzvm_stack_at (t_vm, 1 ))) {
59+ if (!b_create) {
60+ return false ;
61+ }
5862 buzzvm_pop (t_vm);
5963 buzzvm_pusht (t_vm);
6064 }
65+ return true ;
6166}
6267
6368/* ***************************************/
@@ -168,49 +173,64 @@ void BuzzTablePut(buzzvm_t t_vm,
168173/* ***************************************/
169174/* ***************************************/
170175
171- void BuzzTableOpenNested (buzzvm_t t_vm,
172- int n_key) {
176+ bool BuzzTableOpenNested (buzzvm_t t_vm,
177+ int n_key,
178+ bool b_create) {
173179 buzzvm_dup (t_vm);
174180 buzzvm_pushi (t_vm, n_key);
175181 buzzvm_push (t_vm, buzzvm_stack_at (t_vm, 2 ));
176182 buzzvm_pushi (t_vm, n_key);
177183 buzzvm_tget (t_vm);
178184 if (!buzzobj_istable (buzzvm_stack_at (t_vm, 1 ))) {
185+ if (!b_create) {
186+ return false ;
187+ }
179188 buzzvm_pop (t_vm);
180189 buzzvm_pusht (t_vm);
181190 }
191+ return true ;
182192}
183193
184194/* ***************************************/
185195/* ***************************************/
186196
187- void BuzzTableOpenNested (buzzvm_t t_vm,
188- float f_key) {
197+ bool BuzzTableOpenNested (buzzvm_t t_vm,
198+ float f_key,
199+ bool b_create) {
189200 buzzvm_dup (t_vm);
190201 buzzvm_pushf (t_vm, f_key);
191202 buzzvm_push (t_vm, buzzvm_stack_at (t_vm, 2 ));
192203 buzzvm_pushf (t_vm, f_key);
193204 buzzvm_tget (t_vm);
194205 if (!buzzobj_istable (buzzvm_stack_at (t_vm, 1 ))) {
206+ if (!b_create) {
207+ return false ;
208+ }
195209 buzzvm_pop (t_vm);
196210 buzzvm_pusht (t_vm);
197211 }
212+ return true ;
198213}
199214
200215/* ***************************************/
201216/* ***************************************/
202217
203- void BuzzTableOpenNested (buzzvm_t t_vm,
204- const std::string& str_key) {
218+ bool BuzzTableOpenNested (buzzvm_t t_vm,
219+ const std::string& str_key,
220+ bool b_create) {
205221 buzzvm_dup (t_vm);
206222 buzzvm_pushs (t_vm, buzzvm_string_register (t_vm, str_key.c_str (), 0 ));
207223 buzzvm_push (t_vm, buzzvm_stack_at (t_vm, 2 ));
208224 buzzvm_pushs (t_vm, buzzvm_string_register (t_vm, str_key.c_str (), 0 ));
209225 buzzvm_tget (t_vm);
210226 if (!buzzobj_istable (buzzvm_stack_at (t_vm, 1 ))) {
227+ if (!b_create) {
228+ return false ;
229+ }
211230 buzzvm_pop (t_vm);
212231 buzzvm_pusht (t_vm);
213232 }
233+ return true ;
214234}
215235
216236/* ***************************************/
0 commit comments