[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: debug.getlocal from within return hook
- From: Philipp Janda <siffiejoe@...>
- Date: Wed, 20 May 2015 10:52:58 +0200
Am 20.05.2015 um 08:36 schröbte Dirk Laurie:
2015-05-20 8:17 GMT+02:00 Philipp Janda <email@example.com>:
I'd like to avoid parsing Lua files of possibly different Lua versions and
patching their source code.
One could argue that by definition a program with debug hooks in it
is still under development, and changes to its source code are still
to be expected.
The program doesn't have debug hooks in it, the debug hooks get
installed by a driver program (pretty much like a debugger). The idea is
to write test functions as local functions in the module, side by side
with normal functions. The rationale would be similar to documentation
tools like LDoc: it is supposedly easier to keep them in sync if they
are next to each other. Other advantages would be that you can test
internal functions without messing up the public interface of your
module. Also, if you don't run under the test driver program that
rescues the local test functions via the debug hook, they all vanish
without a trace.
Sure, I could do some arbitrary code transformations by hand (I have to
write the test functions anyway), but this is very error prone: if I
forget, some test functions will silently be skipped, and depending on
the number of tested modules I may not notice. It's even worse if other
people use this testing method, because they probably have no idea why
it isn't working.
Automatically patching the source code during loading on the other hand
would be feasible as long as the line number information doesn't change.
But I'd like to support multiple Lua versions and make the process at
least coworker-proof ...
What I have learnt from this thread is "return hooks give undefined
results when an expression rather than a variable is being returned".
I think I'll patch it into my local copy of $LUA/doc/manual.html.
How did you come to that conclusion?! The issue of this thread
explicitly also applies if you return a local variable, and there is
nothing wrong with a return hook unless you want to query the local
variables of the function that is about to return.