Skip to content

Commit 9cf0d4b

Browse files
Properly note used registers in some cases. Fixes #16
1 parent da1d0a6 commit 9cf0d4b

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

compile_expr.go

+15-3
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,11 @@ func lowerIdent(n ast.Expr, state *compState, reg int) (identData, int) {
154154
switch nObj := nn.Obj.(type) {
155155
case *ast.TableAccessor:
156156
lowerIdentHelper(nObj, state, data)
157-
data.keyRK, _ = expr(nn.Key, state, reg+1, false).RK()
157+
usedreg := false
158+
data.keyRK, usedreg = expr(nn.Key, state, reg+1, false).RK()
159+
if usedreg {
160+
return *data, 2
161+
}
158162
return *data, 1
159163
case *ast.ConstIdent:
160164
regs := 1
@@ -188,11 +192,19 @@ func lowerIdent(n ast.Expr, state *compState, reg int) (identData, int) {
188192
return *data, regs
189193
case *ast.Parens:
190194
expr(nObj.Inner, state, data.reg, false).To(false)
191-
data.keyRK, _ = expr(nn.Key, state, reg+1, false).RK()
195+
usedreg := false
196+
data.keyRK, usedreg = expr(nn.Key, state, reg+1, false).RK()
197+
if usedreg {
198+
return *data, 2
199+
}
192200
return *data, 1
193201
case *ast.FuncCall:
194202
expr(nObj, state, data.reg, false).To(false)
195-
data.keyRK, _ = expr(nn.Key, state, reg+1, false).RK()
203+
usedreg := false
204+
data.keyRK, usedreg = expr(nn.Key, state, reg+1, false).RK()
205+
if usedreg {
206+
return *data, 2
207+
}
196208
return *data, 1
197209
default:
198210
luautil.Raise("Syntax error", luautil.ErrTypGenSyntax) // TODO: Better errors

0 commit comments

Comments
 (0)