script.go 780 Bytes
Newer Older
obscuren's avatar
obscuren committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
package ethutil

import (
	"fmt"
	"github.com/obscuren/mutan"
	"strings"
)

// General compile function
func Compile(script string) ([]byte, error) {
	byteCode, errors := mutan.Compile(strings.NewReader(script), false)
	if len(errors) > 0 {
		var errs string
		for _, er := range errors {
			if er != nil {
				errs += er.Error()
			}
		}
		return nil, fmt.Errorf("%v", errs)
	}

	return byteCode, nil
}

func CompileScript(script string) ([]byte, []byte, error) {
	// Preprocess
obscuren's avatar
obscuren committed
27
	mainInput, initInput := mutan.PreParse(script)
obscuren's avatar
obscuren committed
28 29 30 31 32 33 34 35 36 37 38 39 40 41
	// Compile main script
	mainScript, err := Compile(mainInput)
	if err != nil {
		return nil, nil, err
	}

	// Compile init script
	initScript, err := Compile(initInput)
	if err != nil {
		return nil, nil, err
	}

	return mainScript, initScript, nil
}