continue cmd

This commit is contained in:
Robin 2025-01-21 20:57:51 +01:00
parent ad486b7900
commit 28d464f318
2 changed files with 22 additions and 1 deletions

View File

@ -15,7 +15,7 @@ func toAsmOperand(op ttir.Operand) Operand {
} }
} }
func CgProgram(prog ttir.Program) Program { func CgProgram(prog *ttir.Program) Program {
funcs := make([]Function, 0) funcs := make([]Function, 0)
for _, f := range prog.Functions { for _, f := range prog.Functions {

View File

@ -8,9 +8,11 @@ import (
"path/filepath" "path/filepath"
"strings" "strings"
"robaertschi.xyz/robaertschi/tt/asm/amd64"
"robaertschi.xyz/robaertschi/tt/lexer" "robaertschi.xyz/robaertschi/tt/lexer"
"robaertschi.xyz/robaertschi/tt/parser" "robaertschi.xyz/robaertschi/tt/parser"
"robaertschi.xyz/robaertschi/tt/token" "robaertschi.xyz/robaertschi/tt/token"
"robaertschi.xyz/robaertschi/tt/ttir"
"robaertschi.xyz/robaertschi/tt/typechecker" "robaertschi.xyz/robaertschi/tt/typechecker"
) )
@ -34,6 +36,7 @@ func main() {
if output == "" { if output == "" {
output = strings.TrimRight(input, filepath.Ext(input)) output = strings.TrimRight(input, filepath.Ext(input))
} }
asmOutputName := strings.TrimRight(input, filepath.Ext(input)) + ".asm"
file, err := os.Open(input) file, err := os.Open(input)
if err != nil { if err != nil {
@ -76,4 +79,22 @@ func main() {
fmt.Printf("Typechecker failed with %e\n", err) fmt.Printf("Typechecker failed with %e\n", err)
os.Exit(1) os.Exit(1)
} }
ir := ttir.EmitProgram(tprogram)
asm := amd64.CgProgram(ir)
asmOutput := asm.Emit()
asmOutputFile, err := os.Open(asmOutputName)
if err != nil {
fmt.Printf("Failed to open asm file %q because: %e", asmOutputName, err)
os.Exit(1)
}
defer asmOutputFile.Close()
_, err = asmOutputFile.WriteString(asmOutput)
if err != nil {
fmt.Printf("Failed to write to file %q because: %e", asmOutputName, err)
os.Exit(1)
}
} }