@@ -227,15 +227,15 @@ func (s *Session) mainFunc() *ast.FuncDecl {
227
227
return s .File .Scope .Lookup ("main" ).Decl .(* ast.FuncDecl )
228
228
}
229
229
230
- func (s * Session ) Run () ([]byte , error ) {
230
+ func (s * Session ) Run () ([]byte , error , bytes. Buffer ) {
231
231
f , err := os .Create (s .FilePath )
232
232
if err != nil {
233
- return []byte {}, err
233
+ return []byte {}, err , bytes. Buffer {}
234
234
}
235
235
236
236
err = printer .Fprint (f , s .Fset , s .File )
237
237
if err != nil {
238
- return []byte {}, err
238
+ return []byte {}, err , bytes. Buffer {}
239
239
}
240
240
241
241
return goRun (append (s .ExtraFilePaths , s .FilePath ))
@@ -255,14 +255,19 @@ func tempFile() (string, error) {
255
255
return filepath .Join (dir , "gore_session.go" ), nil
256
256
}
257
257
258
- func goRun (files []string ) ([]byte , error ) {
258
+ func goRun (files []string ) ([]byte , error , bytes.Buffer ) {
259
+
260
+ var stderr bytes.Buffer
261
+
259
262
args := append ([]string {"run" }, files ... )
260
263
debugf ("go %s" , strings .Join (args , " " ))
261
264
cmd := exec .Command ("go" , args ... )
262
265
cmd .Stdin = os .Stdin
263
266
//cmd.Stdout = os.Stdout
264
- cmd .Stderr = os .Stderr
265
- return cmd .Output ()
267
+ //cmd.Stderr = os.Stderr
268
+ cmd .Stderr = & stderr
269
+ out , err := cmd .Output ()
270
+ return out , err , stderr
266
271
//return cmd.Run()
267
272
}
268
273
@@ -379,7 +384,7 @@ func (s *Session) reset() error {
379
384
return nil
380
385
}
381
386
382
- func (s * Session ) Eval (in string ) (string , error ) {
387
+ func (s * Session ) Eval (in string ) (string , error , bytes. Buffer ) {
383
388
debugf ("eval >>> %q" , in )
384
389
385
390
s .clearQuickFix ()
@@ -397,7 +402,7 @@ func (s *Session) Eval(in string) (string, error) {
397
402
err := command .action (s , arg )
398
403
if err != nil {
399
404
if err == ErrQuit {
400
- return "" , err
405
+ return "" , err , bytes. Buffer {}
401
406
}
402
407
errorf ("%s: %s" , command .name , err )
403
408
}
@@ -408,7 +413,7 @@ func (s *Session) Eval(in string) (string, error) {
408
413
409
414
if commandRan {
410
415
s .doQuickFix ()
411
- return "" , nil
416
+ return "" , nil , bytes. Buffer {}
412
417
}
413
418
414
419
if _ , err := s .evalExpr (in ); err != nil {
@@ -419,7 +424,7 @@ func (s *Session) Eval(in string) (string, error) {
419
424
debugf ("stmt :: err = %s" , err )
420
425
421
426
if _ , ok := err .(scanner.ErrorList ); ok {
422
- return "" , ErrContinue
427
+ return "" , ErrContinue , bytes. Buffer {}
423
428
}
424
429
}
425
430
}
@@ -429,7 +434,7 @@ func (s *Session) Eval(in string) (string, error) {
429
434
}
430
435
s .doQuickFix ()
431
436
432
- output , err := s .Run ()
437
+ output , err , strerr := s .Run ()
433
438
if err != nil {
434
439
if exitErr , ok := err .(* exec.ExitError ); ok {
435
440
// if failed with status 2, remove the last statement
@@ -443,7 +448,7 @@ func (s *Session) Eval(in string) (string, error) {
443
448
errorf ("%s" , err )
444
449
}
445
450
446
- return string (output ), err
451
+ return string (output ), err , strerr
447
452
}
448
453
449
454
// storeMainBody stores current state of code so that it can be restored
0 commit comments