- Subject: Re: problems with upgrade to 0.99.19 (was Re: More patches)
- From: "G. Milde" <milde@xxxxxxxxxxxxxxxxxxxxx>
- Date: Tue, 27 May 2008 11:19:26 +0200
On 26.05.08, J�rg Sommer wrote:
> "G. Milde" <milde@xxxxxxxxxxxxxxxxxxxxx> wrote:
> >> 2008-05-25 16:46 Jed 0.99.19-138 (utf8), S-Lang 2.1.3, Emulation 'emacs'
> >> test_files in '/usr/share/jed/jed-extra/tests' matching '^[^.].*\.sl$': testing 20 files|dirs
> >> ch_table-test.sl:
> >> E: 'Open failed' Unable to load /usr/share/jed/jed-extra/unittest.slc in require() /usr/share/slsh/require.sl
> >> csvutils-test.sl:
...
> The problem is your require() call in the test files.
...
> Because you load your test files in a namespace, the feature is looked up
> in this namespace and not in the Global namespace or the namespace of the
> unittest file.
While in Jed 0.99.18 the feature is registered and searched without a
namespace specifier (`private define pop_feature_namespace (nargs)` is
new in slsh's require.sl).
Conclusion: even a plain
require("<feature>");
is not always sure to work the same in 0.99.18 and 0.99.19.
I understand that the behaviour in 0.99.18 is suboptimal, as it may
happen that
* a file providing <feature> is loaded in a "named namespace" while
* the <feature> is registered Globally.
Accessing functions that are provided by <feature> from another
namespace or Global will then fail.
> So your provide should put the feature in the Global namespace
IMO the namespace argument to provide() is not "the right way". If I
write
provide("<feature>", "Global");
this would recreate the problem with possible loading into a
different namespace but Globally registered <feature> from 0.99.18.
Care should be taken with the relative placement of the provide() and
implements() or use_namespace() commands:
implements("foo");
provide("bar");
provides the feature "foo.bar", while
provide("bar");
implements("foo");
provides the feature "bar".
(I'll have to screen all my modes for proper implementation. :-( )
> and the require should look there or your require should look in the
> namespace of the unittest file.
Unfortunately, both
require("<feature>", "Global");
and
provide("<feature>", "Global");
are not backwards compatible with Jed <= 0.99.18.
So, one of the compatibility hacks:
#if (_jed_version <= 9918)
require("unittest");
#else
require("unittest", "Global");
#endif
or
try:
require("unittest", "Global");
except ....
require("unittest");
will be needed.
GM
--------------------------
To unsubscribe send email to <jed-users-request@xxxxxxxxxxx> with
the word "unsubscribe" in the message body.
Need help? Email <jed-users-owner@xxxxxxxxxxx>.
[2008 date index]
[2008 thread index]
[Thread Prev] [Thread Next]
[Date Prev] [Date Next]