@@ -176,6 +176,7 @@ void proxy_convert_mp_to_js_exc_cside(void *exc, uint32_t *out) {
176
176
}
177
177
178
178
void proxy_c_to_js_call (uint32_t c_ref , uint32_t n_args , uint32_t * args_value , uint32_t * out ) {
179
+ external_call_depth_inc ();
179
180
nlr_buf_t nlr ;
180
181
if (nlr_push (& nlr ) == 0 ) {
181
182
mp_obj_t args [n_args ];
@@ -185,14 +186,17 @@ void proxy_c_to_js_call(uint32_t c_ref, uint32_t n_args, uint32_t *args_value, u
185
186
mp_obj_t obj = proxy_c_get_obj (c_ref );
186
187
mp_obj_t member = mp_call_function_n_kw (obj , n_args , 0 , args );
187
188
nlr_pop ();
189
+ external_call_depth_dec ();
188
190
proxy_convert_mp_to_js_obj_cside (member , out );
189
191
} else {
190
192
// uncaught exception
193
+ external_call_depth_dec ();
191
194
proxy_convert_mp_to_js_exc_cside (nlr .ret_val , out );
192
195
}
193
196
}
194
197
195
198
void proxy_c_to_js_dir (uint32_t c_ref , uint32_t * out ) {
199
+ external_call_depth_inc ();
196
200
nlr_buf_t nlr ;
197
201
if (nlr_push (& nlr ) == 0 ) {
198
202
mp_obj_t obj = proxy_c_get_obj (c_ref );
@@ -210,9 +214,11 @@ void proxy_c_to_js_dir(uint32_t c_ref, uint32_t *out) {
210
214
dir = mp_builtin_dir_obj .fun .var (1 , args );
211
215
}
212
216
nlr_pop ();
217
+ external_call_depth_dec ();
213
218
proxy_convert_mp_to_js_obj_cside (dir , out );
214
219
} else {
215
220
// uncaught exception
221
+ external_call_depth_dec ();
216
222
proxy_convert_mp_to_js_exc_cside (nlr .ret_val , out );
217
223
}
218
224
}
@@ -235,6 +241,7 @@ bool proxy_c_to_js_has_attr(uint32_t c_ref, const char *attr_in) {
235
241
}
236
242
237
243
void proxy_c_to_js_lookup_attr (uint32_t c_ref , const char * attr_in , uint32_t * out ) {
244
+ external_call_depth_inc ();
238
245
nlr_buf_t nlr ;
239
246
if (nlr_push (& nlr ) == 0 ) {
240
247
mp_obj_t obj = proxy_c_get_obj (c_ref );
@@ -255,19 +262,27 @@ void proxy_c_to_js_lookup_attr(uint32_t c_ref, const char *attr_in, uint32_t *ou
255
262
member = mp_load_attr (obj , attr );
256
263
}
257
264
nlr_pop ();
265
+ external_call_depth_dec ();
258
266
proxy_convert_mp_to_js_obj_cside (member , out );
259
267
} else {
260
268
// uncaught exception
269
+ external_call_depth_dec ();
261
270
proxy_convert_mp_to_js_exc_cside (nlr .ret_val , out );
262
271
}
263
272
}
264
273
265
- static bool proxy_c_to_js_store_helper (uint32_t c_ref , const char * attr_in , mp_obj_t value ) {
266
- mp_obj_t obj = proxy_c_get_obj (c_ref );
267
- qstr attr = qstr_from_str (attr_in );
268
-
274
+ static bool proxy_c_to_js_store_helper (uint32_t c_ref , const char * attr_in , uint32_t * value_in ) {
275
+ external_call_depth_inc ();
269
276
nlr_buf_t nlr ;
270
277
if (nlr_push (& nlr ) == 0 ) {
278
+ mp_obj_t obj = proxy_c_get_obj (c_ref );
279
+ qstr attr = qstr_from_str (attr_in );
280
+
281
+ mp_obj_t value = MP_OBJ_NULL ;
282
+ if (value_in != NULL ) {
283
+ value = proxy_convert_js_to_mp_obj_cside (value_in );
284
+ }
285
+
271
286
if (mp_obj_is_dict_or_ordereddict (obj )) {
272
287
if (value == MP_OBJ_NULL ) {
273
288
mp_obj_dict_delete (obj , MP_OBJ_NEW_QSTR (attr ));
@@ -278,20 +293,21 @@ static bool proxy_c_to_js_store_helper(uint32_t c_ref, const char *attr_in, mp_o
278
293
mp_store_attr (obj , attr , value );
279
294
}
280
295
nlr_pop ();
296
+ external_call_depth_dec ();
281
297
return true;
282
298
} else {
283
299
// uncaught exception
300
+ external_call_depth_dec ();
284
301
return false;
285
302
}
286
303
}
287
304
288
305
bool proxy_c_to_js_store_attr (uint32_t c_ref , const char * attr_in , uint32_t * value_in ) {
289
- mp_obj_t value = proxy_convert_js_to_mp_obj_cside (value_in );
290
- return proxy_c_to_js_store_helper (c_ref , attr_in , value );
306
+ return proxy_c_to_js_store_helper (c_ref , attr_in , value_in );
291
307
}
292
308
293
309
bool proxy_c_to_js_delete_attr (uint32_t c_ref , const char * attr_in ) {
294
- return proxy_c_to_js_store_helper (c_ref , attr_in , MP_OBJ_NULL );
310
+ return proxy_c_to_js_store_helper (c_ref , attr_in , NULL );
295
311
}
296
312
297
313
uint32_t proxy_c_to_js_get_type (uint32_t c_ref ) {
@@ -352,18 +368,22 @@ uint32_t proxy_c_to_js_get_iter(uint32_t c_ref) {
352
368
}
353
369
354
370
bool proxy_c_to_js_iternext (uint32_t c_ref , uint32_t * out ) {
355
- mp_obj_t obj = proxy_c_get_obj ( c_ref );
371
+ external_call_depth_inc ( );
356
372
nlr_buf_t nlr ;
357
373
if (nlr_push (& nlr ) == 0 ) {
374
+ mp_obj_t obj = proxy_c_get_obj (c_ref );
358
375
mp_obj_t iter = mp_iternext_allow_raise (obj );
359
376
if (iter == MP_OBJ_STOP_ITERATION ) {
377
+ external_call_depth_dec ();
360
378
nlr_pop ();
361
379
return false;
362
380
}
363
381
nlr_pop ();
382
+ external_call_depth_dec ();
364
383
proxy_convert_mp_to_js_obj_cside (iter , out );
365
384
return true;
366
385
} else {
386
+ external_call_depth_dec ();
367
387
if (mp_obj_is_subclass_fast (MP_OBJ_FROM_PTR (((mp_obj_base_t * )nlr .ret_val )-> type ), MP_OBJ_FROM_PTR (& mp_type_StopIteration ))) {
368
388
return false;
369
389
} else {
@@ -475,16 +495,19 @@ static mp_obj_t resume_fun(size_t n_args, const mp_obj_t *args) {
475
495
static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (resume_obj , 5 , 5 , resume_fun ) ;
476
496
477
497
void proxy_c_to_js_resume (uint32_t c_ref , uint32_t * args ) {
498
+ external_call_depth_inc ();
478
499
nlr_buf_t nlr ;
479
500
if (nlr_push (& nlr ) == 0 ) {
480
501
mp_obj_t obj = proxy_c_get_obj (c_ref );
481
502
mp_obj_t resolve = proxy_convert_js_to_mp_obj_cside (args + 1 * 3 );
482
503
mp_obj_t reject = proxy_convert_js_to_mp_obj_cside (args + 2 * 3 );
483
504
mp_obj_t ret = proxy_resume_execute (obj , mp_const_none , mp_const_none , resolve , reject );
484
505
nlr_pop ();
506
+ external_call_depth_dec ();
485
507
proxy_convert_mp_to_js_obj_cside (ret , args );
486
508
} else {
487
509
// uncaught exception
510
+ external_call_depth_dec ();
488
511
proxy_convert_mp_to_js_exc_cside (nlr .ret_val , args );
489
512
}
490
513
}
0 commit comments