mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-07-26 06:38:42 +00:00
2e76cd3687
This shows nicely formatted error messages for missing symbol names and for out-of-flash, out-of-RAM conditions (on microcontrollers with limited flash/RAM). Unfortunately the missing symbol name errors aren't available on Windows and WebAssembly because the linker doesn't report source locations yet. This is something that I could perhaps improve in LLD.
42 lines
1.1 KiB
Go
42 lines
1.1 KiB
Go
package builder
|
|
|
|
// MultiError is a list of multiple errors (actually: diagnostics) returned
|
|
// during LLVM IR generation.
|
|
type MultiError struct {
|
|
ImportPath string
|
|
Errs []error
|
|
}
|
|
|
|
func (e *MultiError) Error() string {
|
|
// Return the first error, to conform to the error interface. Clients should
|
|
// really do a type-assertion on *MultiError.
|
|
return e.Errs[0].Error()
|
|
}
|
|
|
|
// newMultiError returns a *MultiError if there is more than one error, or
|
|
// returns that error directly when there is only one. Passing an empty slice
|
|
// will return nil (because there is no error).
|
|
// The importPath may be passed if this error is for a single package.
|
|
func newMultiError(errs []error, importPath string) error {
|
|
switch len(errs) {
|
|
case 0:
|
|
return nil
|
|
case 1:
|
|
return errs[0]
|
|
default:
|
|
return &MultiError{importPath, errs}
|
|
}
|
|
}
|
|
|
|
// commandError is an error type to wrap os/exec.Command errors. This provides
|
|
// some more information regarding what went wrong while running a command.
|
|
type commandError struct {
|
|
Msg string
|
|
File string
|
|
Err error
|
|
}
|
|
|
|
func (e *commandError) Error() string {
|
|
return e.Msg + " " + e.File + ": " + e.Err.Error()
|
|
}
|