Fixed minor issue with gas and added state object init
This commit is contained in:
@ -3,7 +3,7 @@ package ethutil
|
||||
import (
|
||||
_ "fmt"
|
||||
"math/big"
|
||||
"regexp"
|
||||
_ "regexp"
|
||||
)
|
||||
|
||||
// Op codes
|
||||
@ -143,7 +143,6 @@ init() {
|
||||
main() {
|
||||
// main something
|
||||
}
|
||||
*/
|
||||
func PreProcess(data string) (mainInput, initInput string) {
|
||||
reg := "\\(\\)\\s*{([\\d\\w\\W\\n\\s]+?)}"
|
||||
mainReg := regexp.MustCompile("main" + reg)
|
||||
@ -163,3 +162,49 @@ func PreProcess(data string) (mainInput, initInput string) {
|
||||
|
||||
return
|
||||
}
|
||||
*/
|
||||
|
||||
// Very, very dumb parser. Heed no attention :-)
|
||||
func FindFor(blockMatcher, input string) string {
|
||||
curCount := -1
|
||||
length := len(blockMatcher)
|
||||
matchfst := rune(blockMatcher[0])
|
||||
var currStr string
|
||||
|
||||
for i, run := range input {
|
||||
// Find init
|
||||
if curCount == -1 && run == matchfst && input[i:i+length] == blockMatcher {
|
||||
curCount = 0
|
||||
} else if curCount > -1 {
|
||||
if run == '{' {
|
||||
curCount++
|
||||
if curCount == 1 {
|
||||
continue
|
||||
}
|
||||
} else if run == '}' {
|
||||
curCount--
|
||||
if curCount == 0 {
|
||||
// we are done
|
||||
curCount = -1
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if curCount > 0 {
|
||||
currStr += string(run)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return currStr
|
||||
}
|
||||
|
||||
func PreProcess(data string) (mainInput, initInput string) {
|
||||
mainInput = FindFor("main", data)
|
||||
if mainInput == "" {
|
||||
mainInput = data
|
||||
}
|
||||
initInput = FindFor("init", data)
|
||||
|
||||
return
|
||||
}
|
||||
|
@ -1,32 +1,31 @@
|
||||
package ethutil
|
||||
|
||||
/*
|
||||
import (
|
||||
"math"
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestCompile(t *testing.T) {
|
||||
instr, err := CompileInstr("PUSH")
|
||||
|
||||
if err != nil {
|
||||
t.Error("Failed compiling instruction")
|
||||
func TestPreProcess(t *testing.T) {
|
||||
main, init := PreProcess(`
|
||||
init {
|
||||
// init
|
||||
if a > b {
|
||||
if {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
calc := (48 + 0*256 + 0*int64(math.Pow(256, 2)))
|
||||
if BigD(instr).Int64() != calc {
|
||||
t.Error("Expected", calc, ", got:", instr)
|
||||
main {
|
||||
// main
|
||||
if a > b {
|
||||
if c > d {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidInstr(t *testing.T) {
|
||||
op, args, err := Instr("68163")
|
||||
if err != nil {
|
||||
t.Error("Error decoding instruction")
|
||||
}
|
||||
`)
|
||||
|
||||
fmt.Println("main")
|
||||
fmt.Println(main)
|
||||
fmt.Println("init")
|
||||
fmt.Println(init)
|
||||
}
|
||||
|
||||
func TestInvalidInstr(t *testing.T) {
|
||||
}
|
||||
*/
|
||||
|
Reference in New Issue
Block a user