|
|
@ -199,8 +199,9 @@ static void *startseq_handler(void* closure, const void* hd) { |
|
|
|
// Handlers that append primitive values to a repeated field.
|
|
|
|
// Handlers that append primitive values to a repeated field.
|
|
|
|
#define DEFINE_APPEND_HANDLER(type, ctype) \ |
|
|
|
#define DEFINE_APPEND_HANDLER(type, ctype) \ |
|
|
|
static bool append##type##_handler(void* closure, const void* hd, \
|
|
|
|
static bool append##type##_handler(void* closure, const void* hd, \
|
|
|
|
ctype val TSRMLS_DC) { \
|
|
|
|
ctype val) { \
|
|
|
|
zval* array = (zval*)closure; \
|
|
|
|
zval* array = (zval*)closure; \
|
|
|
|
|
|
|
|
TSRMLS_FETCH(); \
|
|
|
|
RepeatedField* intern = \
|
|
|
|
RepeatedField* intern = \
|
|
|
|
(RepeatedField*)zend_object_store_get_object(array TSRMLS_CC); \
|
|
|
|
(RepeatedField*)zend_object_store_get_object(array TSRMLS_CC); \
|
|
|
|
repeated_field_push_native(intern, &val TSRMLS_CC); \
|
|
|
|
repeated_field_push_native(intern, &val TSRMLS_CC); \
|
|
|
@ -218,8 +219,9 @@ DEFINE_APPEND_HANDLER(double, double) |
|
|
|
// Appends a string to a repeated field.
|
|
|
|
// Appends a string to a repeated field.
|
|
|
|
static void* appendstr_handler(void *closure, |
|
|
|
static void* appendstr_handler(void *closure, |
|
|
|
const void *hd, |
|
|
|
const void *hd, |
|
|
|
size_t size_hint TSRMLS_DC) { |
|
|
|
size_t size_hint) { |
|
|
|
zval* array = (zval*)closure; |
|
|
|
zval* array = (zval*)closure; |
|
|
|
|
|
|
|
TSRMLS_FETCH(); |
|
|
|
RepeatedField* intern = |
|
|
|
RepeatedField* intern = |
|
|
|
(RepeatedField*)zend_object_store_get_object(array TSRMLS_CC); |
|
|
|
(RepeatedField*)zend_object_store_get_object(array TSRMLS_CC); |
|
|
|
|
|
|
|
|
|
|
@ -234,8 +236,9 @@ static void* appendstr_handler(void *closure, |
|
|
|
// Appends a 'bytes' string to a repeated field.
|
|
|
|
// Appends a 'bytes' string to a repeated field.
|
|
|
|
static void* appendbytes_handler(void *closure, |
|
|
|
static void* appendbytes_handler(void *closure, |
|
|
|
const void *hd, |
|
|
|
const void *hd, |
|
|
|
size_t size_hint TSRMLS_DC) { |
|
|
|
size_t size_hint) { |
|
|
|
zval* array = (zval*)closure; |
|
|
|
zval* array = (zval*)closure; |
|
|
|
|
|
|
|
TSRMLS_FETCH(); |
|
|
|
RepeatedField* intern = |
|
|
|
RepeatedField* intern = |
|
|
|
(RepeatedField*)zend_object_store_get_object(array TSRMLS_CC); |
|
|
|
(RepeatedField*)zend_object_store_get_object(array TSRMLS_CC); |
|
|
|
|
|
|
|
|
|
|
@ -296,8 +299,9 @@ static size_t stringdata_handler(void* closure, const void* hd, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Appends a submessage to a repeated field.
|
|
|
|
// Appends a submessage to a repeated field.
|
|
|
|
static void *appendsubmsg_handler(void *closure, const void *hd TSRMLS_DC) { |
|
|
|
static void *appendsubmsg_handler(void *closure, const void *hd) { |
|
|
|
zval* array = (zval*)closure; |
|
|
|
zval* array = (zval*)closure; |
|
|
|
|
|
|
|
TSRMLS_FETCH(); |
|
|
|
RepeatedField* intern = |
|
|
|
RepeatedField* intern = |
|
|
|
(RepeatedField*)zend_object_store_get_object(array TSRMLS_CC); |
|
|
|
(RepeatedField*)zend_object_store_get_object(array TSRMLS_CC); |
|
|
|
|
|
|
|
|
|
|
@ -319,10 +323,11 @@ static void *appendsubmsg_handler(void *closure, const void *hd TSRMLS_DC) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Sets a non-repeated submessage field in a message.
|
|
|
|
// Sets a non-repeated submessage field in a message.
|
|
|
|
static void *submsg_handler(void *closure, const void *hd TSRMLS_DC) { |
|
|
|
static void *submsg_handler(void *closure, const void *hd) { |
|
|
|
MessageHeader* msg = closure; |
|
|
|
MessageHeader* msg = closure; |
|
|
|
const submsg_handlerdata_t* submsgdata = hd; |
|
|
|
const submsg_handlerdata_t* submsgdata = hd; |
|
|
|
zval* subdesc_php = get_def_obj((void*)submsgdata->md); |
|
|
|
zval* subdesc_php = get_def_obj((void*)submsgdata->md); |
|
|
|
|
|
|
|
TSRMLS_FETCH(); |
|
|
|
Descriptor* subdesc = zend_object_store_get_object(subdesc_php TSRMLS_CC); |
|
|
|
Descriptor* subdesc = zend_object_store_get_object(subdesc_php TSRMLS_CC); |
|
|
|
zend_class_entry* subklass = subdesc->klass; |
|
|
|
zend_class_entry* subklass = subdesc->klass; |
|
|
|
zval* submsg_php; |
|
|
|
zval* submsg_php; |
|
|
@ -465,11 +470,11 @@ static void *startmapentry_handler(void *closure, const void *hd) { |
|
|
|
|
|
|
|
|
|
|
|
// Handler to end a map entry: inserts the value defined during the message into
|
|
|
|
// Handler to end a map entry: inserts the value defined during the message into
|
|
|
|
// the map. This is the 'endmsg' handler on the map entry msgdef.
|
|
|
|
// the map. This is the 'endmsg' handler on the map entry msgdef.
|
|
|
|
static bool endmap_handler(void *closure, const void *hd, upb_status* s |
|
|
|
static bool endmap_handler(void* closure, const void* hd, upb_status* s) { |
|
|
|
TSRMLS_DC) { |
|
|
|
|
|
|
|
map_parse_frame_t* frame = closure; |
|
|
|
map_parse_frame_t* frame = closure; |
|
|
|
const map_handlerdata_t* mapdata = hd; |
|
|
|
const map_handlerdata_t* mapdata = hd; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TSRMLS_FETCH(); |
|
|
|
Map *map = (Map *)zend_object_store_get_object(frame->map TSRMLS_CC); |
|
|
|
Map *map = (Map *)zend_object_store_get_object(frame->map TSRMLS_CC); |
|
|
|
|
|
|
|
|
|
|
|
const char* keyval = NULL; |
|
|
|
const char* keyval = NULL; |
|
|
@ -575,12 +580,12 @@ static void *oneofbytes_handler(void *closure, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Handler for a submessage field in a oneof.
|
|
|
|
// Handler for a submessage field in a oneof.
|
|
|
|
static void *oneofsubmsg_handler(void *closure, |
|
|
|
static void* oneofsubmsg_handler(void* closure, const void* hd) { |
|
|
|
const void *hd TSRMLS_DC) { |
|
|
|
|
|
|
|
MessageHeader* msg = closure; |
|
|
|
MessageHeader* msg = closure; |
|
|
|
const oneof_handlerdata_t *oneofdata = hd; |
|
|
|
const oneof_handlerdata_t *oneofdata = hd; |
|
|
|
uint32_t oldcase = DEREF(msg, oneofdata->case_ofs, uint32_t); |
|
|
|
uint32_t oldcase = DEREF(msg, oneofdata->case_ofs, uint32_t); |
|
|
|
zval* subdesc_php = get_def_obj((void*)oneofdata->md); |
|
|
|
zval* subdesc_php = get_def_obj((void*)oneofdata->md); |
|
|
|
|
|
|
|
TSRMLS_FETCH(); |
|
|
|
Descriptor* subdesc = zend_object_store_get_object(subdesc_php TSRMLS_CC); |
|
|
|
Descriptor* subdesc = zend_object_store_get_object(subdesc_php TSRMLS_CC); |
|
|
|
zend_class_entry* subklass = subdesc->klass; |
|
|
|
zend_class_entry* subklass = subdesc->klass; |
|
|
|
zval* submsg_php; |
|
|
|
zval* submsg_php; |
|
|
@ -773,9 +778,10 @@ static void add_handlers_for_oneof_field(upb_handlers *h, |
|
|
|
upb_handlerattr_uninit(&attr); |
|
|
|
upb_handlerattr_uninit(&attr); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static void add_handlers_for_message(const void *closure, upb_handlers *h |
|
|
|
static void add_handlers_for_message(const void* closure, |
|
|
|
TSRMLS_DC) { |
|
|
|
upb_handlers* h) { |
|
|
|
const upb_msgdef* msgdef = upb_handlers_msgdef(h); |
|
|
|
const upb_msgdef* msgdef = upb_handlers_msgdef(h); |
|
|
|
|
|
|
|
TSRMLS_FETCH(); |
|
|
|
Descriptor* desc = (Descriptor*)zend_object_store_get_object( |
|
|
|
Descriptor* desc = (Descriptor*)zend_object_store_get_object( |
|
|
|
get_def_obj((void*)msgdef) TSRMLS_CC); |
|
|
|
get_def_obj((void*)msgdef) TSRMLS_CC); |
|
|
|
upb_msg_field_iter i; |
|
|
|
upb_msg_field_iter i; |
|
|
|