@@ -279,6 +279,8 @@ static ScriptOrigin GetScriptOriginForScript(i::Isolate* isolate,
279279 i::Handle<i::Script> script) {
280280 i::Handle<i::Object> scriptName (script->GetNameOrSourceURL (), isolate);
281281 i::Handle<i::Object> source_map_url (script->source_mapping_url (), isolate);
282+ i::Handle<i::FixedArray> host_defined_options (script->host_defined_options (),
283+ isolate);
282284 v8::Isolate* v8_isolate =
283285 reinterpret_cast <v8::Isolate*>(script->GetIsolate ());
284286 ScriptOriginOptions options (script->origin_options ());
@@ -291,7 +293,8 @@ static ScriptOrigin GetScriptOriginForScript(i::Isolate* isolate,
291293 Utils::ToLocal (source_map_url),
292294 v8::Boolean::New (v8_isolate, options.IsOpaque ()),
293295 v8::Boolean::New (v8_isolate, script->type () == i::Script::TYPE_WASM),
294- v8::Boolean::New (v8_isolate, options.IsModule ()));
296+ v8::Boolean::New (v8_isolate, options.IsModule ()),
297+ Utils::ToLocal (host_defined_options));
295298 return origin;
296299}
297300
@@ -2090,13 +2093,68 @@ Local<Value> Script::Run() {
20902093 RETURN_TO_LOCAL_UNCHECKED (Run (context), Value);
20912094}
20922095
2096+ Local<Value> ScriptOrModule::GetResourceName () {
2097+ i::Handle<i::Script> obj = Utils::OpenHandle (this );
2098+ i::Isolate* isolate = obj->GetIsolate ();
2099+ ENTER_V8_NO_SCRIPT_NO_EXCEPTION (isolate);
2100+ i::Handle<i::Object> val (obj->name (), isolate);
2101+ return ToApiHandle<Value>(val);
2102+ }
2103+
2104+ Local<PrimitiveArray> ScriptOrModule::GetHostDefinedOptions () {
2105+ i::Handle<i::Script> obj = Utils::OpenHandle (this );
2106+ i::Isolate* isolate = obj->GetIsolate ();
2107+ ENTER_V8_NO_SCRIPT_NO_EXCEPTION (isolate);
2108+ i::Handle<i::FixedArray> val (obj->host_defined_options (), isolate);
2109+ return ToApiHandle<PrimitiveArray>(val);
2110+ }
20932111
20942112Local<UnboundScript> Script::GetUnboundScript () {
20952113 i::Handle<i::Object> obj = Utils::OpenHandle (this );
20962114 return ToApiHandle<UnboundScript>(
20972115 i::Handle<i::SharedFunctionInfo>(i::JSFunction::cast (*obj)->shared ()));
20982116}
20992117
2118+ // static
2119+ Local<PrimitiveArray> PrimitiveArray::New (Isolate* v8_isolate, int length) {
2120+ i::Isolate* isolate = reinterpret_cast <i::Isolate*>(v8_isolate);
2121+ ENTER_V8_NO_SCRIPT_NO_EXCEPTION (isolate);
2122+ Utils::ApiCheck (length >= 0 , " v8::PrimitiveArray::New" ,
2123+ " length must be equal or greater than zero" );
2124+ i::Handle<i::FixedArray> array = isolate->factory ()->NewFixedArray (length);
2125+ return ToApiHandle<PrimitiveArray>(array);
2126+ }
2127+
2128+ int PrimitiveArray::Length () const {
2129+ i::Handle<i::FixedArray> array = Utils::OpenHandle (this );
2130+ i::Isolate* isolate = array->GetIsolate ();
2131+ ENTER_V8_NO_SCRIPT_NO_EXCEPTION (isolate);
2132+ return array->length ();
2133+ }
2134+
2135+ void PrimitiveArray::Set (int index, Local<Primitive> item) {
2136+ i::Handle<i::FixedArray> array = Utils::OpenHandle (this );
2137+ i::Isolate* isolate = array->GetIsolate ();
2138+ ENTER_V8_NO_SCRIPT_NO_EXCEPTION (isolate);
2139+ Utils::ApiCheck (index >= 0 && index < array->length (),
2140+ " v8::PrimitiveArray::Set" ,
2141+ " index must be greater than or equal to 0 and less than the "
2142+ " array length" );
2143+ i::Handle<i::Object> i_item = Utils::OpenHandle (*item);
2144+ array->set (index, *i_item);
2145+ }
2146+
2147+ Local<Primitive> PrimitiveArray::Get (int index) {
2148+ i::Handle<i::FixedArray> array = Utils::OpenHandle (this );
2149+ i::Isolate* isolate = array->GetIsolate ();
2150+ ENTER_V8_NO_SCRIPT_NO_EXCEPTION (isolate);
2151+ Utils::ApiCheck (index >= 0 && index < array->length (),
2152+ " v8::PrimitiveArray::Get" ,
2153+ " index must be greater than or equal to 0 and less than the "
2154+ " array length" );
2155+ i::Handle<i::Object> i_item (array->get (index), isolate);
2156+ return ToApiHandle<Primitive>(i_item);
2157+ }
21002158
21012159Module::Status Module::GetStatus () const {
21022160 i::Handle<i::Module> self = Utils::OpenHandle (this );
@@ -2233,11 +2291,16 @@ MaybeLocal<UnboundScript> ScriptCompiler::CompileUnboundInternal(
22332291 TRACE_EVENT0 (TRACE_DISABLED_BY_DEFAULT (" v8.compile" ), " V8.CompileScript" );
22342292 i::Handle<i::Object> name_obj;
22352293 i::Handle<i::Object> source_map_url;
2294+ i::Handle<i::FixedArray> host_defined_options =
2295+ isolate->factory ()->empty_fixed_array ();
22362296 int line_offset = 0 ;
22372297 int column_offset = 0 ;
22382298 if (!source->resource_name .IsEmpty ()) {
22392299 name_obj = Utils::OpenHandle (*(source->resource_name ));
22402300 }
2301+ if (!source->host_defined_options .IsEmpty ()) {
2302+ host_defined_options = Utils::OpenHandle (*(source->host_defined_options ));
2303+ }
22412304 if (!source->resource_line_offset .IsEmpty ()) {
22422305 line_offset = static_cast <int >(source->resource_line_offset ->Value ());
22432306 }
@@ -2251,7 +2314,7 @@ MaybeLocal<UnboundScript> ScriptCompiler::CompileUnboundInternal(
22512314 result = i::Compiler::GetSharedFunctionInfoForScript (
22522315 str, name_obj, line_offset, column_offset, source->resource_options ,
22532316 source_map_url, isolate->native_context (), NULL , &script_data, options,
2254- i::NOT_NATIVES_CODE);
2317+ i::NOT_NATIVES_CODE, host_defined_options );
22552318 has_pending_exception = result.is_null ();
22562319 if (has_pending_exception && script_data != NULL ) {
22572320 // This case won't happen during normal operation; we have compiled
@@ -2516,6 +2579,10 @@ MaybeLocal<Script> ScriptCompiler::Compile(Local<Context> context,
25162579 if (!origin.ResourceName ().IsEmpty ()) {
25172580 script->set_name (*Utils::OpenHandle (*(origin.ResourceName ())));
25182581 }
2582+ if (!origin.HostDefinedOptions ().IsEmpty ()) {
2583+ script->set_host_defined_options (
2584+ *Utils::OpenHandle (*(origin.HostDefinedOptions ())));
2585+ }
25192586 if (!origin.ResourceLineOffset ().IsEmpty ()) {
25202587 script->set_line_offset (
25212588 static_cast <int >(origin.ResourceLineOffset ()->Value ()));
@@ -9807,7 +9874,8 @@ MaybeLocal<UnboundScript> debug::CompileInspectorScript(Isolate* v8_isolate,
98079874 i::Handle<i::Object>(), isolate->native_context (), NULL , &script_data,
98089875 ScriptCompiler::kNoCompileOptions ,
98099876 i::FLAG_expose_inspector_scripts ? i::NOT_NATIVES_CODE
9810- : i::INSPECTOR_CODE);
9877+ : i::INSPECTOR_CODE,
9878+ i::Handle<i::FixedArray>());
98119879 has_pending_exception = result.is_null ();
98129880 RETURN_ON_FAILED_EXECUTION (UnboundScript);
98139881 }
0 commit comments