Philipp Stephani
schrieb am Fr., 16. Okt. 2015 um
01:15 Uhr:
> I just realized that we need (at least) one more public environment
> function, either "null" or "eq". Otherwise conditions cannot be written in
> module code.
> I'd vote for bool is_not_null, it seems to be the most basic one, and
> doesn't invert the condition.
>
There are still a few open questions:
1. How to represent throw/catch. Currently it's not possible to throw
from modules, but that should change because otherwise modules can't be
transparent. For example, the following couldn't work:
emacs_value top_level = env->intern(env, "top-level");
if (!top_level) return NULL;
return env->funcall(env, top_level, 0, NULL);
because `top-level' uses `throw'.
There are several ways to represent `throw'. My suggestion would still
be to use an enum instead of the bool value for get_error and check_error.
Otherwise the fact that a `throw' has happened has to be encoded somehow in
the error symbol, which to me seems rather hackish and not future-proof.
(What happens if Emacs would ever allow to signal a list?)
2. Whether type_of should return an enum or a symbol. I'd vote for the
symbol, as in Daniel's original design.
3. Can runtime->get_environment ever fail?
4. Some of the function (free_global_ref, the int/float extractors)
don't return emacs_value and have no clear way to signal an error. For
these function the caller always has to use check_error/get_error. Is that
good enough?