Report error at source of __newindex call rather than inside __newindex function
error-handling, lua
Solution
You can use the error function and give the `level` parameter:
__newindex = function(t, key, value)
local ok, err = pcall(set_value, t.sprite_number, key, value)
-- level 2 means that the error will be signaled on 2nd stack frame,
-- that is the line at which the key has been set
if not ok then error(err, 2) end
end
Problem
I have a metatable with the following `__newindex` function: ``` __newindex = function(t, key, value) set_value(t.sprite_number, key, value) end ``` This lets me allow users to set "properties" on my lua objects (there's a corresponding `__index` function, but it's not really relevant). `set_value` is a C function. If you try to set the wrong type on a "property," say setting a string value on an integer property, the C code does ``` luaL_error (l, "property must be a number"); ``` This works fine, except the error reported from lua is ``` [string "-- init.lua..."]:10: property must be a number ``` Which is referring to the set_value function call in my __newindex function. This isn't very helpful. I'd like the error to instead point to the place where the wrong value was set, i.e. in the spot where you do ``` object.property = "expects integer" ``` Can I accomplish this somehow?