diff --git a/cmd/goal/clerk.go b/cmd/goal/clerk.go index 889fe7194f..ed5392f5a1 100644 --- a/cmd/goal/clerk.go +++ b/cmd/goal/clerk.go @@ -922,7 +922,7 @@ func assembleFile(fname string) (program []byte) { } ops, err := logic.AssembleString(string(text)) if err != nil { - ops.ReportProblems(fname) + ops.ReportProblems(fname, os.Stderr) reportErrorf("%s: %s", fname, err) } _, params := getProto(protoVersion) diff --git a/cmd/goal/multisig.go b/cmd/goal/multisig.go index 4bd72681e2..3878835820 100644 --- a/cmd/goal/multisig.go +++ b/cmd/goal/multisig.go @@ -20,6 +20,7 @@ import ( "fmt" "io" "io/ioutil" + "os" "github.com/spf13/cobra" @@ -163,7 +164,7 @@ var signProgramCmd = &cobra.Command{ } ops, err := logic.AssembleString(string(text)) if err != nil { - ops.ReportProblems(programSource) + ops.ReportProblems(programSource, os.Stderr) reportErrorf("%s: %s", programSource, err) } if outname == "" { diff --git a/cmd/pingpong/runCmd.go b/cmd/pingpong/runCmd.go index ed834f4add..7d0136d10b 100644 --- a/cmd/pingpong/runCmd.go +++ b/cmd/pingpong/runCmd.go @@ -242,7 +242,7 @@ var runCmd = &cobra.Command{ } ops, err := logic.AssembleString(programStr) if err != nil { - ops.ReportProblems(teal) + ops.ReportProblems(teal, os.Stderr) reportErrorf("Internal error, cannot assemble %v \n", programStr) } cfg.Program = ops.Program diff --git a/daemon/algod/api/server/v2/handlers.go b/daemon/algod/api/server/v2/handlers.go index 19900d6962..30f23b7426 100644 --- a/daemon/algod/api/server/v2/handlers.go +++ b/daemon/algod/api/server/v2/handlers.go @@ -24,6 +24,7 @@ import ( "io" "math" "net/http" + "strings" "time" "github.com/labstack/echo/v4" @@ -754,7 +755,9 @@ func (v2 *Handlers) TealCompile(ctx echo.Context) error { source := buf.String() ops, err := logic.AssembleString(source) if err != nil { - return badRequest(ctx, err, err.Error(), v2.Log) + sb := strings.Builder{} + ops.ReportProblems("", &sb) + return badRequest(ctx, err, sb.String(), v2.Log) } pd := logic.HashProgram(ops.Program) addr := basics.Address(pd) diff --git a/data/transactions/logic/assembler.go b/data/transactions/logic/assembler.go index 24a9fec7c9..5b4d72b383 100644 --- a/data/transactions/logic/assembler.go +++ b/data/transactions/logic/assembler.go @@ -27,7 +27,6 @@ import ( "errors" "fmt" "io" - "os" "sort" "strconv" "strings" @@ -2109,19 +2108,27 @@ func (ops *OpStream) warnf(format string, a ...interface{}) error { return ops.warn(fmt.Errorf(format, a...)) } -// ReportProblems issues accumulated warnings and errors to stderr. -func (ops *OpStream) ReportProblems(fname string) { +// ReportProblems issues accumulated warnings and outputs errors to an io.Writer. +func (ops *OpStream) ReportProblems(fname string, writer io.Writer) { for i, e := range ops.Errors { if i > 9 { break } - fmt.Fprintf(os.Stderr, "%s: %s\n", fname, e) + if fname == "" { + fmt.Fprintf(writer, "%s\n", e) + } else { + fmt.Fprintf(writer, "%s: %s\n", fname, e) + } } for i, w := range ops.Warnings { if i > 9 { break } - fmt.Fprintf(os.Stderr, "%s: %s\n", fname, w) + if fname == "" { + fmt.Fprintf(writer, "%s\n", w) + } else { + fmt.Fprintf(writer, "%s: %s\n", fname, w) + } } }