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