aboutsummaryrefslogtreecommitdiff
path: root/generate.go
diff options
context:
space:
mode:
authorHimbeer <himbeer@disroot.org>2024-08-30 22:27:48 +0200
committerHimbeer <himbeer@disroot.org>2024-08-30 22:27:48 +0200
commitbb80a9c772b077bdc7173055e88c3e9f8bb1c35b (patch)
treedaf2a813e4d33983a0eeab7f78f190da6c6f3eac /generate.go
parent4019e81876fdceccf2db58182160d996546adaa5 (diff)
Allow the use of local variables in expressions
Diffstat (limited to 'generate.go')
-rw-r--r--generate.go15
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
+}