Documentation
¶
Index ¶
- Constants
- Variables
- func AddFuncInfoInterceptor(f *core.FuncInfo, interceptor *Interceptor) func()
- func AddFuncInterceptor(f interface{}, interceptor *Interceptor) func()
- func AddInterceptor(interceptor *Interceptor) func()
- func AddInterceptorHead(interceptor *Interceptor) func()
- func Direct(fn func())
- func GetTrappingPC() uintptr
- func Ignore(f interface{})
- func Inspect(f interface{}) (recvPtr interface{}, funcInfo *core.FuncInfo)
- func InspectPC(f interface{}) (recvPtr interface{}, funcInfo *core.FuncInfo, funcPC uintptr, ...)
- func Skip()
- func WithFuncOverride(funcInfo *core.FuncInfo, interceptor *Interceptor, f func())
- func WithInterceptor(interceptor *Interceptor, f func())
- func WithOverride(interceptor *Interceptor, f func())
- type Interceptor
Constants ¶
const ClosureHasFunc = true
const GenericImplIsClosure = false
Variables ¶
var ErrAbort error = errors.New("abort trap interceptor")
var ErrSkip error = errors.New("skip trap interceptor")
Functions ¶
func AddFuncInfoInterceptor ¶ added in v1.0.23
func AddFuncInfoInterceptor(f *core.FuncInfo, interceptor *Interceptor) func()
func AddFuncInterceptor ¶ added in v1.0.23
func AddFuncInterceptor(f interface{}, interceptor *Interceptor) func()
AddFuncInterceptor add func interceptor, allowing f to be re-entrant
func AddInterceptor ¶
func AddInterceptor(interceptor *Interceptor) func()
AddInterceptor add a general interceptor, disallowing re-entrant
func AddInterceptorHead ¶ added in v1.0.22
func AddInterceptorHead(interceptor *Interceptor) func()
func Direct ¶ added in v1.0.16
func Direct(fn func())
Direct make a call to fn, without any trap and mock interceptors
func GetTrappingPC ¶ added in v1.0.10
func GetTrappingPC() uintptr
func Inspect ¶ added in v1.0.8
Inspect make a call to f to capture its receiver pointer if it is bound method It can be used to get the unwrapped innermost function of a method wrapper. if f is a bound method, then guaranteed that recvPtr cannot be nil
func Skip ¶
func Skip()
Skip serves as mark to tell xgo not insert trap instructions for the function that calls Skip() NOTE: the function body is intenionally leave empty as trap.Skip() is just a mark that makes sense at compile time.
func WithFuncOverride ¶ added in v1.0.23
func WithFuncOverride(funcInfo *core.FuncInfo, interceptor *Interceptor, f func())
func WithInterceptor ¶
func WithInterceptor(interceptor *Interceptor, f func())
WithInterceptor executes given f with interceptor setup. It can be used from init phase safely. it clears the interceptor after f finishes. the interceptor will be added to head, so it will gets firstly invoked. f cannot be nil.
NOTE: the implementation uses addLocalInterceptor even from init because it will be soon cleared without causing concurrent issues.
func WithOverride ¶ added in v1.0.20
func WithOverride(interceptor *Interceptor, f func())
WithOverride override local and global interceptors in current goroutine temporarily, it returns a function that can be used to cancel the override.