@ -25,6 +25,7 @@ import (
goruntime "runtime"
"github.com/ethereum/go-ethereum/cmd/evm/internal/compiler"
"github.com/ethereum/go-ethereum/cmd/utils"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/state"
@ -61,7 +62,18 @@ func runCmd(ctx *cli.Context) error {
ret [ ] byte
err error
)
if ctx . GlobalString ( CodeFlag . Name ) != "" {
if fn := ctx . Args ( ) . First ( ) ; len ( fn ) > 0 {
src , err := ioutil . ReadFile ( fn )
if err != nil {
return err
}
bin , err := compiler . Compile ( fn , src , false )
if err != nil {
return err
}
code = common . Hex2Bytes ( bin )
} else if ctx . GlobalString ( CodeFlag . Name ) != "" {
code = common . Hex2Bytes ( ctx . GlobalString ( CodeFlag . Name ) )
} else {
var hexcode [ ] byte
@ -106,7 +118,7 @@ func runCmd(ctx *cli.Context) error {
ret , err = runtime . Call ( receiver , common . Hex2Bytes ( ctx . GlobalString ( InputFlag . Name ) ) , & runtimeConfig )
}
vmdon e := time . Since ( tstart )
execTim e := time . Since ( tstart )
if ctx . GlobalBool ( DumpFlag . Name ) {
statedb . Commit ( true )
@ -118,19 +130,16 @@ func runCmd(ctx *cli.Context) error {
vm . WriteTrace ( os . Stderr , logger . StructLogs ( ) )
fmt . Fprintln ( os . Stderr , "#### LOGS ####" )
vm . WriteLogs ( os . Stderr , statedb . Logs ( ) )
}
if ctx . GlobalBool ( SysStatFlag . Name ) {
var mem goruntime . MemStats
goruntime . ReadMemStats ( & mem )
fmt . Printf ( "vm took %v\n" , vmdone )
fmt . Printf ( ` alloc : % d
tot alloc : % d
no . malloc : % d
heap alloc : % d
heap objs : % d
num gc : % d
` , mem . Alloc , mem . TotalAlloc , mem . Mallocs , mem . HeapAlloc , mem . HeapObjects , mem . NumGC )
fmt . Fprintf ( os . Stderr , ` evm execution time : % v
heap objects : % d
allocations : % d
total allocations : % d
GC calls : % d
` , execTime , mem . HeapObjects , mem . Alloc , mem . TotalAlloc , mem . NumGC )
}
fmt . Printf ( "0x%x" , ret )