mirror of
https://github.com/Jguer/yay.git
synced 2026-07-26 04:08:02 -04:00
50 lines
864 B
Go
50 lines
864 B
Go
package lua
|
|
|
|
import (
|
|
"errors"
|
|
|
|
glua "github.com/yuin/gopher-lua"
|
|
)
|
|
|
|
type abortError string
|
|
|
|
func (err abortError) Error() string {
|
|
return string(err)
|
|
}
|
|
|
|
func (err abortError) String() string {
|
|
return string(err)
|
|
}
|
|
|
|
func (abortError) Type() glua.LValueType {
|
|
return glua.LTUserData
|
|
}
|
|
|
|
func abort(state *glua.LState) int {
|
|
message := state.CheckString(1)
|
|
state.Error(abortError(message), 0)
|
|
|
|
return 0
|
|
}
|
|
|
|
func luaAbortError(err error) (abortError, bool) {
|
|
var apiErr *glua.ApiError
|
|
if !errors.As(err, &apiErr) {
|
|
return "", false
|
|
}
|
|
|
|
abortErr, ok := apiErr.Object.(abortError)
|
|
|
|
return abortErr, ok
|
|
}
|
|
|
|
// wrapLuaErr strips the gopher-lua API wrapper from abort errors so callers
|
|
// see the clean abort message instead of a Lua traceback.
|
|
func wrapLuaErr(err error) error {
|
|
if abortErr, ok := luaAbortError(err); ok {
|
|
return abortErr
|
|
}
|
|
|
|
return err
|
|
}
|