You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
package builder
|
|
|
|
|
|
|
|
// MultiError is a list of multiple errors (actually: diagnostics) returned
|
|
|
|
// during LLVM IR generation.
|
|
|
|
type MultiError struct {
|
|
|
|
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 lead to a panic.
|
|
|
|
func newMultiError(errs []error) error {
|
|
|
|
switch len(errs) {
|
|
|
|
case 0:
|
|
|
|
panic("attempted to create empty MultiError")
|
|
|
|
case 1:
|
|
|
|
return errs[0]
|
|
|
|
default:
|
|
|
|
return &MultiError{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()
|
|
|
|
}
|