|
17 | 17 | #endif
|
18 | 18 |
|
19 | 19 | #include "php_v8_object.h"
|
| 20 | +#include "php_v8_integrity_level.h" |
20 | 21 | #include "php_v8_exceptions.h"
|
21 | 22 | #include "php_v8_function_template.h"
|
22 | 23 | #include "php_v8_function.h"
|
@@ -933,6 +934,40 @@ static PHP_METHOD(V8Object, GetConstructorName) {
|
933 | 934 | php_v8_get_or_create_value(return_value, local_object->GetConstructorName(), isolate);
|
934 | 935 | }
|
935 | 936 |
|
| 937 | +static PHP_METHOD(V8Object, SetIntegrityLevel) { |
| 938 | + zval *php_v8_context_zv; |
| 939 | + zend_long level; |
| 940 | + |
| 941 | + if (zend_parse_parameters(ZEND_NUM_ARGS(), "ol", &php_v8_context_zv, &level) == FAILURE) { |
| 942 | + return; |
| 943 | + } |
| 944 | + |
| 945 | + PHP_V8_VALUE_FETCH_WITH_CHECK(getThis(), php_v8_value); |
| 946 | + PHP_V8_CONTEXT_FETCH_WITH_CHECK(php_v8_context_zv, php_v8_context); |
| 947 | + |
| 948 | + PHP_V8_DATA_ISOLATES_CHECK(php_v8_value, php_v8_context) |
| 949 | + |
| 950 | + PHP_V8_ENTER_STORED_ISOLATE(php_v8_value); |
| 951 | + PHP_V8_ENTER_CONTEXT(php_v8_context); |
| 952 | + |
| 953 | + v8::Local<v8::Context> local_context = php_v8_context_get_local(isolate, php_v8_context); |
| 954 | + v8::Local<v8::Object> local_obj = php_v8_value_get_object_local(isolate, php_v8_value); |
| 955 | + |
| 956 | + level = level ? level & PHP_V8_INTEGRITY_LEVEL_FLAGS : level; |
| 957 | + |
| 958 | + PHP_V8_TRY_CATCH(isolate); |
| 959 | + PHP_V8_INIT_ISOLATE_LIMITS_ON_OBJECT_VALUE(php_v8_value); |
| 960 | + |
| 961 | + v8::Maybe<bool> maybe_res = local_obj->SetIntegrityLevel(local_context, static_cast<v8::IntegrityLevel>(level)); |
| 962 | + |
| 963 | + PHP_V8_MAYBE_CATCH(php_v8_context, try_catch); |
| 964 | + PHP_V8_THROW_EXCEPTION_WHEN_NOTHING(maybe_res, "Failed to set integrity level"); |
| 965 | + |
| 966 | + RETURN_BOOL(maybe_res.FromJust()); |
| 967 | +} |
| 968 | + |
| 969 | + |
| 970 | + |
936 | 971 | static PHP_METHOD(V8Object, HasOwnProperty) {
|
937 | 972 | zval *php_v8_context_zv;
|
938 | 973 | zval *php_v8_name_zv;
|
@@ -1525,6 +1560,11 @@ ZEND_END_ARG_INFO()
|
1525 | 1560 | ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_v8_object_GetConstructorName, ZEND_RETURN_VALUE, 0, IS_OBJECT, PHP_V8_NS "\\StringValue", 0)
|
1526 | 1561 | ZEND_END_ARG_INFO()
|
1527 | 1562 |
|
| 1563 | +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_v8_object_SetIntegrityLevel, ZEND_RETURN_VALUE, 2, _IS_BOOL, NULL, 0) |
| 1564 | + ZEND_ARG_OBJ_INFO(0, context, V8\\Context, 0) |
| 1565 | + ZEND_ARG_TYPE_INFO(0, level, IS_LONG, 0) |
| 1566 | +ZEND_END_ARG_INFO() |
| 1567 | + |
1528 | 1568 | ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_v8_object_HasOwnProperty, ZEND_RETURN_VALUE, 2, _IS_BOOL, NULL, 0)
|
1529 | 1569 | ZEND_ARG_OBJ_INFO(0, context, V8\\Context, 0)
|
1530 | 1570 | ZEND_ARG_INFO(0, key)
|
@@ -1630,6 +1670,7 @@ static const zend_function_entry php_v8_object_methods[] = {
|
1630 | 1670 | PHP_ME(V8Object, FindInstanceInPrototypeChain, arginfo_php_v8_object_FindInstanceInPrototypeChain, ZEND_ACC_PUBLIC)
|
1631 | 1671 | PHP_ME(V8Object, ObjectProtoToString, arginfo_php_v8_object_ObjectProtoToString, ZEND_ACC_PUBLIC)
|
1632 | 1672 | PHP_ME(V8Object, GetConstructorName, arginfo_v8_object_GetConstructorName, ZEND_ACC_PUBLIC)
|
| 1673 | + PHP_ME(V8Object, SetIntegrityLevel, arginfo_v8_object_SetIntegrityLevel, ZEND_ACC_PUBLIC) |
1633 | 1674 |
|
1634 | 1675 | PHP_ME(V8Object, HasOwnProperty, arginfo_v8_object_HasOwnProperty, ZEND_ACC_PUBLIC)
|
1635 | 1676 | PHP_ME(V8Object, HasRealNamedProperty, arginfo_v8_object_HasRealNamedProperty, ZEND_ACC_PUBLIC)
|
|
0 commit comments