diff options
author | Himbeer <himbeer@disroot.org> | 2024-08-30 11:45:11 +0200 |
---|---|---|
committer | Himbeer <himbeer@disroot.org> | 2024-08-30 11:45:11 +0200 |
commit | 4bfdd92015153c79c7a069c085b5fb0e4cc6bfaf (patch) | |
tree | 3d29f9adb1959a684c96952476f6540d271ed0b8 /generate.go | |
parent | 479ae18be6a21f71090e2f25435f585846de152c (diff) |
Implement function calls
Diffstat (limited to 'generate.go')
-rw-r--r-- | generate.go | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/generate.go b/generate.go index 317e11c..3e21a0c 100644 --- a/generate.go +++ b/generate.go @@ -378,3 +378,24 @@ func (n *numberExpr) generate(w io.Writer) (string, error) { return fmt.Sprintf("%d", num), nil } + +func (c *callExpr) generate(w io.Writer) (string, error) { + ret := allocReg() + + fmt.Fprintf(w, "%s =w call $%s(", ret, c.funcName) + + delim := "" + for arg := c.args; arg != nil; arg = arg.next { + reg, err := arg.value.generate(w) + if err != nil { + return "", err + } + + fmt.Fprintf(w, "w %s%s", reg, delim) + delim = "," + } + + fmt.Fprintf(w, ")\n") + + return ret, nil +} |