提交 1799cec6 编写于 作者: chai2010's avatar chai2010

准备调试 play 辅助代码

上级 4a666405
// 版权 @2022 凹语言 作者。保留所有权利。
package main
import "wa-lang.org/wa/api"
var waError error
func waGetError() error {
return waError
}
func waGetErrorText() string {
if waError != nil {
return waError.Error()
} else {
return ""
}
}
func waSetError(err error) {
waError = err
}
func waClearError() {
waError = nil
}
func waGenerateWat(filename, code string) string {
cfg := api.DefaultConfig()
cfg.WaArch = api.WaArch_wasm
cfg.WaOS = api.WaOS_chrome
wat, err := api.BuildFile(cfg, filename, code)
if err != nil {
if waGetError() == nil {
waSetError(err)
}
return ""
}
return string(wat)
}
func waFormatCode(filename, code string) string {
newCode, err := api.FormatCode(filename, code)
if err != nil {
if waGetError() == nil {
waSetError(err)
}
return code
}
return newCode
}
......@@ -5,6 +5,35 @@
package main
import "fmt"
func main() {
println("only for build wa.wasm")
fmt.Println("=== WARN: only for build wa.wasm === ")
waClearError()
outWat := waGenerateWat(waName, waCode)
outFmt := waFormatCode(waName, waCode)
fmt.Println("ERR:", waGetErrorText())
fmt.Println("FMT:", outFmt)
fmt.Println("WAT:", outWat)
}
const waName = "hello.wa"
const waCode = `// 版权 @2019 凹语言 作者。保留所有权利。
import "fmt"
import "runtime"
func main {
println("你好,凹语言!", runtime.WAOS)
println(add(40, 2))
fmt.Println(1+1)
}
func add(a: i32, b: i32) => i32 {
return a+b
}
`
......@@ -2,49 +2,7 @@
package main
import (
"syscall/js"
"wa-lang.org/wa/api"
)
var waError string
func waGetError() string {
return waError
}
func waSetError(err error) {
if err != nil {
waError = err.Error()
} else {
waError = ""
}
}
func waClearError() {
waError = ""
}
func waGenerateWat(filename, code string) string {
cfg := api.DefaultConfig()
cfg.WaArch = api.WaArch_wasm
cfg.WaOS = api.WaOS_chrome
wat, err := api.BuildFile(cfg, filename, code)
if err != nil {
waSetError(err)
return ""
}
return string(wat)
}
func waFormatCode(filename, code string) string {
newCode, err := api.FormatCode(filename, code)
if err != nil {
waSetError(err)
return code
}
return newCode
}
import "syscall/js"
func getJsValue(window js.Value, key, defaultValue string) string {
if x := window.Get(key); x.IsNull() {
......@@ -63,7 +21,11 @@ func main() {
waCode := getJsValue(window, "__WA_CODE__", "// no code")
waClearError()
window.Set("__WA_WAT__", waGenerateWat(waName, waCode))
window.Set("__WA_FMT_CODE__", waFormatCode(waName, waCode))
window.Set("__WA_ERROR__", waGetError())
outWat := waGenerateWat(waName, waCode)
outFmt := waFormatCode(waName, waCode)
window.Set("__WA_WAT__", outWat)
window.Set("__WA_FMT_CODE__", outFmt)
window.Set("__WA_ERROR__", waGetErrorText())
}
// 版权 @2023 凹语言 作者。保留所有权利。
package loader
import (
"bytes"
"encoding/json"
"fmt"
"sort"
"wa-lang.org/wa/internal/ast"
)
func (p *Program) GetPkgPathList() []string {
var ss []string
for k := range p.Pkgs {
ss = append(ss, k)
}
sort.Strings(ss)
return ss
}
func (p *Program) DebugString() string {
var buf bytes.Buffer
fmt.Fprintln(&buf, "Program.Cfg:", jsonString(p.Cfg))
fmt.Fprintln(&buf, "Program.Manifest:", jsonString(p.Manifest))
for _, k := range p.GetPkgPathList() {
fmt.Fprintln(&buf, "PkgPath:", k)
for _, f := range p.Pkgs[k].Files {
fmt.Fprintln(&buf, "File:", f.Name.Name)
ast.Fprint(&buf, p.Fset, f, ast.NotNilFilter)
}
}
return buf.String()
}
func jsonString(x interface{}) string {
d, _ := json.MarshalIndent(x, "", " ")
return string(d)
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册