@@ -51,11 +51,6 @@ extern void php_v8_create_script_origin(zval *return_value, v8::Local<v8::Contex
5151 }
5252 }
5353
54- /* v8::SourceMapUrl::Options */
55- php_v8_create_script_origin_options (&options_zv, origin.Options ());
56- zend_update_property (this_ce, return_value, ZEND_STRL (" options" ), &options_zv);
57- zval_ptr_dtor (&options_zv);
58-
5954 /* v8::SourceMapUrl::ScriptID */
6055 if (!origin.ScriptID ().IsEmpty () && origin.ScriptID ()->NumberValue (context).IsJust ()) {
6156 zend_long script_id = static_cast <zend_long>(origin.ScriptID ()->NumberValue (context).FromJust ());
@@ -69,6 +64,11 @@ extern void php_v8_create_script_origin(zval *return_value, v8::Local<v8::Contex
6964 PHP_V8_CONVERT_FROM_V8_STRING_TO_STRING (isolate, source_map_url_chars, origin.SourceMapUrl ());
7065 zend_update_property_string (this_ce, return_value, ZEND_STRL (" source_map_url" ), source_map_url_chars);
7166 }
67+
68+ /* v8::SourceMapUrl::Options */
69+ php_v8_create_script_origin_options (&options_zv, origin.Options ());
70+ zend_update_property (this_ce, return_value, ZEND_STRL (" options" ), &options_zv);
71+ zval_ptr_dtor (&options_zv);
7272}
7373
7474
@@ -131,15 +131,13 @@ v8::ScriptOrigin *php_v8_create_script_origin_from_zval(zval *value, v8::Isolate
131131 zval *options_zv = zend_read_property (this_ce, value, ZEND_STRL (" options" ), 0 , &rv); // ScriptOriginOptions
132132
133133 if (Z_TYPE_P (options_zv) == IS_OBJECT && instanceof_function (Z_OBJCE_P (options_zv), php_v8_script_origin_options_class_entry)) {
134- zval *is_shared_cross_origin_zv = zend_read_property (php_v8_script_origin_options_class_entry, options_zv, ZEND_STRL (" is_shared_cross_origin" ), 0 , &rv);
135- zval *is_opaque_zv = zend_read_property (php_v8_script_origin_options_class_entry, options_zv, ZEND_STRL (" is_opaque" ), 0 , &rv);
136- zval *is_wasm_zv = zend_read_property (php_v8_script_origin_options_class_entry, options_zv, ZEND_STRL (" is_wasm" ), 0 , &rv);
137- zval *is_module_zv = zend_read_property (php_v8_script_origin_options_class_entry, options_zv, ZEND_STRL (" is_module" ), 0 , &rv);
138-
139- resource_is_shared_cross_origin = v8::Boolean::New (isolate, Z_TYPE_P (is_shared_cross_origin_zv) == IS_TRUE);
140- resource_is_opaque = v8::Boolean::New (isolate, Z_TYPE_P (is_opaque_zv) == IS_TRUE);
141- is_wasm = v8::Boolean::New (isolate, Z_TYPE_P (is_wasm_zv) == IS_TRUE);
142- is_module = v8::Boolean::New (isolate, Z_TYPE_P (is_module_zv) == IS_TRUE);
134+ zval *tmp = zend_read_property (php_v8_script_origin_options_class_entry, options_zv, ZEND_STRL (" flags" ), 0 , &rv);
135+ zend_long flags = Z_LVAL_P (tmp);
136+
137+ resource_is_shared_cross_origin = v8::Boolean::New (isolate, static_cast <bool >(flags & PHP_V8_SCRIPT_ORIGIN_OPTION_IS_SHARED_CROSS_ORIGIN));
138+ resource_is_opaque = v8::Boolean::New (isolate, static_cast <bool >(flags & PHP_V8_SCRIPT_ORIGIN_OPTION_IS_OPAQUE));
139+ is_wasm = v8::Boolean::New (isolate, static_cast <bool >(flags & PHP_V8_SCRIPT_ORIGIN_OPTION_IS_WASM));
140+ is_module = v8::Boolean::New (isolate, static_cast <bool >(flags & PHP_V8_SCRIPT_ORIGIN_OPTION_IS_MODULE));
143141 }
144142
145143 return new v8::ScriptOrigin (resource_name,
@@ -157,35 +155,20 @@ static PHP_METHOD(ScriptOrigin, __construct) {
157155 zend_string *resource_name = NULL ;
158156 zend_long resource_line_offset = -1 ;
159157 zend_long resource_column_offset = -1 ;
160- zend_bool resource_is_shared_cross_origin = ' \0 ' ;
161158 zend_long script_id = -1 ;
162159 zend_string *source_map_url = NULL ;
163- zend_bool resource_is_opaque = ' \0 ' ;
164- zend_bool is_wasm = ' \0 ' ;
165- zend_bool is_module = ' \0 ' ;
166160
167- zval options_zv;
161+ zval * options_zv = NULL ;
168162
169- if (zend_parse_parameters (ZEND_NUM_ARGS (), " |SlllbSbbb " ,
163+ if (zend_parse_parameters (ZEND_NUM_ARGS (), " |SlllSo! " ,
170164 &resource_name,
171165 &resource_line_offset,
172166 &resource_column_offset,
173167 &script_id,
174- &resource_is_shared_cross_origin,
175168 &source_map_url,
176- &resource_is_opaque,
177- &is_wasm,
178- &is_module) == FAILURE) {
169+ &options_zv) == FAILURE) {
179170 return ;
180171 }
181-
182- v8::ScriptOriginOptions options (static_cast <bool >(resource_is_shared_cross_origin),
183- static_cast <bool >(resource_is_opaque),
184- static_cast <bool >(is_wasm),
185- static_cast <bool >(is_module));
186-
187- php_v8_create_script_origin_options (&options_zv, options);
188-
189172 zend_update_property_str (this_ce, getThis (), ZEND_STRL (" resource_name" ), resource_name);
190173
191174 if (resource_line_offset > 0 ) {
@@ -199,13 +182,20 @@ static PHP_METHOD(ScriptOrigin, __construct) {
199182 zend_update_property_long (this_ce, getThis (), ZEND_STRL (" script_id" ), script_id);
200183 }
201184
202- zend_update_property (this_ce, getThis (), ZEND_STRL (" options" ), &options_zv);
203-
204- if (source_map_url != NULL ) {
185+ if (options_zv != NULL ) {
205186 zend_update_property_str (this_ce, getThis (), ZEND_STRL (" source_map_url" ), source_map_url);
206187 }
207188
208- zval_ptr_dtor (&options_zv);
189+
190+ if (NULL != options_zv) {
191+ zend_update_property (this_ce, getThis (), ZEND_STRL (" options" ), options_zv);
192+ } else {
193+ zval tmp;
194+ v8::ScriptOriginOptions options (0 );
195+ php_v8_create_script_origin_options (&tmp, options);
196+ zend_update_property (this_ce, getThis (), ZEND_STRL (" options" ), &tmp);
197+ zval_ptr_dtor (&tmp);
198+ }
209199}
210200
211201static PHP_METHOD (ScriptOrigin, resourceName) {
@@ -269,14 +259,13 @@ static PHP_METHOD(ScriptOrigin, options) {
269259}
270260
271261
272- PHP_V8_ZEND_BEGIN_ARG_WITH_CONSTRUCTOR_INFO_EX (arginfo___construct, 1 )
262+ PHP_V8_ZEND_BEGIN_ARG_WITH_CONSTRUCTOR_INFO_EX (arginfo___construct, 0 )
273263 ZEND_ARG_TYPE_INFO(0 , resource_name, IS_STRING, 0 )
274264 ZEND_ARG_TYPE_INFO(0 , resource_line_offset, IS_LONG, 1 )
275265 ZEND_ARG_TYPE_INFO(0 , resource_column_offset, IS_LONG, 1 )
276266 ZEND_ARG_TYPE_INFO(0 , script_id, IS_LONG, 1 )
277- ZEND_ARG_TYPE_INFO(0 , resource_is_shared_cross_origin, _IS_BOOL, 0 )
278267 ZEND_ARG_TYPE_INFO(0 , source_map_url, IS_STRING, 0 )
279- ZEND_ARG_TYPE_INFO (0 , resource_is_opaque, _IS_BOOL, 0 )
268+ ZEND_ARG_OBJ_INFO (0 , options, V8\\ScriptOriginOptions, 1 )
280269ZEND_END_ARG_INFO()
281270
282271PHP_V8_ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_resourceName, ZEND_RETURN_VALUE, 0 , IS_STRING, 0 )
@@ -319,9 +308,9 @@ PHP_MINIT_FUNCTION (php_v8_script_origin) {
319308 zend_declare_property_string (this_ce, ZEND_STRL (" resource_name" ), " " , ZEND_ACC_PRIVATE);
320309 zend_declare_property_null (this_ce, ZEND_STRL (" resource_line_offset" ), ZEND_ACC_PRIVATE);
321310 zend_declare_property_null (this_ce, ZEND_STRL (" resource_column_offset" ), ZEND_ACC_PRIVATE);
322- zend_declare_property_null (this_ce, ZEND_STRL (" options" ), ZEND_ACC_PRIVATE);
323311 zend_declare_property_null (this_ce, ZEND_STRL (" script_id" ), ZEND_ACC_PRIVATE);
324312 zend_declare_property_string (this_ce, ZEND_STRL (" source_map_url" ), " " , ZEND_ACC_PRIVATE);
313+ zend_declare_property_null (this_ce, ZEND_STRL (" options" ), ZEND_ACC_PRIVATE);
325314
326315 return SUCCESS;
327316}
0 commit comments