Fixed minor issue with gas and added state object init

This commit is contained in:
obscuren
2014-04-23 11:51:04 +02:00
parent 61cd1594b5
commit 3a9a252f6e
7 changed files with 135 additions and 56 deletions

View File

@ -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
}

View File

@ -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) {
}
*/