File tree 1 file changed +22
-1
lines changed
1 file changed +22
-1
lines changed Original file line number Diff line number Diff line change 4
4
"errors"
5
5
"fmt"
6
6
"math"
7
+ "runtime"
7
8
"strconv"
8
9
9
10
"github.com/anyappinc/regression/v2/logger"
@@ -283,7 +284,27 @@ func (r *Regression) run() (*basicRawModel, error) {
283
284
}
284
285
285
286
// Run calculates a model using QR decomposition.
286
- func (r * Regression ) Run () (* Model , error ) {
287
+ // Named return values are only used to set an error when recovering from panic.
288
+ func (r * Regression ) Run () (emptyModel * Model , recErr error ) {
289
+ defer func () {
290
+ if r := recover (); r != nil {
291
+ stackTrace := make ([]byte , 1024 )
292
+ stackSize := runtime .Stack (stackTrace , false )
293
+ for stackSize == len (stackTrace ) {
294
+ stackTrace = make ([]byte , len (stackTrace )* 2 )
295
+ stackSize = runtime .Stack (stackTrace , false )
296
+ }
297
+ stackTrace = stackTrace [:stackSize ]
298
+
299
+ switch r := r .(type ) {
300
+ case error :
301
+ recErr = fmt .Errorf ("recovered from panic: %w\n \n %s" , r , stackTrace )
302
+ default :
303
+ recErr = fmt .Errorf ("recovered from panic: %v\n \n %s" , r , stackTrace )
304
+ }
305
+ }
306
+ }()
307
+
287
308
bm , err := r .run ()
288
309
if err != nil {
289
310
return nil , err
You can’t perform that action at this time.
0 commit comments