|
55 | 55 | *int64_out_p = (int64_t)Z_LVAL_P(zval); \
|
56 | 56 | }
|
57 | 57 |
|
| 58 | + |
| 59 | + |
| 60 | + |
58 | 61 | enum
|
59 | 62 | {
|
60 | 63 | PB_TYPE_DOUBLE = 1,
|
@@ -89,11 +92,9 @@ static int pb_is_field_packed(zval *field_descriptor);
|
89 | 92 |
|
90 | 93 | PHP_METHOD(ProtobufMessage, __construct)
|
91 | 94 | {
|
92 |
| - zval values; |
93 |
| - array_init(&values); |
94 |
| - |
95 |
| - add_property_zval(getThis(), PB_VALUES_PROPERTY, &values); |
96 |
| - zval_ptr_dtor(&values); |
| 95 | + zval values_array; |
| 96 | + array_init(&values_array); |
| 97 | + zend_update_property(pb_entry, getThis(), PB_VALUES_PROPERTY, sizeof(PB_VALUES_PROPERTY) - 1, &values_array); |
97 | 98 | }
|
98 | 99 |
|
99 | 100 | PHP_METHOD(ProtobufMessage, append)
|
@@ -703,6 +704,8 @@ PHP_MINIT_FUNCTION(protobuf)
|
703 | 704 |
|
704 | 705 | INIT_CLASS_ENTRY(ce, "ProtobufMessage", pb_methods);
|
705 | 706 | pb_entry = zend_register_internal_class(&ce TSRMLS_CC);
|
| 707 | + |
| 708 | + zend_declare_property_null(pb_entry, PB_VALUES_PROPERTY, sizeof(PB_VALUES_PROPERTY) - 1, ZEND_ACC_PUBLIC); |
706 | 709 |
|
707 | 710 | PB_CONSTANT(PB_TYPE_DOUBLE);
|
708 | 711 | PB_CONSTANT(PB_TYPE_FIXED32);
|
@@ -929,7 +932,7 @@ static int pb_get_field_descriptors(zval *this, zval* return_value)
|
929 | 932 | TSRMLS_FETCH();
|
930 | 933 |
|
931 | 934 | ZVAL_STRINGL(&method, PB_FIELDS_METHOD, sizeof(PB_FIELDS_METHOD) - 1);
|
932 |
| - if (call_user_function_impl(NULL, this, &method, &descriptors, 0, NULL, 0, NULL TSRMLS_CC) == FAILURE) { |
| 935 | + if (call_user_function(NULL, this, &method, &descriptors, 0, NULL) == FAILURE) { |
933 | 936 | return -1;
|
934 | 937 | }
|
935 | 938 | *return_value = descriptors;
|
@@ -1041,11 +1044,16 @@ static zval *pb_get_value(zval *this, zval *values, zend_ulong field_number)
|
1041 | 1044 |
|
1042 | 1045 | static zval *pb_get_values(zval *this)
|
1043 | 1046 | {
|
1044 |
| - zval *values = NULL; |
1045 |
| - TSRMLS_FETCH(); |
| 1047 | + zend_class_entry *ce = Z_OBJCE_P(this); |
| 1048 | + |
| 1049 | + zend_property_info *property_info; |
| 1050 | + if ((property_info = zend_hash_str_find_ptr(&ce->properties_info, PB_VALUES_PROPERTY, strlen(PB_VALUES_PROPERTY))) == NULL) { |
| 1051 | + return NULL; |
| 1052 | + } |
| 1053 | + |
| 1054 | + zval *property = (zval *)((char *)Z_OBJ_P(this) + property_info->offset); |
1046 | 1055 |
|
1047 |
| - values = zend_hash_str_find(Z_OBJPROP_P(this), PB_VALUES_PROPERTY, sizeof(PB_VALUES_PROPERTY) - 1); |
1048 |
| - return values; |
| 1056 | + return property; |
1049 | 1057 | }
|
1050 | 1058 |
|
1051 | 1059 | static int pb_parse_field_value(zval *this, reader_t *reader, zend_ulong field_number, zend_long field_type, zval *value)
|
|
0 commit comments