@@ -64,6 +64,8 @@ static zend_object* Message_create(zend_class_entry* class_type) {
64
64
Message_SuppressDefaultProperties (class_type );
65
65
zend_object_std_init (& intern -> std , class_type );
66
66
intern -> std .handlers = & message_object_handlers ;
67
+ intern -> desc = NULL ;
68
+
67
69
Arena_Init (& intern -> arena );
68
70
return & intern -> std ;
69
71
}
@@ -88,6 +90,56 @@ static void Message_dtor(zend_object* obj) {
88
90
* Helper function to look up a field given a member name (as a string).
89
91
*/
90
92
static const upb_FieldDef * get_field (Message * msg , zend_string * member ) {
93
+ //fprintf(stderr, "get_field\n");
94
+
95
+ if (!msg || !msg -> desc || !msg -> desc -> msgdef ) {
96
+ // zend_string* class_name = msg ? msg->std.ce->name : NULL;
97
+ // zend_class_entry* parent_ce = msg && msg->std.ce->parent ? msg->std.ce->parent : NULL;
98
+
99
+ // fprintf(stderr,
100
+ // "get_field: Invalid msg or desc: msg=%p, desc=%p\n",
101
+ // (void*)msg, (void*)msg->desc
102
+ // );
103
+
104
+ // if (class_name) {
105
+ // fprintf(stderr, "Class name: %s\n", ZSTR_VAL(class_name));
106
+ // } else {
107
+ // fprintf(stderr, "Class name: (null)\n");
108
+ // }
109
+
110
+ // if (parent_ce) {
111
+ // fprintf(stderr, "Parent class: %s\n", ZSTR_VAL(parent_ce->name));
112
+ // } else {
113
+ // fprintf(stderr, "Parent class: (none)\n");
114
+ // }
115
+
116
+ // // Print the full stack trace
117
+ // fprintf(stderr, "Full stack trace:\n");
118
+ // const zend_execute_data* frame = EG(current_execute_data);
119
+ // while (frame) {
120
+ // const zend_function* func = frame->func;
121
+ // const char* function_name = func->common.function_name
122
+ // ? ZSTR_VAL(func->common.function_name)
123
+ // : "(unknown)";
124
+ // const char* class_name = func->common.scope
125
+ // ? ZSTR_VAL(func->common.scope->name)
126
+ // : "(none)";
127
+ // const char* filename = func->op_array.filename
128
+ // ? ZSTR_VAL(func->op_array.filename)
129
+ // : "(unknown)";
130
+ // uint32_t line = frame->opline ? frame->opline->lineno : 0;
131
+
132
+ // fprintf(stderr, " at %s::%s() in %s on line %u\n",
133
+ // class_name, function_name, filename, line);
134
+
135
+ // // Move to the previous frame
136
+ // frame = frame->prev_execute_data;
137
+ // }
138
+
139
+ zend_throw_exception_ex (NULL , 0 , "Message is uninitialized or corrupted." );
140
+ return NULL ;
141
+ }
142
+
91
143
const upb_MessageDef * m = msg -> desc -> msgdef ;
92
144
const upb_FieldDef * f = upb_MessageDef_FindFieldByNameWithSize (
93
145
m , ZSTR_VAL (member ), ZSTR_LEN (member ));
@@ -345,6 +397,13 @@ static zval* Message_read_property(zend_object* obj, zend_string* member,
345
397
*/
346
398
static zval * Message_write_property (zend_object * obj , zend_string * member ,
347
399
zval * val , void * * cache_slot ) {
400
+ // fprintf(
401
+ // stderr,
402
+ // "Message_write_property: obj->ce->name=%s, member=%s\n",
403
+ // ZSTR_VAL(obj->ce->name),
404
+ // ZSTR_VAL(member)
405
+ // );
406
+
348
407
Message * intern = (Message * )obj ;
349
408
const upb_FieldDef * f = get_field (intern , member );
350
409
0 commit comments