提交 114ffcaa 编写于 作者: 3 3dgen

wa程序添加 cir 指令,打印c输出。仅用于测试

上级 de61126a
......@@ -18,6 +18,7 @@ import (
"time"
"github.com/wa-lang/wa/internal/ast"
"github.com/wa-lang/wa/internal/backends/compiler_c"
"github.com/wa-lang/wa/internal/backends/compiler_ll"
"github.com/wa-lang/wa/internal/backends/compiler_ll/builtin"
"github.com/wa-lang/wa/internal/config"
......@@ -278,6 +279,21 @@ func (p *App) SSA(filename string) error {
return nil
}
func (p *App) CIR(filename string) error {
cfg := config.DefaultConfig()
prog, err := loader.LoadProgram(cfg, filename)
if err != nil {
return err
}
var c compiler_c.CompilerC
c.CompilePackage(prog.SSAMainPkg)
print("\n\n")
print(c.String())
return nil
}
func (p *App) ASM(filename string) error {
cfg := config.DefaultConfig()
prog, err := loader.LoadProgram(cfg, filename)
......
......@@ -18,8 +18,8 @@ import (
type functionGenerator struct {
compiler *CompilerC
locals map[ssa.Value]cir.Var
localID int
locals map[ssa.Value]cir.Var
cur_local_id int
params []cir.VarDecl
var_cur_block cir.Expr
......@@ -524,8 +524,8 @@ func (g *functionGenerator) genPhi(inst *ssa.Phi) {
}
func (g *functionGenerator) genRegister() string {
defer func() { g.localID++ }()
return "$T_" + strconv.Itoa(g.localID)
defer func() { g.cur_local_id++ }()
return "$T_" + strconv.Itoa(g.cur_local_id)
}
func (g *functionGenerator) genReturn(inst *ssa.Return) {
......
......@@ -214,6 +214,24 @@ func main() {
return nil
},
},
{
Name: "cir",
Usage: "print cir code",
Action: func(c *cli.Context) error {
if c.NArg() == 0 {
fmt.Fprintf(os.Stderr, "no input file")
os.Exit(1)
}
ctx := app.NewApp(build_Options(c))
err := ctx.CIR(c.Args().First())
if err != nil {
fmt.Println(err)
os.Exit(1)
}
return nil
},
},
{
Name: "asm",
Usage: "parse Wa and print ouput assembly code",
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册