@@ -81,8 +81,8 @@ static int BreakIterator_compare_objects(zval *object1,
81
81
BreakIterator_object *bio1,
82
82
*bio2;
83
83
84
- bio1 = (BreakIterator_object*) zend_object_store_get_object ( object1 TSRMLS_CC );
85
- bio2 = (BreakIterator_object*) zend_object_store_get_object ( object2 TSRMLS_CC );
84
+ bio1 = Z_INTL_BREAKITERATOR_P ( object1);
85
+ bio2 = Z_INTL_BREAKITERATOR_P ( object2);
86
86
87
87
if (bio1->biter == NULL || bio2->biter == NULL ) {
88
88
return bio1->biter == bio2->biter ? 0 : 1 ;
@@ -93,41 +93,36 @@ static int BreakIterator_compare_objects(zval *object1,
93
93
/* }}} */
94
94
95
95
/* {{{ clone handler for BreakIterator */
96
- static zend_object_value BreakIterator_clone_obj (zval *object TSRMLS_DC)
96
+ static zend_object * BreakIterator_clone_obj (zval *object TSRMLS_DC)
97
97
{
98
98
BreakIterator_object *bio_orig,
99
99
*bio_new;
100
- zend_object_value ret_val;
100
+ zend_object * ret_val;
101
101
102
- bio_orig = (BreakIterator_object*) zend_object_store_get_object ( object TSRMLS_CC );
102
+ bio_orig = Z_INTL_BREAKITERATOR_P ( object);
103
103
intl_errors_reset (INTL_DATA_ERROR_P (bio_orig) TSRMLS_CC);
104
104
105
105
ret_val = BreakIterator_ce_ptr->create_object (Z_OBJCE_P (object) TSRMLS_CC);
106
- bio_new = (BreakIterator_object*)zend_object_store_get_object_by_handle (
107
- ret_val.handle TSRMLS_CC);
106
+ bio_new = php_intl_breakiterator_fetch_object (ret_val);
108
107
109
- zend_objects_clone_members (&bio_new->zo , ret_val,
110
- &bio_orig->zo , Z_OBJ_HANDLE_P (object) TSRMLS_CC);
108
+ zend_objects_clone_members (&bio_new->zo , &bio_orig->zo TSRMLS_CC);
111
109
112
110
if (bio_orig->biter != NULL ) {
113
111
BreakIterator *new_biter;
114
112
115
113
new_biter = bio_orig->biter ->clone ();
116
114
if (!new_biter) {
117
- char *err_msg;
115
+ zend_string *err_msg;
118
116
intl_errors_set_code (BREAKITER_ERROR_P (bio_orig),
119
117
U_MEMORY_ALLOCATION_ERROR TSRMLS_CC);
120
118
intl_errors_set_custom_msg (BREAKITER_ERROR_P (bio_orig),
121
119
" Could not clone BreakIterator" , 0 TSRMLS_CC);
122
120
err_msg = intl_error_get_message (BREAKITER_ERROR_P (bio_orig) TSRMLS_CC);
123
- zend_throw_exception (NULL , err_msg, 0 TSRMLS_CC);
124
- efree (err_msg);
121
+ zend_throw_exception (NULL , err_msg-> val , 0 TSRMLS_CC);
122
+ STR_FREE (err_msg);
125
123
} else {
126
124
bio_new->biter = new_biter;
127
- bio_new->text = bio_orig->text ;
128
- if (bio_new->text ) {
129
- zval_add_ref (&bio_new->text );
130
- }
125
+ ZVAL_COPY (&bio_new->text , &bio_orig->text );
131
126
}
132
127
} else {
133
128
zend_throw_exception (NULL , " Cannot clone unconstructed BreakIterator" , 0 TSRMLS_CC);
@@ -148,23 +143,23 @@ static HashTable *BreakIterator_get_debug_info(zval *object, int *is_temp TSRMLS
148
143
149
144
array_init_size (&zv, 8 );
150
145
151
- bio = (BreakIterator_object*) zend_object_store_get_object ( object TSRMLS_CC );
146
+ bio = Z_INTL_BREAKITERATOR_P ( object);
152
147
biter = bio->biter ;
153
148
154
149
if (biter == NULL ) {
155
- add_assoc_bool_ex (&zv, " valid" , sizeof (" valid" ), 0 );
150
+ add_assoc_bool_ex (&zv, " valid" , sizeof (" valid" ) - 1 , 0 );
156
151
return Z_ARRVAL (zv);
157
152
}
158
- add_assoc_bool_ex (&zv, " valid" , sizeof (" valid" ), 1 );
153
+ add_assoc_bool_ex (&zv, " valid" , sizeof (" valid" ) - 1 , 1 );
159
154
160
- if (bio->text == NULL ) {
161
- add_assoc_null_ex (&zv, " text" , sizeof (" text" ));
155
+ if (Z_ISUNDEF ( bio->text ) ) {
156
+ add_assoc_null_ex (&zv, " text" , sizeof (" text" ) - 1 );
162
157
} else {
163
- zval_add_ref (& bio->text );
164
- add_assoc_zval_ex (&zv, " text" , sizeof (" text" ), bio->text );
158
+ Z_TRY_ADDREF ( bio->text );
159
+ add_assoc_zval_ex (&zv, " text" , sizeof (" text" ) - 1 , & bio->text );
165
160
}
166
161
167
- add_assoc_string_ex (&zv, " type" , sizeof (" type" ),
162
+ add_assoc_string_ex (&zv, " type" , sizeof (" type" ) - 1 ,
168
163
const_cast <char *>(typeid (*biter).name ()));
169
164
170
165
return Z_ARRVAL (zv);
@@ -178,64 +173,47 @@ static void breakiterator_object_init(BreakIterator_object *bio TSRMLS_DC)
178
173
{
179
174
intl_error_init (BREAKITER_ERROR_P (bio) TSRMLS_CC);
180
175
bio->biter = NULL ;
181
- bio->text = NULL ;
176
+ ZVAL_UNDEF (& bio->text ) ;
182
177
}
183
178
/* }}} */
184
179
185
180
/* {{{ BreakIterator_objects_dtor */
186
- static void BreakIterator_objects_dtor (void *object,
187
- zend_object_handle handle TSRMLS_DC)
181
+ static void BreakIterator_objects_dtor (zend_object *object TSRMLS_DC)
188
182
{
189
- zend_objects_destroy_object ((zend_object*) object, handle TSRMLS_CC);
183
+ zend_objects_destroy_object (object TSRMLS_CC);
190
184
}
191
185
/* }}} */
192
186
193
187
/* {{{ BreakIterator_objects_free */
194
188
static void BreakIterator_objects_free (zend_object *object TSRMLS_DC)
195
189
{
196
- BreakIterator_object* bio = (BreakIterator_object*) object;
190
+ BreakIterator_object* bio = php_intl_breakiterator_fetch_object ( object) ;
197
191
198
- if (bio->text ) {
199
- zval_ptr_dtor (&bio->text );
200
- }
192
+ zval_ptr_dtor (&bio->text );
201
193
if (bio->biter ) {
202
194
delete bio->biter ;
203
195
bio->biter = NULL ;
204
196
}
205
197
intl_error_reset (BREAKITER_ERROR_P (bio) TSRMLS_CC);
206
198
207
199
zend_object_std_dtor (&bio->zo TSRMLS_CC);
208
-
209
- efree (bio);
210
200
}
211
201
/* }}} */
212
202
213
203
/* {{{ BreakIterator_object_create */
214
- static zend_object_value BreakIterator_object_create (zend_class_entry *ce TSRMLS_DC)
204
+ static zend_object * BreakIterator_object_create (zend_class_entry *ce TSRMLS_DC)
215
205
{
216
- zend_object_value retval;
217
206
BreakIterator_object* intern;
218
207
219
- intern = (BreakIterator_object*)ecalloc (1 , sizeof (BreakIterator_object));
208
+ intern = (BreakIterator_object*)ecalloc (1 , sizeof (BreakIterator_object) + sizeof (zval) * (ce-> default_properties_count - 1 ) );
220
209
221
210
zend_object_std_init (&intern->zo , ce TSRMLS_CC);
222
- #if PHP_VERSION_ID < 50399
223
- zend_hash_copy (intern->zo .properties , &(ce->default_properties ),
224
- (copy_ctor_func_t ) zval_add_ref, NULL , sizeof (zval*));
225
- #else
226
211
object_properties_init ((zend_object*) intern, ce);
227
- #endif
228
212
breakiterator_object_init (intern TSRMLS_CC);
229
213
230
- retval.handle = zend_objects_store_put (
231
- intern,
232
- BreakIterator_objects_dtor,
233
- (zend_objects_free_object_storage_t ) BreakIterator_objects_free,
234
- NULL TSRMLS_CC);
235
-
236
- retval.handlers = &BreakIterator_handlers;
214
+ intern->zo .handlers = &BreakIterator_handlers;
237
215
238
- return retval ;
216
+ return &intern-> zo ;
239
217
}
240
218
/* }}} */
241
219
@@ -343,9 +321,12 @@ U_CFUNC void breakiterator_register_BreakIterator_class(TSRMLS_D)
343
321
344
322
memcpy (&BreakIterator_handlers, zend_get_std_object_handlers (),
345
323
sizeof BreakIterator_handlers);
324
+ BreakIterator_handlers.offset = XtOffsetOf (BreakIterator_object, zo);
346
325
BreakIterator_handlers.compare_objects = BreakIterator_compare_objects;
347
326
BreakIterator_handlers.clone_obj = BreakIterator_clone_obj;
348
327
BreakIterator_handlers.get_debug_info = BreakIterator_get_debug_info;
328
+ BreakIterator_handlers.dtor_obj = BreakIterator_objects_dtor;
329
+ BreakIterator_handlers.free_obj = BreakIterator_objects_free;
349
330
350
331
zend_class_implements (BreakIterator_ce_ptr TSRMLS_CC, 1 ,
351
332
zend_ce_traversable);
0 commit comments