Skip to content
This repository was archived by the owner on Mar 29, 2024. It is now read-only.

Commit 2296bb2

Browse files
committed
Remove this_ptr and use ZVAL_OBJ() when needed
1 parent 9881582 commit 2296bb2

24 files changed

+53
-48
lines changed

src/php_v8_array.cc

-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ static PHP_METHOD(V8Array, __construct) {
4343

4444
PHP_V8_THROW_VALUE_EXCEPTION_WHEN_EMPTY(local_array, "Failed to create Array value");
4545

46-
ZVAL_COPY_VALUE(&php_v8_value->this_ptr, getThis());
4746
php_v8_object_store_self_ptr(php_v8_value, local_array);
4847

4948
php_v8_value->persistent->Reset(isolate, local_array);

src/php_v8_boolean_object.cc

-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ static PHP_METHOD(V8BooleanObject, __construct) {
3838

3939
v8::Local<v8::BooleanObject> local_bool_obj = v8::BooleanObject::New(isolate, value).As<v8::BooleanObject>();
4040

41-
ZVAL_COPY_VALUE(&php_v8_value->this_ptr, getThis());
4241
php_v8_object_store_self_ptr(php_v8_value, local_bool_obj);
4342

4443
php_v8_value->persistent->Reset(isolate, local_bool_obj);

src/php_v8_callback_info.cc

+4-2
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,8 @@ static PHP_METHOD(V8CallbackInfo, GetIsolate) {
130130
PHP_V8_CALLBACK_INFO_FETCH_WITH_CHECK(getThis(), php_v8_callback_info);
131131
PHP_V8_V8_CALLBACK_INFO_CHECK_IN_CONTEXT(php_v8_callback_info);
132132

133-
RETVAL_ZVAL(&php_v8_callback_info->php_v8_isolate->this_ptr, 1, 0);
133+
ZVAL_OBJ(return_value, &php_v8_callback_info->php_v8_isolate->std);
134+
Z_ADDREF_P(return_value);
134135
}
135136

136137
static PHP_METHOD(V8CallbackInfo, GetContext) {
@@ -141,7 +142,8 @@ static PHP_METHOD(V8CallbackInfo, GetContext) {
141142
PHP_V8_CALLBACK_INFO_FETCH_WITH_CHECK(getThis(), php_v8_callback_info);
142143
PHP_V8_V8_CALLBACK_INFO_CHECK_IN_CONTEXT(php_v8_callback_info);
143144

144-
RETVAL_ZVAL(&php_v8_callback_info->php_v8_context->this_ptr, 1, 0);
145+
ZVAL_OBJ(return_value, &php_v8_callback_info->php_v8_context->std);
146+
Z_ADDREF_P(return_value);
145147
}
146148

147149
static PHP_METHOD(V8CallbackInfo, This) {

src/php_v8_callbacks.cc

+3-1
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,7 @@ bool php_v8_callback_access_check(v8::Local<v8::Context> accessing_context, v8::
537537
zval args;
538538
zval accessed_object_zv;
539539
zval retval;
540+
zval context_zv;
540541

541542
bool security_retval = false;
542543

@@ -550,7 +551,8 @@ bool php_v8_callback_access_check(v8::Local<v8::Context> accessing_context, v8::
550551

551552
php_v8_get_or_create_value(&accessed_object_zv, accessed_object, php_v8_isolate);
552553

553-
add_index_zval(&args, 0, &php_v8_context->this_ptr);
554+
ZVAL_OBJ(&context_zv, &php_v8_context->std);
555+
add_index_zval(&args, 0, &context_zv);
554556
add_index_zval(&args, 1, &accessed_object_zv);
555557

556558
php_v8_callback_call_from_bucket_with_zargs(0, data, &args, &retval);

src/php_v8_context.cc

-5
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,6 @@ static void php_v8_context_free(zend_object *object)
4040
delete php_v8_context->context;
4141
}
4242

43-
if (!Z_ISUNDEF(php_v8_context->this_ptr)) {
44-
zval_ptr_dtor(&php_v8_context->this_ptr);
45-
}
46-
4743
zend_object_std_dtor(&php_v8_context->std);
4844
}
4945

@@ -122,7 +118,6 @@ static PHP_METHOD(V8Context, __construct)
122118

123119
PHP_V8_THROW_VALUE_EXCEPTION_WHEN_EMPTY(context, "Failed to create Context");
124120

125-
ZVAL_COPY_VALUE(&php_v8_context->this_ptr, getThis());
126121
php_v8_context_store_reference(isolate, context, php_v8_context);
127122

128123
php_v8_context->context->Reset(isolate, context);

src/php_v8_context.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ struct _php_v8_context_t {
7272
v8::Persistent<v8::Context> *context;
7373

7474
uint32_t isolate_handle;
75-
zval this_ptr;
75+
7676
zend_object std;
7777
};
7878

src/php_v8_date.cc

-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ static PHP_METHOD(V8Date, __construct) {
4242

4343
v8::Local<v8::Date> local_date = maybe_local_date.ToLocalChecked().As<v8::Date>();
4444

45-
ZVAL_COPY_VALUE(&php_v8_value->this_ptr, getThis());
4645
php_v8_object_store_self_ptr(php_v8_value, local_date);
4746

4847
php_v8_value->persistent->Reset(isolate, local_date);

src/php_v8_exceptions.cc

+8-2
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ void php_v8_throw_try_catch_exception(php_v8_context_t *php_v8_context, v8::TryC
5858

5959
void php_v8_create_try_catch_exception(zval *return_value, php_v8_isolate_t *php_v8_isolate, php_v8_context_t *php_v8_context, v8::TryCatch *try_catch)
6060
{
61+
zval isolate_zv;
62+
zval context_zv;
63+
6164
zval try_catch_zv;
6265
zend_class_entry* ce = NULL;
6366
const char *message = NULL;
@@ -88,8 +91,11 @@ void php_v8_create_try_catch_exception(zval *return_value, php_v8_isolate_t *php
8891
zend_update_property_string(php_v8_try_catch_exception_class_entry, return_value, ZEND_STRL("message"), message);
8992
}
9093

91-
PHP_V8_TRY_CATCH_EXCEPTION_STORE_ISOLATE(return_value, &php_v8_isolate->this_ptr);
92-
PHP_V8_TRY_CATCH_EXCEPTION_STORE_CONTEXT(return_value, &php_v8_context->this_ptr);
94+
ZVAL_OBJ(&isolate_zv, &php_v8_isolate->std);
95+
ZVAL_OBJ(&context_zv, &php_v8_context->std);
96+
97+
PHP_V8_TRY_CATCH_EXCEPTION_STORE_ISOLATE(return_value, &isolate_zv);
98+
PHP_V8_TRY_CATCH_EXCEPTION_STORE_CONTEXT(return_value, &context_zv);
9399

94100
php_v8_try_catch_create_from_try_catch(&try_catch_zv, php_v8_isolate, php_v8_context, try_catch);
95101
PHP_V8_TRY_CATCH_EXCEPTION_STORE_TRY_CATCH(return_value, &try_catch_zv);

src/php_v8_function.cc

-1
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,6 @@ static PHP_METHOD(V8Function, __construct) {
349349

350350
v8::Local<v8::Function> local_function = maybe_local_function.ToLocalChecked();
351351

352-
ZVAL_COPY_VALUE(&php_v8_value->this_ptr, getThis());
353352
php_v8_object_store_self_ptr(php_v8_value, local_function);
354353

355354
php_v8_value->persistent->Reset(isolate, local_function);

src/php_v8_isolate.cc

+2-6
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,6 @@ static void php_v8_isolate_free(zend_object *object) {
109109
delete php_v8_isolate->weak_values;
110110
}
111111

112-
if (!Z_ISUNDEF(php_v8_isolate->this_ptr)) {
113-
zval_ptr_dtor(&php_v8_isolate->this_ptr);
114-
}
115-
116112
if (php_v8_isolate->gc_data) {
117113
efree(php_v8_isolate->gc_data);
118114
}
@@ -208,7 +204,6 @@ static PHP_METHOD(V8Isolate, __construct) {
208204
php_v8_isolate->isolate = v8::Isolate::New(*php_v8_isolate->create_params);
209205
PHP_V8_ISOLATE_STORE_REFERENCE(php_v8_isolate);
210206

211-
ZVAL_COPY_VALUE(&php_v8_isolate->this_ptr, getThis());
212207
php_v8_isolate->isolate_handle = Z_OBJ_HANDLE_P(getThis());
213208

214209
php_v8_isolate->isolate->SetFatalErrorHandler(php_v8_fatal_error_handler);
@@ -379,7 +374,8 @@ static PHP_METHOD(V8Isolate, GetCurrentContext) {
379374

380375
php_v8_context_t *php_v8_context = php_v8_context_get_reference(local_context);
381376

382-
RETURN_ZVAL(&php_v8_context->this_ptr, 1, 0);
377+
ZVAL_OBJ(return_value, &php_v8_context->std);
378+
Z_ADDREF_P(return_value);
383379
}
384380

385381
static PHP_METHOD(V8Isolate, ThrowException) {

src/php_v8_isolate.h

-1
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,6 @@ struct _php_v8_isolate_t {
133133
zval *gc_data;
134134
int gc_data_count;
135135

136-
zval this_ptr;
137136
zend_object std;
138137
};
139138

src/php_v8_isolate_limits.cc

+6-2
Original file line numberDiff line numberDiff line change
@@ -183,12 +183,16 @@ void php_v8_isolate_limits_ctor(php_v8_isolate_t *php_v8_isolate) {
183183
}
184184

185185
void php_v8_isolate_maybe_update_limits_hit(php_v8_isolate_t *php_v8_isolate) {
186+
zval isolate_zv;
187+
188+
ZVAL_OBJ(&isolate_zv, &php_v8_isolate->std);
186189
PHP_V8_DECLARE_LIMITS(php_v8_isolate);
190+
187191
if (limits->time_limit) {
188-
zend_update_property_bool(php_v8_isolate_class_entry, &php_v8_isolate->this_ptr, ZEND_STRL("time_limit_hit"), limits->time_limit_hit);
192+
zend_update_property_bool(php_v8_isolate_class_entry, &isolate_zv, ZEND_STRL("time_limit_hit"), limits->time_limit_hit);
189193
}
190194
if (limits->memory_limit) {
191-
zend_update_property_bool(php_v8_isolate_class_entry, &php_v8_isolate->this_ptr, ZEND_STRL("memory_limit_hit"), limits->memory_limit_hit);
195+
zend_update_property_bool(php_v8_isolate_class_entry, &isolate_zv, ZEND_STRL("memory_limit_hit"), limits->memory_limit_hit);
192196
}
193197
}
194198

src/php_v8_map.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ static PHP_METHOD(V8Map, __construct) {
3838

3939
PHP_V8_THROW_VALUE_EXCEPTION_WHEN_EMPTY(local_map, "Failed to create Map value");
4040

41-
ZVAL_COPY_VALUE(&php_v8_value->this_ptr, getThis());
4241
php_v8_object_store_self_ptr(php_v8_value, local_map);
4342

4443
php_v8_value->persistent->Reset(isolate, local_map);
@@ -137,7 +136,7 @@ static PHP_METHOD(V8Map, Set) {
137136
PHP_V8_MAYBE_CATCH(php_v8_context, try_catch);
138137
PHP_V8_THROW_EXCEPTION_WHEN_EMPTY(maybe_local_res, "Failed to set");
139138

140-
RETVAL_ZVAL(&php_v8_value->this_ptr, 1, 0);
139+
ZVAL_COPY(return_value, getThis());
141140
}
142141

143142

src/php_v8_number_object.cc

-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ static PHP_METHOD(V8NumberObject, __construct) {
4040

4141
PHP_V8_THROW_VALUE_EXCEPTION_WHEN_EMPTY(local_number_obj, "Failed to create NumberObject value");
4242

43-
ZVAL_COPY_VALUE(&php_v8_value->this_ptr, getThis());
4443
php_v8_object_store_self_ptr(php_v8_value, local_number_obj);
4544

4645
php_v8_value->persistent->Reset(isolate, local_number_obj);

src/php_v8_object.cc

+2-2
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,6 @@ static PHP_METHOD(V8Object, __construct) {
113113

114114
PHP_V8_THROW_VALUE_EXCEPTION_WHEN_EMPTY(local_object, "Failed to create Object value");
115115

116-
ZVAL_COPY_VALUE(&php_v8_value->this_ptr, getThis());
117116
php_v8_object_store_self_ptr(php_v8_value, local_object);
118117

119118
php_v8_value->persistent->Reset(isolate, local_object);
@@ -1087,7 +1086,8 @@ static PHP_METHOD(V8Object, CreationContext) {
10871086

10881087
php_v8_context_t *php_v8_context = php_v8_context_get_reference(local_context);
10891088

1090-
RETVAL_ZVAL(&php_v8_context->this_ptr, 1, 0);
1089+
ZVAL_OBJ(return_value, &php_v8_context->std);
1090+
Z_ADDREF_P(return_value);
10911091
}
10921092

10931093
static PHP_METHOD(V8Object, IsCallable) {

src/php_v8_regexp.cc

-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ static PHP_METHOD(V8RegExp, __construct) {
5151

5252
v8::Local<v8::RegExp> local_regexp = maybe_local_regexp.ToLocalChecked();
5353

54-
ZVAL_COPY_VALUE(&php_v8_value->this_ptr, getThis());
5554
php_v8_object_store_self_ptr(php_v8_value, local_regexp);
5655

5756
php_v8_value->persistent->Reset(isolate, local_regexp);

src/php_v8_return_value.cc

+4-2
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,8 @@ static PHP_METHOD(V8ReturnValue, GetIsolate) {
354354
PHP_V8_FETCH_RETURN_VALUE_WITH_CHECK(getThis(), php_v8_return_value);
355355
PHP_V8_RETURN_VALUE_CHECK_IN_CONTEXT(php_v8_return_value);
356356

357-
RETVAL_ZVAL(&php_v8_return_value->php_v8_isolate->this_ptr, 1, 0);
357+
ZVAL_OBJ(return_value, &php_v8_return_value->php_v8_isolate->std);
358+
Z_ADDREF_P(return_value);
358359
}
359360

360361
// Convenience getter for Context
@@ -366,7 +367,8 @@ static PHP_METHOD(V8ReturnValue, GetContext) {
366367
PHP_V8_FETCH_RETURN_VALUE_WITH_CHECK(getThis(), php_v8_return_value);
367368
PHP_V8_RETURN_VALUE_CHECK_IN_CONTEXT(php_v8_return_value);
368369

369-
RETVAL_ZVAL(&php_v8_return_value->php_v8_context->this_ptr, 1, 0);
370+
ZVAL_OBJ(return_value, &php_v8_return_value->php_v8_context->std);
371+
Z_ADDREF_P(return_value);
370372
}
371373

372374
static PHP_METHOD(V8ReturnValue, InContext) {

src/php_v8_set.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ static PHP_METHOD(V8Set, __construct) {
3838

3939
PHP_V8_THROW_VALUE_EXCEPTION_WHEN_EMPTY(local_set, "Failed to create Map value");
4040

41-
ZVAL_COPY_VALUE(&php_v8_value->this_ptr, getThis());
4241
php_v8_object_store_self_ptr(php_v8_value, local_set);
4342

4443
php_v8_value->persistent->Reset(isolate, local_set);
@@ -97,7 +96,7 @@ static PHP_METHOD(V8Set, Add) {
9796
PHP_V8_MAYBE_CATCH(php_v8_context, try_catch);
9897
PHP_V8_THROW_EXCEPTION_WHEN_EMPTY(maybe_local_res, "Failed to add");
9998

100-
RETVAL_ZVAL(&php_v8_value->this_ptr, 1, 0);
99+
ZVAL_COPY(return_value, getThis());
101100
}
102101

103102
static PHP_METHOD(V8Set, Has) {

src/php_v8_string_object.cc

-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ static PHP_METHOD(V8StringObject, __construct) {
4343

4444
PHP_V8_THROW_VALUE_EXCEPTION_WHEN_EMPTY(local_string_obj, "Failed to create StringObject value");
4545

46-
ZVAL_COPY_VALUE(&php_v8_value->this_ptr, getThis());
4746
php_v8_object_store_self_ptr(php_v8_value, local_string_obj);
4847

4948
php_v8_value->persistent->Reset(isolate, local_string_obj);

src/php_v8_symbol_object.cc

-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ static PHP_METHOD(V8SymbolObject, __construct) {
4343

4444
PHP_V8_THROW_VALUE_EXCEPTION_WHEN_EMPTY(local_symbol_obj, "Failed to create SymbolObject value");
4545

46-
ZVAL_COPY_VALUE(&php_v8_value->this_ptr, getThis());
4746
php_v8_object_store_self_ptr(php_v8_value, local_symbol_obj);
4847

4948
php_v8_value->persistent->Reset(isolate, local_symbol_obj);

src/php_v8_try_catch.cc

+8-2
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,19 @@ zend_class_entry* php_v8_try_catch_class_entry;
2424

2525

2626
void php_v8_try_catch_create_from_try_catch(zval *return_value, php_v8_isolate_t *php_v8_isolate, php_v8_context_t *php_v8_context, v8::TryCatch *try_catch) {
27+
zval isolate_zv;
28+
zval context_zv;
29+
2730
object_init_ex(return_value, this_ce);
2831

2932
PHP_V8_DECLARE_ISOLATE(php_v8_isolate);
3033
v8::Local<v8::Context> context = isolate->GetCurrentContext();
3134

32-
zend_update_property(this_ce, return_value, ZEND_STRL("isolate"), &php_v8_isolate->this_ptr);
33-
zend_update_property(this_ce, return_value, ZEND_STRL("context"), &php_v8_context->this_ptr);
35+
ZVAL_OBJ(&isolate_zv, &php_v8_isolate->std);
36+
ZVAL_OBJ(&context_zv, &php_v8_context->std);
37+
38+
zend_update_property(this_ce, return_value, ZEND_STRL("isolate"), &isolate_zv);
39+
zend_update_property(this_ce, return_value, ZEND_STRL("context"), &context_zv);
3440

3541
zend_update_property_bool(this_ce, return_value, ZEND_STRL("can_continue"), static_cast<zend_long>(try_catch && try_catch->CanContinue()));
3642
zend_update_property_bool(this_ce, return_value, ZEND_STRL("has_terminated"), static_cast<zend_long>(try_catch && try_catch->HasTerminated()));

src/php_v8_unbound_script.cc

+4-1
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,15 @@ static zend_object_handlers php_v8_unbound_script_object_handlers;
2828

2929

3030
php_v8_unbound_script_t * php_v8_create_unbound_script(zval *return_value, php_v8_isolate_t *php_v8_isolate, v8::Local<v8::UnboundScript> unbound_script) {
31+
zval isolate_zv;
3132
assert(!unbound_script.IsEmpty());
3233

3334
object_init_ex(return_value, this_ce);
3435

36+
ZVAL_OBJ(&isolate_zv, &php_v8_isolate->std);
37+
3538
PHP_V8_FETCH_UNBOUND_SCRIPT_INTO(return_value, php_v8_unbound_script);
36-
PHP_V8_UNBOUND_SCRIPT_STORE_ISOLATE(return_value, &php_v8_isolate->this_ptr)
39+
PHP_V8_UNBOUND_SCRIPT_STORE_ISOLATE(return_value, &isolate_zv)
3740
PHP_V8_STORE_POINTER_TO_ISOLATE(php_v8_unbound_script, php_v8_isolate);
3841

3942
php_v8_unbound_script->persistent->Reset(php_v8_isolate->isolate, unbound_script);

src/php_v8_value.cc

+9-8
Original file line numberDiff line numberDiff line change
@@ -113,10 +113,6 @@ static void php_v8_value_free(zend_object *object) {
113113
}
114114
}
115115

116-
if (!Z_ISUNDEF(php_v8_value->this_ptr)) {
117-
zval_ptr_dtor(&php_v8_value->this_ptr);
118-
}
119-
120116
if (php_v8_value->gc_data) {
121117
efree(php_v8_value->gc_data);
122118
}
@@ -270,22 +266,26 @@ zend_class_entry *php_v8_get_class_entry_from_value(v8::Local<v8::Value> value)
270266
}
271267

272268
php_v8_value_t *php_v8_create_value(zval *return_value, v8::Local<v8::Value> local_value, php_v8_isolate_t *php_v8_isolate) {
269+
zval isolate_zv;
270+
zval context_zv;
273271
assert(!local_value.IsEmpty());
274272

275273
object_init_ex(return_value, php_v8_get_class_entry_from_value(local_value));
276274
PHP_V8_VALUE_FETCH_INTO(return_value, return_php_v8_value);
277-
PHP_V8_VALUE_STORE_ISOLATE(return_value, &php_v8_isolate->this_ptr);
275+
276+
ZVAL_OBJ(&isolate_zv, &php_v8_isolate->std);
277+
PHP_V8_VALUE_STORE_ISOLATE(return_value, &isolate_zv);
278278
PHP_V8_STORE_POINTER_TO_ISOLATE(return_php_v8_value, php_v8_isolate);
279279

280280
if (local_value->IsObject()) {
281281
assert(php_v8_isolate->isolate->InContext());
282282

283283
php_v8_context_t *php_v8_context = php_v8_context_get_reference(local_value.As<v8::Object>()->CreationContext());
284284

285-
PHP_V8_OBJECT_STORE_CONTEXT(return_value, &php_v8_context->this_ptr);
285+
ZVAL_OBJ(&context_zv, &php_v8_context->std);
286+
PHP_V8_OBJECT_STORE_CONTEXT(return_value, &context_zv);
286287
PHP_V8_STORE_POINTER_TO_CONTEXT(return_php_v8_value, php_v8_context);
287288

288-
ZVAL_COPY_VALUE(&return_php_v8_value->this_ptr, return_value);
289289
php_v8_object_store_self_ptr(return_php_v8_value, v8::Local<v8::Object>::Cast(local_value));
290290
}
291291

@@ -303,7 +303,8 @@ php_v8_value_t *php_v8_get_or_create_value(zval *return_value, v8::Local<v8::Val
303303
php_v8_value_t *data = php_v8_object_get_self_ptr(php_v8_isolate, v8::Local<v8::Object>::Cast(local_value));
304304

305305
if (data) {
306-
ZVAL_ZVAL(return_value, &data->this_ptr, 1, 0);
306+
ZVAL_OBJ(return_value, &data->std);
307+
Z_ADDREF_P(return_value);
307308
return data;
308309
}
309310
}

src/php_v8_value.h

-1
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,6 @@ struct _php_v8_value_t {
117117
zval *gc_data;
118118
int gc_data_count;
119119

120-
zval this_ptr; // makes sense for objects only
121120
zend_object std;
122121
};
123122

0 commit comments

Comments
 (0)