|
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