lua-users home
lua-l archive

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


Hey Wim,

Me again.

So I took my code:

    result = lua_load(itsLuaState, LuaEngineChunkReader, this, "");
    if (result == kNoError)
        lua_call(itsLuaState, 0, 0);

Which works (ie if I pass "print(4)" it'll do so.  I then amend it to:

    result = lua_load(itsLuaState, LuaEngineChunkReader, this,"");
    if (result == kNoError)
        {
        lua_pushstring(itsLuaState, "main");
        lua_gettable(itsLuaState, LUA_GLOBALSINDEX);
        if (lua_isnil(itsLuaState, -1) == false)
            lua_call(itsLuaState, 0, 0);
        }

And amend the text passed to "function main() print(4) end"... And run.

But the top of the stack is indeed nil, so main isn't in the global table?!

Any thoughts?

Thx,
Ando

>> However, what I REALLY want is to have a way to make lua_load NOT add
>> the implied function.  Is there a way to do this?
> 
> No.  Lua 4 did run a loaded chunk at once.  The Lua 5 "two step" approach is
> cleaner.  For example it is perfect for a "dump to bytecode" (to simply
> compile a chunk) but there are other reasons as well.  If you don't need the
> chunk as a function then simply run it:
> 
>   luaL_loadfile(L, my_file_name);
>   lua_call(L, 0, 0);
> 
> (No error checking here...)
> 
> Loading and running the script "function main() ... end" *does* do
> something:  It results in a function that is stored in the "main" field in
> the globals.  If you need it from C later on, here's what you do (assuming
> that "main" is stored in the C globals, which is the default for
> luaL_loadfile):
> 
>   /* retrieve global "main" */
>   lua_pushstring(L, "main");
>   lua_gettable(L, LUA_GLOBALSINDEX);
> 
> The function is now on top of the stack (if it was found of course).  Now
> let's run it:
> 
>   /* push a value arg and run ... */
>   lua_pushnumber(L, 4);
>   lua_call(L, 1, 0);
> 
>> If I'm stuck with this, what is the most efficient way to then call
>> main from my C code, passing a value and being (hopefully) very
>> efficient.
> 
> Manipulating Lua from C as in the example above is really REALLY fast!  I'm
> sure you'll appreciate it when you play around with it some more.  I know I
> do!  :-)
> 
> --
> Wim
> 

-----------------
SpriTec Software
www.spritec.com