src: improve CompileFunctionAndCacheResult error handling · nodejs/node@3b6895a

@@ -1511,24 +1511,22 @@ void ContextifyContext::CompileFunction(

15111511

}

1512151215131513

TryCatchScope try_catch(env);

1514-

Local<Object> result = CompileFunctionAndCacheResult(env,

1515-

parsing_context,

1516-

&source,

1517-

params,

1518-

context_extensions,

1519-

options,

1520-

produce_cached_data,

1521-

id_symbol,

1522-

try_catch);

1523-1524-

if (try_catch.HasCaught() && !try_catch.HasTerminated()) {

1514+

MaybeLocal<Object> maybe_result =

1515+

CompileFunctionAndCacheResult(env,

1516+

parsing_context,

1517+

&source,

1518+

params,

1519+

context_extensions,

1520+

options,

1521+

produce_cached_data,

1522+

id_symbol,

1523+

try_catch);

1524+

Local<Object> result;

1525+

if (!maybe_result.ToLocal(&result)) {

1526+

CHECK(try_catch.HasCaught());

15251527

try_catch.ReThrow();

15261528

return;

15271529

}

1528-1529-

if (result.IsEmpty()) {

1530-

return;

1531-

}

15321530

args.GetReturnValue().Set(result);

15331531

}

15341532

@@ -1544,7 +1542,7 @@ static LocalVector<String> GetCJSParameters(IsolateData* data) {

15441542

return result;

15451543

}

154615441547-

Local<Object> ContextifyContext::CompileFunctionAndCacheResult(

1545+

MaybeLocal<Object> ContextifyContext::CompileFunctionAndCacheResult(

15481546

Environment* env,

15491547

Local<Context> parsing_context,

15501548

ScriptCompiler::Source* source,

@@ -1566,28 +1564,29 @@ Local<Object> ContextifyContext::CompileFunctionAndCacheResult(

1566156415671565

Local<Function> fn;

15681566

if (!maybe_fn.ToLocal(&fn)) {

1569-

if (try_catch.HasCaught() && !try_catch.HasTerminated()) {

1567+

CHECK(try_catch.HasCaught());

1568+

if (!try_catch.HasTerminated()) {

15701569

errors::DecorateErrorStack(env, try_catch);

1571-

return Object::New(env->isolate());

15721570

}

1571+

return {};

15731572

}

1574157315751574

Local<Context> context = env->context();

15761575

if (fn->SetPrivate(context, env->host_defined_option_symbol(), id_symbol)

15771576

.IsNothing()) {

1578-

return Object::New(env->isolate());

1577+

return {};

15791578

}

1580157915811580

Isolate* isolate = env->isolate();

15821581

Local<Object> result = Object::New(isolate);

15831582

if (result->Set(parsing_context, env->function_string(), fn).IsNothing())

1584-

return Object::New(env->isolate());

1583+

return {};

15851584

if (result

15861585

->Set(parsing_context,

15871586

env->source_map_url_string(),

15881587

fn->GetScriptOrigin().SourceMapUrl())

15891588

.IsNothing())

1590-

return Object::New(env->isolate());

1589+

return {};

1591159015921591

std::unique_ptr<ScriptCompiler::CachedData> new_cached_data;

15931592

if (produce_cached_data) {

@@ -1600,7 +1599,7 @@ Local<Object> ContextifyContext::CompileFunctionAndCacheResult(

16001599

produce_cached_data,

16011600

std::move(new_cached_data))

16021601

.IsNothing()) {

1603-

return Object::New(env->isolate());

1602+

return {};

16041603

}

1605160416061605

return result;