|
|
|
@ -999,6 +999,12 @@ static void* wrapper_submsg_handler(void* closure, const void* hd) { |
|
|
|
|
frame->submsg = submsg; |
|
|
|
|
frame->is_msg = true; |
|
|
|
|
} else { |
|
|
|
|
if (Z_TYPE_P(CACHED_PTR_TO_ZVAL_PTR(cached)) == IS_NULL) { |
|
|
|
|
// Needs to initiate the wrapper message
|
|
|
|
|
const upb_msgdef* msgdef = subdesc->msgdef; |
|
|
|
|
const upb_fielddef* f = upb_msgdef_itof(msgdef, 1); |
|
|
|
|
native_slot_get_default(upb_fielddef_type(f), cached TSRMLS_CC); |
|
|
|
|
} |
|
|
|
|
// In this case, wrapper message hasn't been created and value will be
|
|
|
|
|
// stored in cache directly.
|
|
|
|
|
frame->submsg = cached; |
|
|
|
@ -1024,6 +1030,12 @@ static void* wrapper_oneofsubmsg_handler(void* closure, const void* hd) { |
|
|
|
|
|
|
|
|
|
if (oldcase != oneofdata->oneof_case_num) { |
|
|
|
|
oneof_cleanup(msg, oneofdata); |
|
|
|
|
if (Z_TYPE_P(CACHED_PTR_TO_ZVAL_PTR(cached)) == IS_NULL) { |
|
|
|
|
// Needs to initiate the wrapper message
|
|
|
|
|
const upb_msgdef* msgdef = subdesc->msgdef; |
|
|
|
|
const upb_fielddef* f = upb_msgdef_itof(msgdef, 1); |
|
|
|
|
native_slot_get_default(upb_fielddef_type(f), cached TSRMLS_CC); |
|
|
|
|
} |
|
|
|
|
frame->submsg = cached; |
|
|
|
|
frame->is_msg = false; |
|
|
|
|
} else if (Z_TYPE_P(CACHED_PTR_TO_ZVAL_PTR(cached)) == IS_OBJECT) { |
|
|
|
|