Improved ssa compiler
All checks were successful
/ test (push) Successful in 15s

This commit is contained in:
Eduard Urbach 2025-07-02 16:55:24 +02:00
parent c9c6b94c18
commit 3301cf5542
Signed by: akyoto
GPG key ID: 49226B848C78F6C8
49 changed files with 690 additions and 262 deletions

View file

@ -1,20 +1,19 @@
package ssa
import (
"fmt"
"strconv"
"strings"
"git.urbach.dev/cli/q/src/types"
)
type Return struct {
Id
Arguments
Source
NoLiveness
}
func (a *Return) AddUse(user Value) { panic("return is not a value") }
func (a *Return) Alive() int { return 0 }
func (a *Return) Equals(v Value) bool {
b, sameType := v.(*Return)
@ -39,18 +38,43 @@ func (v *Return) IsConst() bool {
return false
}
func (v *Return) Debug() string {
if len(v.Arguments) == 0 {
return "return"
}
tmp := strings.Builder{}
tmp.WriteString("return ")
for i, arg := range v.Arguments {
tmp.WriteString("%")
tmp.WriteString(strconv.Itoa(arg.ID()))
if i != len(v.Arguments)-1 {
tmp.WriteString(", ")
}
}
return tmp.String()
}
func (v *Return) String() string {
if len(v.Arguments) == 0 {
return "return"
}
args := make([]string, 0, len(v.Arguments))
tmp := strings.Builder{}
tmp.WriteString("return ")
for _, arg := range v.Arguments {
args = append(args, arg.String())
for i, arg := range v.Arguments {
tmp.WriteString(arg.String())
if i != len(v.Arguments)-1 {
tmp.WriteString(", ")
}
}
return fmt.Sprintf("return %s", strings.Join(args, ", "))
return tmp.String()
}
func (v *Return) Type() types.Type {