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

Commit f53130e

Browse files
authored
Merge pull request #22 from pinepain/optimization
Cleanups and optimizations
2 parents 5170737 + d4148ed commit f53130e

File tree

132 files changed

+2106
-1789
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

132 files changed

+2106
-1789
lines changed

php_v8.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@
1717
#include "config.h"
1818
#endif
1919

20+
#include <v8-version.h>
21+
#include <v8.h>
22+
2023
extern "C" {
2124
#include "php.h"
22-
#include <v8-version.h>
2325

2426
#ifdef ZTS
2527
#include "TSRM.h"
@@ -51,6 +53,7 @@ extern zend_module_entry php_v8_module_entry;
5153

5254
ZEND_BEGIN_MODULE_GLOBALS(v8)
5355
bool v8_initialized;
56+
v8::Platform *platform;
5457
ZEND_END_MODULE_GLOBALS(v8)
5558

5659
// Add zend_type support (new since PHP 7.2)

src/php_v8_a.cc

+12-11
Original file line numberDiff line numberDiff line change
@@ -29,28 +29,29 @@ void php_v8_init()
2929

3030
v8::V8::InitializeICUDefaultLocation(PHP_V8_ICU_DATA_DIR);
3131

32-
// NOTE: if we use snapshot and extenal startup data then we have to initialize it (see https://codereview.chromium.org/315033002/)
32+
// If we use snapshot and extenal startup data then we have to initialize it (see https://codereview.chromium.org/315033002/)
3333
// v8::V8::InitializeExternalStartupData(NULL);
3434
v8::Platform *platform = v8::platform::CreateDefaultPlatform();
3535
v8::V8::InitializePlatform(platform);
3636

3737
// const char *flags = "--no-hard_abort";
3838
// v8::V8::SetFlagsFromString(flags, strlen(flags));
3939

40-
41-
// TODO: remove flags?
42-
/* Set V8 command line flags (must be done before V8::Initialize()!) */
43-
// if (PHP_V8_G(v8_flags)) {
44-
// v8::V8::SetFlagsFromString(PHP_V8_G(v8_flags), strlen(PHP_V8_G(v8_flags)));
45-
// }
46-
4740
/* Initialize V8 */
4841
v8::V8::Initialize();
4942

5043
/* Run only once */
5144
PHP_V8_G(v8_initialized) = true;
45+
PHP_V8_G(platform) = platform;
46+
}
47+
48+
void php_v8_shutdown() {
49+
if (!PHP_V8_G(v8_initialized)) {
50+
return;
51+
}
52+
53+
v8::V8::Dispose();
54+
v8::V8::ShutdownPlatform();
5255

53-
// TODO: probably, not necessary to call it on shutdown
54-
// v8::V8::Dispose();
55-
// v8::V8::ShutdownPlatform();
56+
delete PHP_V8_G(platform);
5657
}

src/php_v8_a.h

+9
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,15 @@
1313
#ifndef PHP_V8_A_H
1414
#define PHP_V8_A_H
1515

16+
extern "C" {
17+
#include "php.h"
18+
19+
#ifdef ZTS
20+
#include "TSRM.h"
21+
#endif
22+
};
23+
1624
void php_v8_init();
25+
void php_v8_shutdown();
1726

1827
#endif //PHP_V8_A_H

src/php_v8_array.cc

+2-6
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,6 @@
2424
zend_class_entry *php_v8_array_class_entry;
2525
#define this_ce php_v8_array_class_entry
2626

27-
v8::Local<v8::Array> php_v8_value_get_array_local(v8::Isolate *isolate, php_v8_value_t *php_v8_value) {
28-
return v8::Local<v8::Array>::Cast(php_v8_value_get_value_local(isolate, php_v8_value));
29-
};
3027

