@@ -55,28 +55,33 @@ function find_if(func, array) {
55
55
for ( var i = array . length ; -- i >= 0 ; ) if ( func ( array [ i ] ) ) return array [ i ] ;
56
56
}
57
57
58
- function configure_error_stack ( fn ) {
59
- Object . defineProperty ( fn . prototype , "stack" , {
58
+ function configure_error_stack ( ex , cause ) {
59
+ var stack = ex . name + ": " + ex . message ;
60
+ Object . defineProperty ( ex , "stack" , {
60
61
get : function ( ) {
61
- var err = new Error ( this . message ) ;
62
- err . name = this . name ;
63
- try {
64
- throw err ;
65
- } catch ( e ) {
66
- return e . stack ;
62
+ if ( cause ) {
63
+ cause . name = "" + ex . name ;
64
+ stack = "" + cause . stack ;
65
+ var msg = "" + cause . message ;
66
+ cause = null ;
67
+ var index = stack . indexOf ( msg ) ;
68
+ if ( index >= 0 ) index += msg . length ;
69
+ index = stack . indexOf ( "\n" , index ) + 1 ;
70
+ stack = stack . slice ( 0 , index ) + stack . slice ( stack . indexOf ( "\n" , index ) + 1 ) ;
67
71
}
68
- }
72
+ return stack ;
73
+ } ,
69
74
} ) ;
70
75
}
71
76
72
77
function DefaultsError ( msg , defs ) {
73
78
this . message = msg ;
74
79
this . defs = defs ;
80
+ configure_error_stack ( this , new Error ( msg ) ) ;
75
81
}
76
82
DefaultsError . prototype = Object . create ( Error . prototype ) ;
77
83
DefaultsError . prototype . constructor = DefaultsError ;
78
84
DefaultsError . prototype . name = "DefaultsError" ;
79
- configure_error_stack ( DefaultsError ) ;
80
85
81
86
function defaults ( args , defs , croak ) {
82
87
if ( croak ) for ( var i in args ) {
0 commit comments