diff --git a/buildall.sh b/buildall.sh index 6f32444..e648923 100755 --- a/buildall.sh +++ b/buildall.sh @@ -9,7 +9,6 @@ GOOS=freebsd GOARCH=386 go build -o bin/varaq-freebsd-386 main.go GOOS=freebsd GOARCH=amd64 go build -o bin/varaq-freebsd-amd64 main.go GOOS=freebsd GOARCH=arm go build -o bin/varaq-freebsd-arm main.go GOOS=illumos GOARCH=amd64 go build -o bin/varaq-illumos-amd64 main.go -GOOS=js GOARCH=wasm go build -o bin/varaq.wasm main.go GOOS=linux GOARCH=386 go build -o bin/varaq-linux-386 main.go GOOS=linux GOARCH=amd64 go build -o bin/varaq-linux-amd64 main.go GOOS=linux GOARCH=arm go build -o bin/varaq-linux-arm main.go @@ -35,3 +34,4 @@ GOOS=windows GOARCH=386 go build -o bin/varaq-windows-386 main.go GOOS=windows GOARCH=amd64 go build -o bin/varaq-windows-amd64 main.go GOOS=windows GOARCH=arm go build -o bin/varaq-windows-arm main.go GOOS=windows GOARCH=arm64 go build -o bin/varaq-windows-arm64 main.go +GOOS=js GOARCH=wasm go build -o bin/varaq.wasm webmain.go diff --git a/examples/webassembly-example/server.vqe b/examples/webassembly-example/server.vqe new file mode 100644 index 0000000..0b216e3 --- /dev/null +++ b/examples/webassembly-example/server.vqe @@ -0,0 +1,3 @@ +{ + "index.html" readall disp +} ":3333" servehttp diff --git a/examples/webassembly-example/varaq.wasm b/examples/webassembly-example/varaq.wasm new file mode 100755 index 0000000..14f246f Binary files /dev/null and b/examples/webassembly-example/varaq.wasm differ diff --git a/main.go b/main.go index 20cee15..8d1f139 100644 --- a/main.go +++ b/main.go @@ -1,34 +1,21 @@ -//go:build js && wasm -// +build js,wasm - package main import ( "bufio" - "bytes" "fmt" "io/ioutil" "os" - "runtime" - "syscall/js" "varaq/varaq" ) func main() { - if runtime.GOARCH == "wasm" { - done := make(chan struct{}, 0) - js.Global().Set("varaq", js.FuncOf(jsInterpret)) - fmt.Println("varaq WASM init, Qa'pla!") - <-done + argsCount := len(os.Args[1:]) + if argsCount >= 1 { + runFile(os.Args[1]) } else { - argsCount := len(os.Args[1:]) - if argsCount >= 1 { - runFile(os.Args[1]) - } else { - repl() - } - os.Exit(0) + repl() } + os.Exit(0) } func repl() { @@ -74,30 +61,3 @@ func interpret(src string) error { return nil } - -func jsInterpret(this js.Value, args []js.Value) interface{} { - if len(args) < 1 { - return js.ValueOf("no input") - } - input := args[0].String() - - tokens, err := varaq.Tokenize(input) - if err != nil { - return js.ValueOf(fmt.Errorf("%v", err)) - } - - code := varaq.Parse(tokens) - buf := bytes.NewBufferString("") - - strings := make([]string, len(args[1:])) - for i, jsVal := range args[1:] { - strings[i] = jsVal.String() - } - - err = varaq.Interpret(code, strings, buf) - if err != nil { - return js.ValueOf(fmt.Errorf("%v", err)) - } - - return js.ValueOf(buf.String()) -} diff --git a/webmain.go b/webmain.go new file mode 100644 index 0000000..175d11b --- /dev/null +++ b/webmain.go @@ -0,0 +1,44 @@ +//go:build (js && wasm) +// +build js,wasm +package main + +import ( + "bytes" + "fmt" + "syscall/js" + "varaq/varaq" +) + +func main() { + done := make(chan struct{}, 0) + js.Global().Set("varaq", js.FuncOf(jsInterpret)) + fmt.Println("varaq WASM init, Qa'pla!") + <-done +} + +func jsInterpret(this js.Value, args []js.Value) interface{} { + if len(args) < 1 { + return js.ValueOf("no input") + } + input := args[0].String() + + tokens, err := varaq.Tokenize(input) + if err != nil { + return js.ValueOf(fmt.Errorf("%v", err)) + } + + code := varaq.Parse(tokens) + buf := bytes.NewBufferString("") + + strings := make([]string, len(args[1:])) + for i, jsVal := range args[1:] { + strings[i] = jsVal.String() + } + + err = varaq.Interpret(code, strings, buf) + if err != nil { + return js.ValueOf(fmt.Errorf("%v", err)) + } + + return js.ValueOf(buf.String()) +}