lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]

I have an application where I'm trying to shadow a Lua tree structure with my own dynamic data structures using meta __index and __newindex methods to get data in and out. However when I try to use a named index into a table, I'm not sure how to handle the resulting Lua call to the __index meta method. If I use a numerical index, it calls the __index method with a usable key value. However when I use an alphanumeric index, It calls me with the first argument 'nil'. I had assumed the symantics were similar to lua_next in that it was trying a first/next/next/etc till it found a matching index. But apparently whatever I return it treats as a match and I can't get a desired index name from a nil. e.g.:

LUA release: Lua 5.1.2

pwl.scalar._children = {};
pwl.scalar._my_meta = {};
pwl.scalar._my_meta.__index = _proc_lua_read;
pwl.scalar._my_meta.__newindex = _proc_lua_assignment;
pwl.scalar._my_meta.__gc = _proc_lua_gcollect;
setmetatable (pwl.scalar, pwl.scalar._my_meta);

Then at this point I add an entry to pwl.scalar._children via the C API and then send the following to the LUA interpreter:

pwl.scalar[mainvid]._children = {};

And get the follwing on the LUA stack when the __index method for pwl.scalar is invoked:

LUA-Stack: top/2 entries
 -1 (unknown type = nil)
 -2 (table)
    - index 1
      - (string) `_my_meta'
        - (table)
          - index 1
            - (string) `__gc'
              - (function) `0x2d3fbf'
          - index 2
            - (string) `__newindex'
              - (function) `0x2d3fea'
          - index 3
            - (string) `__index'
              - (function) `0x2d35a5'
    - index 2
      - (string) `_children'
        - (table)
          - index 1
            - (string) `mainvid'
              - (table)
                - index 1
                  - (string) `_pwl_scalar_mainvid'
                    - (unknown type = userdata)
    - index 3
      - (string) `_pwl_scalar'
        - (unknown type = userdata)

Whatever table entry I return, Lua assumes is the 'correct' table, never calls __index again, and performs the above assignment on the result. And if I return anything other than a table type, I get an error. So what does LUA expect or how do I infer the table index Lua wants?

Thanks for any help.
Alan Hightower -