3128
static PHP_METHOD(V8Array, __construct) {
3229
zval rv;
@@ -46,8 +43,7 @@ static PHP_METHOD(V8Array, __construct) {
4643

4744
PHP_V8_THROW_VALUE_EXCEPTION_WHEN_EMPTY(local_array, "Failed to create Array value");
4845

49-
ZVAL_COPY_VALUE(&php_v8_value->this_ptr, getThis());
50-
php_v8_object_store_self_ptr(isolate, local_array, php_v8_value);
46+
php_v8_object_store_self_ptr(php_v8_value, local_array);
5147

5248
php_v8_value->persistent->Reset(isolate, local_array);
5349
}
@@ -60,7 +56,7 @@ static PHP_METHOD(V8Array, Length) {
6056
PHP_V8_VALUE_FETCH_WITH_CHECK(getThis(), php_v8_value);
6157
PHP_V8_ENTER_STORED_ISOLATE(php_v8_value);
6258

63-
RETURN_LONG((zend_long) php_v8_value_get_array_local(isolate, php_v8_value)->Length());
59+
RETURN_LONG(static_cast<zend_long >(php_v8_value_get_local_as<v8::Array>(php_v8_value)->Length()));
6460
}
6561

6662

src/php_v8_array.h

-2
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ extern "C" {
2626

2727
extern zend_class_entry* php_v8_array_class_entry;
2828

29-
extern v8::Local<v8::Array> php_v8_value_get_array_local(v8::Isolate *isolate, php_v8_value_t *php_v8_value);
30-
3129

3230
PHP_MINIT_FUNCTION(php_v8_array);
3331

src/php_v8_boolean.cc

+1-6
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,6 @@ zend_class_entry *php_v8_boolean_class_entry;
2323
#define this_ce php_v8_boolean_class_entry
2424

2525

26-
v8::Local<v8::Boolean> php_v8_value_get_boolean_local(v8::Isolate *isolate, php_v8_value_t *php_v8_value) {
27-
return v8::Local<v8::Boolean>::Cast(php_v8_value_get_value_local(isolate, php_v8_value));
28-
};
29-
3026
static PHP_METHOD(V8BooleanValue, __construct) {
3127
zval *php_v8_isolate_zv;
3228

@@ -53,8 +49,7 @@ static PHP_METHOD(V8BooleanValue, Value) {
5349
PHP_V8_VALUE_FETCH_WITH_CHECK(getThis(), php_v8_value);
5450
PHP_V8_ENTER_ISOLATE(php_v8_value->php_v8_isolate);
5551

56-
v8::Local<v8::Value> local_value = php_v8_value_get_value_local(isolate, php_v8_value);
57-
v8::Local<v8::Boolean> local_boolean = v8::Local<v8::Boolean>::Cast(local_value);
52+
v8::Local<v8::Boolean> local_boolean = php_v8_value_get_local_as<v8::Boolean>(php_v8_value);
5853

5954
RETVAL_BOOL(static_cast<zend_bool>(local_boolean->Value()));
6055
}

src/php_v8_boolean.h

-2
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ extern "C" {
2626

2727
extern zend_class_entry* php_v8_boolean_class_entry;
2828

29-
extern v8::Local<v8::Boolean> php_v8_value_get_boolean_local(v8::Isolate *isolate, php_v8_value_t *php_v8_value);
30-
3129

3230
PHP_MINIT_FUNCTION(php_v8_boolean);
3331

src/php_v8_boolean_object.cc

+2-6
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,6 @@
2323
zend_class_entry *php_v8_boolean_object_class_entry;
2424
#define this_ce php_v8_boolean_object_class_entry
2525

26-
v8::Local<v8::BooleanObject> php_v8_value_get_boolean_object_local(v8::Isolate *isolate, php_v8_value_t *php_v8_value) {
27-
return v8::Local<v8::BooleanObject>::Cast(php_v8_value_get_value_local(isolate, php_v8_value));
28-
};
2926

3027
static PHP_METHOD(V8BooleanObject, __construct) {
3128
zval rv;
@@ -41,8 +38,7 @@ static PHP_METHOD(V8BooleanObject, __construct) {
4138

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

44-
ZVAL_COPY_VALUE(&php_v8_value->this_ptr, getThis());
45-
php_v8_object_store_self_ptr(isolate, local_bool_obj, php_v8_value);
41+
php_v8_object_store_self_ptr(php_v8_value, local_bool_obj);
4642

4743
php_v8_value->persistent->Reset(isolate, local_bool_obj);
4844
}
@@ -56,7 +52,7 @@ static PHP_METHOD(V8BooleanObject, ValueOf) {
5652
PHP_V8_VALUE_FETCH_WITH_CHECK(getThis(), php_v8_value);
5753
PHP_V8_ENTER_STORED_ISOLATE(php_v8_value);
5854

59-
v8::Local<v8::BooleanObject> local_boolean = php_v8_value_get_boolean_object_local(isolate, php_v8_value);
55+
v8::Local<v8::BooleanObject> local_boolean = php_v8_value_get_local_as<v8::BooleanObject>(php_v8_value);
6056

6157
RETURN_BOOL(static_cast<zend_bool>(local_boolean->ValueOf()));
6258
}

src/php_v8_boolean_object.h

-2
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ extern "C" {
2626

2727
extern zend_class_entry* php_v8_boolean_object_class_entry;
2828

29-
extern v8::Local<v8::BooleanObject> php_v8_value_get_boolean_object_local(v8::Isolate *isolate, php_v8_value_t *php_v8_value);
30-
3129

3230
PHP_MINIT_FUNCTION(php_v8_boolean_object);
3331

src/php_v8_cached_data.cc

+3-5
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,6 @@ zend_class_entry * php_v8_cached_data_class_entry;
2424

2525
static zend_object_handlers php_v8_cached_data_object_handlers;
2626

27-
php_v8_cached_data_t * php_v8_cached_data_fetch_object(zend_object *obj) {
28-
return (php_v8_cached_data_t *)((char *)obj - XtOffsetOf(php_v8_cached_data_t, std));
29-
}
3027

3128
php_v8_cached_data_t * php_v8_create_cached_data(zval *return_value, const v8::ScriptCompiler::CachedData *cached_data) {
3229

@@ -139,8 +136,9 @@ PHP_MINIT_FUNCTION(php_v8_cached_data)
139136

140137
memcpy(&php_v8_cached_data_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
141138

142-
php_v8_cached_data_object_handlers.offset = XtOffsetOf(php_v8_cached_data_t, std);
143-
php_v8_cached_data_object_handlers.free_obj = php_v8_cached_data_free;
139+
php_v8_cached_data_object_handlers.offset = XtOffsetOf(php_v8_cached_data_t, std);
140+
php_v8_cached_data_object_handlers.free_obj = php_v8_cached_data_free;
141+
php_v8_cached_data_object_handlers.clone_obj = NULL;
144142

145143
return SUCCESS;
146144
}

src/php_v8_cached_data.h

+5-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ extern "C" {
2828

2929
extern zend_class_entry *php_v8_cached_data_class_entry;
3030

31-
extern php_v8_cached_data_t * php_v8_cached_data_fetch_object(zend_object *obj);
31+
inline php_v8_cached_data_t * php_v8_cached_data_fetch_object(zend_object *obj);
3232
extern php_v8_cached_data_t * php_v8_create_cached_data(zval *return_value, const v8::ScriptCompiler::CachedData *cached_data);
3333

3434

@@ -57,6 +57,10 @@ struct _php_v8_cached_data_t {
5757
zend_object std;
5858
};
5959

60+
inline php_v8_cached_data_t * php_v8_cached_data_fetch_object(zend_object *obj) {
61+
return (php_v8_cached_data_t *)((char *)obj - XtOffsetOf(php_v8_cached_data_t, std));
62+
}
63+
6064
PHP_MINIT_FUNCTION(php_v8_cached_data);
6165

6266
#endif //PHP_V8_CACHED_DATA_H

0 commit comments

Comments
 (0)