diff options
author | Himbeer <himbeer@disroot.org> | 2024-08-30 22:27:48 +0200 |
---|---|---|
committer | Himbeer <himbeer@disroot.org> | 2024-08-30 22:27:48 +0200 |
commit | bb80a9c772b077bdc7173055e88c3e9f8bb1c35b (patch) | |
tree | daf2a813e4d33983a0eeab7f78f190da6c6f3eac /generate.go | |
parent | 4019e81876fdceccf2db58182160d996546adaa5 (diff) |
Allow the use of local variables in expressions
Diffstat (limited to 'generate.go')
-rw-r--r-- | generate.go | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/generate.go b/generate.go index 187ec8f..5701cb1 100644 --- a/generate.go +++ b/generate.go @@ -476,3 +476,18 @@ func (c *callExpr) generate(w io.Writer) (string, error) { return ret, nil } + +func (v *varExpr) generate(w io.Writer) (string, error) { + ok, mutable := isDeclared(v.name, false) + if !ok { + return "", errUndeclared{name: v.name, line: v.line()} + } + + if mutable { + reg := allocReg() + fmt.Fprintf(w, "%s =w loadl %%%s\n", reg, v.name) + return reg, nil + } + + return localConsts[currentFunc][v.name], nil +} |