This commit is contained in:
parent
bdb1b9595f
commit
4aa4d613a1
12 changed files with 58 additions and 85 deletions
|
@ -13,12 +13,9 @@ func showSSA(root *core.Function) {
|
|||
ansi.Yellow.Println(f.UniqueName + ":")
|
||||
|
||||
for _, block := range f.Blocks {
|
||||
// ansi.Dim.Printf("| %-3s | %-30s | %-30s | %-4s |\n", "ID", "Raw", "Type", "Uses")
|
||||
// ansi.Dim.Printf("| %s | %s | %s | %s |\n", strings.Repeat("-", 3), strings.Repeat("-", 30), strings.Repeat("-", 30), strings.Repeat("-", 4))
|
||||
|
||||
for i, instr := range block.Instructions {
|
||||
ansi.Dim.Printf("%%%-1d = ", i)
|
||||
fmt.Printf("%-30s ", instr.Debug())
|
||||
fmt.Printf("%-30s ", instr.Debug(false))
|
||||
ansi.Dim.Printf(" %-30s", instr.Type().Name())
|
||||
fmt.Println()
|
||||
}
|
||||
|
|
|
@ -43,12 +43,16 @@ func (v *BinaryOp) IsConst() bool {
|
|||
return true
|
||||
}
|
||||
|
||||
func (v *BinaryOp) Debug() string {
|
||||
func (v *BinaryOp) Debug(expand bool) string {
|
||||
if expand {
|
||||
return fmt.Sprintf("%s %s %s", v.Left, expression.Operators[v.Op].Symbol, v.Right)
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%%%d %s %%%d", v.Left.ID(), expression.Operators[v.Op].Symbol, v.Right.ID())
|
||||
}
|
||||
|
||||
func (v *BinaryOp) String() string {
|
||||
return fmt.Sprintf("%s %s %s", v.Left, expression.Operators[v.Op].Symbol, v.Right)
|
||||
return v.Debug(true)
|
||||
}
|
||||
|
||||
func (v *BinaryOp) Type() types.Type {
|
||||
|
|
|
@ -32,7 +32,7 @@ func (v *Bytes) IsConst() bool {
|
|||
return true
|
||||
}
|
||||
|
||||
func (v *Bytes) Debug() string {
|
||||
func (v *Bytes) Debug(expand bool) string {
|
||||
return v.String()
|
||||
}
|
||||
|
||||
|
|
|
@ -28,16 +28,26 @@ func (v *Call) IsConst() bool {
|
|||
return false
|
||||
}
|
||||
|
||||
func (v *Call) Debug() string {
|
||||
func (v *Call) Debug(expand bool) string {
|
||||
tmp := strings.Builder{}
|
||||
tmp.WriteString("%")
|
||||
tmp.WriteString(strconv.Itoa(v.Arguments[0].ID()))
|
||||
|
||||
if expand {
|
||||
tmp.WriteString(v.Arguments[0].String())
|
||||
} else {
|
||||
tmp.WriteString("%")
|
||||
tmp.WriteString(strconv.Itoa(v.Arguments[0].ID()))
|
||||
}
|
||||
|
||||
tmp.WriteString("(")
|
||||
args := v.Arguments[1:]
|
||||
|
||||
for i, arg := range args {
|
||||
tmp.WriteString("%")
|
||||
tmp.WriteString(strconv.Itoa(arg.ID()))
|
||||
if expand {
|
||||
tmp.WriteString(arg.String())
|
||||
} else {
|
||||
tmp.WriteString("%")
|
||||
tmp.WriteString(strconv.Itoa(arg.ID()))
|
||||
}
|
||||
|
||||
if i != len(args)-1 {
|
||||
tmp.WriteString(", ")
|
||||
|
@ -49,21 +59,7 @@ func (v *Call) Debug() string {
|
|||
}
|
||||
|
||||
func (v *Call) String() string {
|
||||
tmp := strings.Builder{}
|
||||
tmp.WriteString(v.Arguments[0].String())
|
||||
tmp.WriteString("(")
|
||||
args := v.Arguments[1:]
|
||||
|
||||
for i, arg := range args {
|
||||
tmp.WriteString(arg.String())
|
||||
|
||||
if i != len(args)-1 {
|
||||
tmp.WriteString(", ")
|
||||
}
|
||||
}
|
||||
|
||||
tmp.WriteString(")")
|
||||
return tmp.String()
|
||||
return v.Debug(true)
|
||||
}
|
||||
|
||||
func (v *Call) Type() types.Type {
|
||||
|
|
|
@ -29,7 +29,7 @@ func (v *Function) IsConst() bool {
|
|||
return true
|
||||
}
|
||||
|
||||
func (v *Function) Debug() string {
|
||||
func (v *Function) Debug(expand bool) string {
|
||||
return v.String()
|
||||
}
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ func (v *Int) IsConst() bool {
|
|||
return true
|
||||
}
|
||||
|
||||
func (v *Int) Debug() string {
|
||||
func (v *Int) Debug(expand bool) string {
|
||||
return v.String()
|
||||
}
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ func (v *Parameter) IsConst() bool {
|
|||
return true
|
||||
}
|
||||
|
||||
func (v *Parameter) Debug() string {
|
||||
func (v *Parameter) Debug(expand bool) string {
|
||||
return v.String()
|
||||
}
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ func (v *Return) IsConst() bool {
|
|||
return false
|
||||
}
|
||||
|
||||
func (v *Return) Debug() string {
|
||||
func (v *Return) Debug(expand bool) string {
|
||||
if len(v.Arguments) == 0 {
|
||||
return "return"
|
||||
}
|
||||
|
@ -47,8 +47,12 @@ func (v *Return) Debug() string {
|
|||
tmp.WriteString("return ")
|
||||
|
||||
for i, arg := range v.Arguments {
|
||||
tmp.WriteString("%")
|
||||
tmp.WriteString(strconv.Itoa(arg.ID()))
|
||||
if expand {
|
||||
tmp.WriteString(arg.String())
|
||||
} else {
|
||||
tmp.WriteString("%")
|
||||
tmp.WriteString(strconv.Itoa(arg.ID()))
|
||||
}
|
||||
|
||||
if i != len(v.Arguments)-1 {
|
||||
tmp.WriteString(", ")
|
||||
|
@ -59,22 +63,7 @@ func (v *Return) Debug() string {
|
|||
}
|
||||
|
||||
func (v *Return) String() string {
|
||||
if len(v.Arguments) == 0 {
|
||||
return "return"
|
||||
}
|
||||
|
||||
tmp := strings.Builder{}
|
||||
tmp.WriteString("return ")
|
||||
|
||||
for i, arg := range v.Arguments {
|
||||
tmp.WriteString(arg.String())
|
||||
|
||||
if i != len(v.Arguments)-1 {
|
||||
tmp.WriteString(", ")
|
||||
}
|
||||
}
|
||||
|
||||
return tmp.String()
|
||||
return v.Debug(true)
|
||||
}
|
||||
|
||||
func (v *Return) Type() types.Type {
|
||||
|
|
|
@ -29,14 +29,18 @@ func (v *Struct) IsConst() bool {
|
|||
return true
|
||||
}
|
||||
|
||||
func (v *Struct) Debug() string {
|
||||
func (v *Struct) Debug(expand bool) string {
|
||||
tmp := strings.Builder{}
|
||||
tmp.WriteString(v.Typ.Name())
|
||||
tmp.WriteString("{")
|
||||
|
||||
for i, arg := range v.Arguments {
|
||||
tmp.WriteString("%")
|
||||
tmp.WriteString(strconv.Itoa(arg.ID()))
|
||||
if expand {
|
||||
tmp.WriteString(arg.String())
|
||||
} else {
|
||||
tmp.WriteString("%")
|
||||
tmp.WriteString(strconv.Itoa(arg.ID()))
|
||||
}
|
||||
|
||||
if i != len(v.Arguments)-1 {
|
||||
tmp.WriteString(", ")
|
||||
|
@ -48,20 +52,7 @@ func (v *Struct) Debug() string {
|
|||
}
|
||||
|
||||
func (v *Struct) String() string {
|
||||
tmp := strings.Builder{}
|
||||
tmp.WriteString(v.Typ.Name())
|
||||
tmp.WriteString("{")
|
||||
|
||||
for i, arg := range v.Arguments {
|
||||
tmp.WriteString(arg.String())
|
||||
|
||||
if i != len(v.Arguments)-1 {
|
||||
tmp.WriteString(", ")
|
||||
}
|
||||
}
|
||||
|
||||
tmp.WriteString("}")
|
||||
return tmp.String()
|
||||
return v.Debug(false)
|
||||
}
|
||||
|
||||
func (v *Struct) Type() types.Type {
|
||||
|
|
|
@ -32,12 +32,16 @@ func (v *StructField) IsConst() bool {
|
|||
return true
|
||||
}
|
||||
|
||||
func (v *StructField) Debug() string {
|
||||
func (v *StructField) Debug(expand bool) string {
|
||||
if expand {
|
||||
return fmt.Sprintf("%s.%s", v.Struct, v.Field)
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%%%d.%s", v.Struct.ID(), v.Field)
|
||||
}
|
||||
|
||||
func (v *StructField) String() string {
|
||||
return fmt.Sprintf("%s.%s", v.Struct, v.Field)
|
||||
return v.Debug(true)
|
||||
}
|
||||
|
||||
func (v *StructField) Type() types.Type {
|
||||
|
|
|
@ -28,13 +28,17 @@ func (v *Syscall) IsConst() bool {
|
|||
return false
|
||||
}
|
||||
|
||||
func (v *Syscall) Debug() string {
|
||||
func (v *Syscall) Debug(expand bool) string {
|
||||
tmp := strings.Builder{}
|
||||
tmp.WriteString("syscall(")
|
||||
|
||||
for i, arg := range v.Arguments {
|
||||
tmp.WriteString("%")
|
||||
tmp.WriteString(strconv.Itoa(arg.ID()))
|
||||
if expand {
|
||||
tmp.WriteString(arg.String())
|
||||
} else {
|
||||
tmp.WriteString("%")
|
||||
tmp.WriteString(strconv.Itoa(arg.ID()))
|
||||
}
|
||||
|
||||
if i != len(v.Arguments)-1 {
|
||||
tmp.WriteString(", ")
|
||||
|
@ -46,19 +50,7 @@ func (v *Syscall) Debug() string {
|
|||
}
|
||||
|
||||
func (v *Syscall) String() string {
|
||||
tmp := strings.Builder{}
|
||||
tmp.WriteString("syscall(")
|
||||
|
||||
for i, arg := range v.Arguments {
|
||||
tmp.WriteString(arg.String())
|
||||
|
||||
if i != len(v.Arguments)-1 {
|
||||
tmp.WriteString(", ")
|
||||
}
|
||||
}
|
||||
|
||||
tmp.WriteString(")")
|
||||
return tmp.String()
|
||||
return v.Debug(true)
|
||||
}
|
||||
|
||||
func (v *Syscall) Type() types.Type {
|
||||
|
|
|
@ -7,7 +7,7 @@ import (
|
|||
|
||||
type Value interface {
|
||||
// Essentials
|
||||
Debug() string
|
||||
Debug(bool) string
|
||||
ID() int
|
||||
IsConst() bool
|
||||
SetID(int)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue