lua-users home
lua-l archive

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

On 29 Jun 2006, at 11:34, D Burgess wrote:

Carsten Fuchs wrote:
lua_tostring() from my code.

However, I'm wondering why lua_tostring() behaves in this (somewhat
surprising) manner? This makes it different from all the other lua_to*()
functions, and I wonder why this is so??

I guess that the conversion to a string means that the string has to be
allocated and stored somewhere. Numbers and booleans presumably
do not have the allocation issue.

Exactly. The string returned from lua_tostring is only valid whilst there is a corresponding Lua string on the stack. So lua_tostring must put a Lua string somewhere on the stack. And the current implementation overwrites the number with the string.

I'm sure lots of people have been bitten by this behaviour (I know I have). Maybe it would be better if lua_tostring took an additional argument which was the stack slot to overwrite with the Lua string. Then it would be more clear that lua_tostring was doing something a bit different, and if you didn't want to change your number into a string you could do that by specifying a different stack slot. There are other variations that come to mind too.