Skip to content

Commit

Permalink
table索引从0开始
Browse files Browse the repository at this point in the history
  • Loading branch information
lollipopkit committed Oct 1, 2022
1 parent c4bffd6 commit 48112ea
Show file tree
Hide file tree
Showing 6 changed files with 15 additions and 14 deletions.
2 changes: 1 addition & 1 deletion .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"request": "launch",
"mode": "debug",
"program": ".",
"args": ["-f", "test/basic.lk"]
"args": ["-f", "test/table.lk"]
}
]
}
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,8 @@ if http.listen(':8080', handle) != nil {
- [x] 支持任意对象 Concat `..`
- [ ] Table
- [x] key为StringExp,而不是NameExp
- [x] `=` -> `:`, eg: `{a = 'a'}` -> `{a: 'a'}`
- [x] 构造方式:`=` -> `:`, eg: `{a = 'a'}` -> `{a: 'a'}`
- [x] 索引从 `0` 开始
- [ ] 改变 `metatable` 设置方式
- 编译器
- [x] 自动添加`range` ( `paris` )
Expand Down
18 changes: 9 additions & 9 deletions state/lua_table.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ func (self *luaTable) len() int {
func (self *luaTable) get(key any) any {
key = _floatToInteger(key)
if idx, ok := key.(int64); ok {
if idx >= 1 && idx <= int64(len(self.arr)) {
return self.arr[idx-1]
if idx >= 0 && idx < int64(len(self.arr)) {
return self.arr[idx]
}
}
return self._map[key]
Expand All @@ -73,16 +73,16 @@ func (self *luaTable) put(key, val any) {

self.changed = true
key = _floatToInteger(key)
if idx, ok := key.(int64); ok && idx >= 1 {
if idx, ok := key.(int64); ok && idx >= 0 {
arrLen := int64(len(self.arr))
if idx <= arrLen {
self.arr[idx-1] = val
if idx == arrLen && val == nil {
if idx < arrLen {
self.arr[idx] = val
if idx == arrLen - 1 && val == nil {
self._shrinkArray()
}
return
}
if idx == arrLen+1 {
if idx == arrLen {
delete(self._map, key)
if val != nil {
self.arr = append(self.arr, val)
Expand Down Expand Up @@ -145,8 +145,8 @@ func (self *luaTable) initKeys() {
var key any = nil
for i := range self.arr {
if self.arr[i] != nil {
self.keys[key] = int64(i + 1)
key = int64(i + 1)
self.keys[key] = int64(i)
key = int64(i)
}
}
for k := range self._map {
Expand Down
2 changes: 1 addition & 1 deletion stdlib/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ func pushList(ls LkState, items []any) {
ls.CreateTable(len(items), 0)
for i := range items {
pushValue(ls, items[i])
ls.SetI(-2, int64(i+1))
ls.SetI(-2, int64(i))
}
}

Expand Down
2 changes: 1 addition & 1 deletion test/table.lk
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,4 @@ pri(tb)
tb['d'] = nil
pri(tb)

print(tb[1])
print(tb[0])
2 changes: 1 addition & 1 deletion vm/inst_table.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ func setList(i Instruction, vm LuaVM) {
}

vm.CheckStack(1)
idx := int64(c * LFIELDS_PER_FLUSH)
idx := int64(c * LFIELDS_PER_FLUSH) - 1
for j := 1; j <= b; j++ {
idx++
vm.PushValue(a + j)
Expand Down

0 comments on commit 48112ea

Please sign in to comment.