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