@@ -278,6 +278,8 @@ static ScriptOrigin GetScriptOriginForScript(i::Isolate* isolate,
278278                                             i::Handle<i::Script> script) {
279279  i::Handle<i::Object> scriptName (script->GetNameOrSourceURL (), isolate);
280280  i::Handle<i::Object> source_map_url (script->source_mapping_url (), isolate);
281+   i::Handle<i::FixedArray> host_defined_options (script->host_defined_options (),
282+                                                 isolate);
281283  v8::Isolate* v8_isolate =
282284      reinterpret_cast <v8::Isolate*>(script->GetIsolate ());
283285  ScriptOriginOptions options (script->origin_options ());
@@ -290,7 +292,8 @@ static ScriptOrigin GetScriptOriginForScript(i::Isolate* isolate,
290292      Utils::ToLocal (source_map_url),
291293      v8::Boolean::New (v8_isolate, options.IsOpaque ()),
292294      v8::Boolean::New (v8_isolate, script->type () == i::Script::TYPE_WASM),
293-       v8::Boolean::New (v8_isolate, options.IsModule ()));
295+       v8::Boolean::New (v8_isolate, options.IsModule ()),
296+       Utils::ToLocal (host_defined_options));
294297  return  origin;
295298}
296299
@@ -2082,13 +2085,68 @@ Local<Value> Script::Run() {
20822085  RETURN_TO_LOCAL_UNCHECKED (Run (context), Value);
20832086}
20842087
2088+ Local<Value> ScriptOrModule::GetResourceName () {
2089+   i::Handle<i::Script> obj = Utils::OpenHandle (this );
2090+   i::Isolate* isolate = obj->GetIsolate ();
2091+   ENTER_V8_NO_SCRIPT_NO_EXCEPTION (isolate);
2092+   i::Handle<i::Object> val (obj->name (), isolate);
2093+   return  ToApiHandle<Value>(val);
2094+ }
2095+ 
2096+ Local<PrimitiveArray> ScriptOrModule::GetHostDefinedOptions () {
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::FixedArray> val (obj->host_defined_options (), isolate);
2101+   return  ToApiHandle<PrimitiveArray>(val);
2102+ }
20852103
20862104Local<UnboundScript> Script::GetUnboundScript () {
20872105  i::Handle<i::Object> obj = Utils::OpenHandle (this );
20882106  return  ToApiHandle<UnboundScript>(
20892107      i::Handle<i::SharedFunctionInfo>(i::JSFunction::cast (*obj)->shared ()));
20902108}
20912109
2110+ //  static
2111+ Local<PrimitiveArray> PrimitiveArray::New (Isolate* v8_isolate, int  length) {
2112+   i::Isolate* isolate = reinterpret_cast <i::Isolate*>(v8_isolate);
2113+   ENTER_V8_NO_SCRIPT_NO_EXCEPTION (isolate);
2114+   Utils::ApiCheck (length >= 0 , " v8::PrimitiveArray::New" 
2115+                   " length must be equal or greater than zero" 
2116+   i::Handle<i::FixedArray> array = isolate->factory ()->NewFixedArray (length);
2117+   return  ToApiHandle<PrimitiveArray>(array);
2118+ }
2119+ 
2120+ int  PrimitiveArray::Length () const  {
2121+   i::Handle<i::FixedArray> array = Utils::OpenHandle (this );
2122+   i::Isolate* isolate = array->GetIsolate ();
2123+   ENTER_V8_NO_SCRIPT_NO_EXCEPTION (isolate);
2124+   return  array->length ();
2125+ }
2126+ 
2127+ void  PrimitiveArray::Set (int  index, Local<Primitive> item) {
2128+   i::Handle<i::FixedArray> array = Utils::OpenHandle (this );
2129+   i::Isolate* isolate = array->GetIsolate ();
2130+   ENTER_V8_NO_SCRIPT_NO_EXCEPTION (isolate);
2131+   Utils::ApiCheck (index >= 0  && index < array->length (),
2132+                   " v8::PrimitiveArray::Set" 
2133+                   " index must be greater than or equal to 0 and less than the " 
2134+                   " array length" 
2135+   i::Handle<i::Object> i_item = Utils::OpenHandle (*item);
2136+   array->set (index, *i_item);
2137+ }
2138+ 
2139+ Local<Primitive> PrimitiveArray::Get (int  index) {
2140+   i::Handle<i::FixedArray> array = Utils::OpenHandle (this );
2141+   i::Isolate* isolate = array->GetIsolate ();
2142+   ENTER_V8_NO_SCRIPT_NO_EXCEPTION (isolate);
2143+   Utils::ApiCheck (index >= 0  && index < array->length (),
2144+                   " v8::PrimitiveArray::Get" 
2145+                   " index must be greater than or equal to 0 and less than the " 
2146+                   " array length" 
2147+   i::Handle<i::Object> i_item (array->get (index), isolate);
2148+   return  ToApiHandle<Primitive>(i_item);
2149+ }
20922150
20932151Module::Status Module::GetStatus () const  {
20942152  i::Handle<i::Module> self = Utils::OpenHandle (this );
@@ -2225,11 +2283,16 @@ MaybeLocal<UnboundScript> ScriptCompiler::CompileUnboundInternal(
22252283    TRACE_EVENT0 (TRACE_DISABLED_BY_DEFAULT (" v8.compile" " V8.CompileScript" 
22262284    i::Handle<i::Object> name_obj;
22272285    i::Handle<i::Object> source_map_url;
2286+     i::Handle<i::FixedArray> host_defined_options =
2287+         isolate->factory ()->empty_fixed_array ();
22282288    int  line_offset = 0 ;
22292289    int  column_offset = 0 ;
22302290    if  (!source->resource_name .IsEmpty ()) {
22312291      name_obj = Utils::OpenHandle (*(source->resource_name ));
22322292    }
2293+     if  (!source->host_defined_options .IsEmpty ()) {
2294+       host_defined_options = Utils::OpenHandle (*(source->host_defined_options ));
2295+     }
22332296    if  (!source->resource_line_offset .IsEmpty ()) {
22342297      line_offset = static_cast <int >(source->resource_line_offset ->Value ());
22352298    }
@@ -2243,7 +2306,7 @@ MaybeLocal<UnboundScript> ScriptCompiler::CompileUnboundInternal(
22432306    result = i::Compiler::GetSharedFunctionInfoForScript (
22442307        str, name_obj, line_offset, column_offset, source->resource_options ,
22452308        source_map_url, isolate->native_context (), NULL , &script_data, options,
2246-         i::NOT_NATIVES_CODE);
2309+         i::NOT_NATIVES_CODE, host_defined_options );
22472310    has_pending_exception = result.is_null ();
22482311    if  (has_pending_exception && script_data != NULL ) {
22492312      //  This case won't happen during normal operation; we have compiled
@@ -2508,6 +2571,10 @@ MaybeLocal<Script> ScriptCompiler::Compile(Local<Context> context,
25082571  if  (!origin.ResourceName ().IsEmpty ()) {
25092572    script->set_name (*Utils::OpenHandle (*(origin.ResourceName ())));
25102573  }
2574+   if  (!origin.HostDefinedOptions ().IsEmpty ()) {
2575+     script->set_host_defined_options (
2576+         *Utils::OpenHandle (*(origin.HostDefinedOptions ())));
2577+   }
25112578  if  (!origin.ResourceLineOffset ().IsEmpty ()) {
25122579    script->set_line_offset (
25132580        static_cast <int >(origin.ResourceLineOffset ()->Value ()));
@@ -9828,7 +9895,8 @@ MaybeLocal<UnboundScript> debug::CompileInspectorScript(Isolate* v8_isolate,
98289895        i::Handle<i::Object>(), isolate->native_context (), NULL , &script_data,
98299896        ScriptCompiler::kNoCompileOptions ,
98309897        i::FLAG_expose_inspector_scripts ? i::NOT_NATIVES_CODE
9831-                                          : i::INSPECTOR_CODE);
9898+                                          : i::INSPECTOR_CODE,
9899+         i::Handle<i::FixedArray>());
98329900    has_pending_exception = result.is_null ();
98339901    RETURN_ON_FAILED_EXECUTION (UnboundScript);
98349902  }
0 commit comments