forked from cerc-io/plugeth
core/asm: use strings.Builder and fix godoc issues (#24861)
This commit is contained in:
parent
fcbc05ccb6
commit
330e53fbb9
@ -14,7 +14,7 @@
|
|||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
// Provides support for dealing with EVM assembly instructions (e.g., disassembling them).
|
// Package asm provides support for dealing with EVM assembly instructions (e.g., disassembling them).
|
||||||
package asm
|
package asm
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@ -34,14 +34,14 @@ type instructionIterator struct {
|
|||||||
started bool
|
started bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a new instruction iterator.
|
// NewInstructionIterator create a new instruction iterator.
|
||||||
func NewInstructionIterator(code []byte) *instructionIterator {
|
func NewInstructionIterator(code []byte) *instructionIterator {
|
||||||
it := new(instructionIterator)
|
it := new(instructionIterator)
|
||||||
it.code = code
|
it.code = code
|
||||||
return it
|
return it
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns true if there is a next instruction and moves on.
|
// Next returns true if there is a next instruction and moves on.
|
||||||
func (it *instructionIterator) Next() bool {
|
func (it *instructionIterator) Next() bool {
|
||||||
if it.error != nil || uint64(len(it.code)) <= it.pc {
|
if it.error != nil || uint64(len(it.code)) <= it.pc {
|
||||||
// We previously reached an error or the end.
|
// We previously reached an error or the end.
|
||||||
@ -79,27 +79,27 @@ func (it *instructionIterator) Next() bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns any error that may have been encountered.
|
// Error returns any error that may have been encountered.
|
||||||
func (it *instructionIterator) Error() error {
|
func (it *instructionIterator) Error() error {
|
||||||
return it.error
|
return it.error
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the PC of the current instruction.
|
// PC returns the PC of the current instruction.
|
||||||
func (it *instructionIterator) PC() uint64 {
|
func (it *instructionIterator) PC() uint64 {
|
||||||
return it.pc
|
return it.pc
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the opcode of the current instruction.
|
// Op returns the opcode of the current instruction.
|
||||||
func (it *instructionIterator) Op() vm.OpCode {
|
func (it *instructionIterator) Op() vm.OpCode {
|
||||||
return it.op
|
return it.op
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the argument of the current instruction.
|
// Arg returns the argument of the current instruction.
|
||||||
func (it *instructionIterator) Arg() []byte {
|
func (it *instructionIterator) Arg() []byte {
|
||||||
return it.arg
|
return it.arg
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pretty-print all disassembled EVM instructions to stdout.
|
// PrintDisassembled pretty-print all disassembled EVM instructions to stdout.
|
||||||
func PrintDisassembled(code string) error {
|
func PrintDisassembled(code string) error {
|
||||||
script, err := hex.DecodeString(code)
|
script, err := hex.DecodeString(code)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -117,7 +117,7 @@ func PrintDisassembled(code string) error {
|
|||||||
return it.Error()
|
return it.Error()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return all disassembled EVM instructions in human-readable format.
|
// Disassemble returns all disassembled EVM instructions in human-readable format.
|
||||||
func Disassemble(script []byte) ([]string, error) {
|
func Disassemble(script []byte) ([]string, error) {
|
||||||
instrs := make([]string, 0)
|
instrs := make([]string, 0)
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ type Compiler struct {
|
|||||||
debug bool
|
debug bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// newCompiler returns a new allocated compiler.
|
// NewCompiler returns a new allocated compiler.
|
||||||
func NewCompiler(debug bool) *Compiler {
|
func NewCompiler(debug bool) *Compiler {
|
||||||
return &Compiler{
|
return &Compiler{
|
||||||
labels: make(map[string]int),
|
labels: make(map[string]int),
|
||||||
@ -105,16 +105,16 @@ func (c *Compiler) Compile() (string, []error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// turn the binary to hex
|
// turn the binary to hex
|
||||||
var bin string
|
var bin strings.Builder
|
||||||
for _, v := range c.binary {
|
for _, v := range c.binary {
|
||||||
switch v := v.(type) {
|
switch v := v.(type) {
|
||||||
case vm.OpCode:
|
case vm.OpCode:
|
||||||
bin += fmt.Sprintf("%x", []byte{byte(v)})
|
bin.WriteString(fmt.Sprintf("%x", []byte{byte(v)}))
|
||||||
case []byte:
|
case []byte:
|
||||||
bin += fmt.Sprintf("%x", v)
|
bin.WriteString(fmt.Sprintf("%x", v))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return bin, errors
|
return bin.String(), errors
|
||||||
}
|
}
|
||||||
|
|
||||||
// next returns the next token and increments the
|
// next returns the next token and increments the
|
||||||
|
@ -93,7 +93,7 @@ type lexer struct {
|
|||||||
debug bool // flag for triggering debug output
|
debug bool // flag for triggering debug output
|
||||||
}
|
}
|
||||||
|
|
||||||
// lex lexes the program by name with the given source. It returns a
|
// Lex lexes the program by name with the given source. It returns a
|
||||||
// channel on which the tokens are delivered.
|
// channel on which the tokens are delivered.
|
||||||
func Lex(source []byte, debug bool) <-chan token {
|
func Lex(source []byte, debug bool) <-chan token {
|
||||||
ch := make(chan token)
|
ch := make(chan token)
|
||||||
|
Loading…
Reference in New Issue
Block a user