* Emacs modules 25.1
[not found] <709716874.935191.1474913256978.ref@mail.yahoo.com>
@ 2016-09-26 18:07 ` Mambo Levis
2016-09-27 12:23 ` Mambo Levis
0 siblings, 1 reply; 4+ messages in thread
From: Mambo Levis @ 2016-09-26 18:07 UTC (permalink / raw)
To: help-gnu-emacs@gnu.org, johnw@newartisans.com,
bozhidar@batsov.com
Hi,
I tested (in Windows) the example from Aurélien Aptel (http://diobla.info/blog-archive/modules-tut.html) with gcc at it runs as expected.
Now, I would like to create a C++ wrapper, but I not quite sure if it is possible. Questions:
1. Is it possible to create a C++ wrapper around emacs_modules?2. I am trying to build the same example using g++ and the following error appears:
---------------------------------------------------------------------------------------------------------------$ make SO=dllg++ -ggdb3 -ID:\user\emacs-src\emacs-25-branch-src/src -c mymod.cmymod.c: In function 'int emacs_module_init(emacs_runtime*)':mymod.c:55:45: error: invalid conversion from 'emacs_value_tag* (*)(emacs_env*, int, emacs_value_tag**, void*) {aka emacs_value_tag* (*)(emacs_env_25*, int, emacs_value_tag**, void*)}' to 'emacs_value_tag* (*)(emacs_env*, ptrdiff_t, emacs_value_tag**, void*) {aka emacs_value_tag* (*)(emacs_env_25*, long long int, emacs_value_tag**, void*)}' [-fpermissive] NULL); ^Makefile:42: recipe for target 'mymod.o' failedmake: *** [mymod.o] Error 1
---------------------------------------------------------------------------------------------------------------
It corresponds to the following code (I remarked the part associated with the error)
-------------------------------------------------------------------------------------------------------intemacs_module_init (struct emacs_runtime *ert){ emacs_env *env = ert->get_environment (ert);
/* create a lambda (returns an emacs_value) */ emacs_value fun = env->make_function (env, 0, 0, Fmymod_test, "doc", NULL); bind_function (env, "mymod-test", fun); provide (env, "mymod");
/* loaded successfully */ return 0;}
-----------------------------------------------------------------------------------------------------------
Do you have any Idea or recommendation?
Thanks,
Levis
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Emacs modules 25.1
2016-09-26 18:07 ` Emacs modules 25.1 Mambo Levis
@ 2016-09-27 12:23 ` Mambo Levis
2016-09-27 14:55 ` Eli Zaretskii
2016-09-27 15:36 ` Philipp Stephani
0 siblings, 2 replies; 4+ messages in thread
From: Mambo Levis @ 2016-09-27 12:23 UTC (permalink / raw)
To: Mambo Levis, help-gnu-emacs@gnu.org, johnw@newartisans.com,
bozhidar@batsov.com
Hi,
I found the problem and now I can build the emacs_module example using g++.
That's means that I eventually can create a c++ wrapper, but I would like to listen to your advice because I don't knowif there is a fundamental issue that I'm ignoring. So, only one question is still open?
1. Is it possible to create a C++ wrapper around emacs_modules and what are the implications?
Thanks,
Levis
On Monday, September 26, 2016 8:07 PM, Mambo Levis <mambo.levis@gmail.com> wrote:
Hi,
I tested (in Windows) the example from Aurélien Aptel (http://diobla.info/blog-archive/modules-tut.html) with gcc at it runs as expected.
Now, I would like to create a C++ wrapper, but I not quite sure if it is possible. Questions:
1. Is it possible to create a C++ wrapper around emacs_modules?2. I am trying to build the same example using g++ and the following error appears:
---------------------------------------------------------------------------------------------------------------$ make SO=dllg++ -ggdb3 -ID:\user\emacs-src\emacs-25-branch-src/src -c mymod.cmymod.c: In function 'int emacs_module_init(emacs_runtime*)':mymod.c:55:45: error: invalid conversion from 'emacs_value_tag* (*)(emacs_env*, int, emacs_value_tag**, void*) {aka emacs_value_tag* (*)(emacs_env_25*, int, emacs_value_tag**, void*)}' to 'emacs_value_tag* (*)(emacs_env*, ptrdiff_t, emacs_value_tag**, void*) {aka emacs_value_tag* (*)(emacs_env_25*, long long int, emacs_value_tag**, void*)}' [-fpermissive] NULL); ^Makefile:42: recipe for target 'mymod.o' failedmake: *** [mymod.o] Error 1
---------------------------------------------------------------------------------------------------------------
It corresponds to the following code (I remarked the part associated with the error)
-------------------------------------------------------------------------------------------------------intemacs_module_init (struct emacs_runtime *ert){ emacs_env *env = ert->get_environment (ert);
/* create a lambda (returns an emacs_value) */ emacs_value fun = env->make_function (env, 0, 0, Fmymod_test, "doc", NULL); bind_function (env, "mymod-test", fun); provide (env, "mymod");
/* loaded successfully */ return 0;}
-----------------------------------------------------------------------------------------------------------
Do you have any Idea or recommendation?
Thanks,
Levis
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Emacs modules 25.1
2016-09-27 12:23 ` Mambo Levis
@ 2016-09-27 14:55 ` Eli Zaretskii
2016-09-27 15:36 ` Philipp Stephani
1 sibling, 0 replies; 4+ messages in thread
From: Eli Zaretskii @ 2016-09-27 14:55 UTC (permalink / raw)
To: help-gnu-emacs
> Date: Tue, 27 Sep 2016 12:23:08 +0000 (UTC)
> From: Mambo Levis <mambo.levis@gmail.com>
>
> 1. Is it possible to create a C++ wrapper around emacs_modules and what are the implications?
I don't think I understand what you are asking, since C++ is a
superset of C.
Or maybe I don't understand what is a "C++ wrapper around
emacs_modules", in this context.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Emacs modules 25.1
2016-09-27 12:23 ` Mambo Levis
2016-09-27 14:55 ` Eli Zaretskii
@ 2016-09-27 15:36 ` Philipp Stephani
1 sibling, 0 replies; 4+ messages in thread
From: Philipp Stephani @ 2016-09-27 15:36 UTC (permalink / raw)
To: Mambo Levis, help-gnu-emacs@gnu.org, johnw@newartisans.com,
bozhidar@batsov.com
Mambo Levis <mambo.levis@gmail.com> schrieb am Di., 27. Sep. 2016 um
14:26 Uhr:
> Hi,
> I found the problem and now I can build the emacs_module example using g++.
> That's means that I eventually can create a c++ wrapper, but I would like
> to listen to your advice because I don't knowif there is a fundamental
> issue that I'm ignoring. So, only one question is still open?
> 1. Is it possible to create a C++ wrapper around emacs_modules and what
> are the implications?
>
Yes, it's possible. The main implication is that you need to translate
between C++ exceptions and Lisp signals. In particular, any function called
from Emacs (emacs_module_init, functions registered via make_function) need
to surround their body with
try {
// ...
} catch (...) {
// ...
}
The module API makes an attempt to prevent leaking exceptions out of C++
code by forcing module functions to be declared noexcept, however this
causes any uncaught exception to crash Emacs, so you'll probably want to
catch and handle them.
Not required, but probably useful, is to also perform the translation in
the opposite direction: When a non-local Lisp exit happens, throw a C++
exception.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2016-09-27 15:36 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <709716874.935191.1474913256978.ref@mail.yahoo.com>
2016-09-26 18:07 ` Emacs modules 25.1 Mambo Levis
2016-09-27 12:23 ` Mambo Levis
2016-09-27 14:55 ` Eli Zaretskii
2016-09-27 15:36 ` Philipp Stephani
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).