plugeth/core/vm/plugin_hooks.go

40 lines
925 B
Go
Raw Permalink Normal View History

2021-09-02 21:26:40 +00:00
package vm
import (
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/plugins"
)
2021-09-02 21:26:40 +00:00
func (st *Stack) Len() int {
return len(st.data)
}
func PluginOpCodeSelect(pl *plugins.PluginLoader, jt *JumpTable) *JumpTable {
var opCodes []int
fnList := pl.Lookup("OpCodeSelect", func(item interface{}) bool {
_, ok := item.(func() []int)
return ok
})
for _, fni := range fnList {
if fn, ok := fni.(func() []int); ok {
opCodes = append(opCodes, fn()...)
}
}
if len(opCodes) > 0 {
jt = copyJumpTable(jt)
}
for _, idx := range opCodes {
(*jt)[idx] = &operation{execute: opUndefined, maxStack: maxStack(0, 0)}
}
return jt
}
func pluginOpCodeSelect(jt *JumpTable) *JumpTable {
if plugins.DefaultPluginLoader == nil {
log.Warn("Attempting PluginOpCodeSelect, but default PluginLoader has not been initialized")
return nil
}
return PluginOpCodeSelect(plugins.DefaultPluginLoader, jt)
}