@@ -1415,16 +1415,7 @@ void AppendExceptionLine(Environment* env,
1415
1415
if (arrow_str.IsEmpty () || err_obj.IsEmpty () || !err_obj->IsNativeError ())
1416
1416
goto print;
1417
1417
1418
- msg = err_obj->Get (env->message_string ());
1419
- stack = err_obj->Get (env->stack_string ());
1420
-
1421
- if (msg.IsEmpty () || stack.IsEmpty ())
1422
- goto print;
1423
-
1424
- err_obj->Set (env->message_string (),
1425
- String::Concat (arrow_str, msg->ToString (env->isolate ())));
1426
- err_obj->Set (env->stack_string (),
1427
- String::Concat (arrow_str, stack->ToString (env->isolate ())));
1418
+ err_obj->SetHiddenValue (env->arrow_message_string (), arrow_str);
1428
1419
return ;
1429
1420
1430
1421
print:
@@ -1444,17 +1435,27 @@ static void ReportException(Environment* env,
1444
1435
AppendExceptionLine (env, er, message);
1445
1436
1446
1437
Local<Value> trace_value;
1438
+ Local<Value> arrow;
1447
1439
1448
- if (er->IsUndefined () || er->IsNull ())
1440
+ if (er->IsUndefined () || er->IsNull ()) {
1449
1441
trace_value = Undefined (env->isolate ());
1450
- else
1451
- trace_value = er->ToObject (env->isolate ())->Get (env->stack_string ());
1442
+ } else {
1443
+ Local<Object> err_obj = er->ToObject (env->isolate ());
1444
+
1445
+ trace_value = err_obj->Get (env->stack_string ());
1446
+ arrow = err_obj->GetHiddenValue (env->arrow_message_string ());
1447
+ }
1452
1448
1453
1449
node::Utf8Value trace (env->isolate (), trace_value);
1454
1450
1455
1451
// range errors have a trace member set to undefined
1456
1452
if (trace.length () > 0 && !trace_value->IsUndefined ()) {
1457
- fprintf (stderr, " %s\n " , *trace);
1453
+ if (arrow.IsEmpty () || !arrow->IsString ()) {
1454
+ fprintf (stderr, " %s\n " , *trace);
1455
+ } else {
1456
+ node::Utf8Value arrow_string (env->isolate (), arrow);
1457
+ fprintf (stderr, " %s\n %s\n " , *arrow_string, *trace);
1458
+ }
1458
1459
} else {
1459
1460
// this really only happens for RangeErrors, since they're the only
1460
1461
// kind that won't have all this info in the trace, or when non-Error
@@ -1478,7 +1479,17 @@ static void ReportException(Environment* env,
1478
1479
} else {
1479
1480
node::Utf8Value name_string (env->isolate (), name);
1480
1481
node::Utf8Value message_string (env->isolate (), message);
1481
- fprintf (stderr, " %s: %s\n " , *name_string, *message_string);
1482
+
1483
+ if (arrow.IsEmpty () || !arrow->IsString ()) {
1484
+ fprintf (stderr, " %s: %s\n " , *name_string, *message_string);
1485
+ } else {
1486
+ node::Utf8Value arrow_string (env->isolate (), arrow);
1487
+ fprintf (stderr,
1488
+ " %s\n %s: %s\n " ,
1489
+ *arrow_string,
1490
+ *name_string,
1491
+ *message_string);
1492
+ }
1482
1493
}
1483
1494
}
1484
1495
0 commit comments