From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Michael Albinus Newsgroups: gmane.emacs.devel Subject: Re: master e290a7d 2/2: Add module functions to convert from and to big integers. Date: Wed, 24 Apr 2019 18:53:24 +0200 Message-ID: <87k1fj2vln.fsf@gmx.de> References: <20190424105836.8261.48281@vcs0.savannah.gnu.org> <20190424105838.6C364206A7@vcs0.savannah.gnu.org> Mime-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="224401"; mail-complaints-to="usenet@blaine.gmane.org" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) Cc: Philipp Stephani To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Apr 24 18:58:49 2019 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hJLEO-000wEa-Nx for ged-emacs-devel@m.gmane.org; Wed, 24 Apr 2019 18:58:49 +0200 Original-Received: from localhost ([127.0.0.1]:44525 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJLEN-0004rA-F5 for ged-emacs-devel@m.gmane.org; Wed, 24 Apr 2019 12:58:47 -0400 Original-Received: from eggs.gnu.org ([209.51.188.92]:49502) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJLCU-0004OT-23 for emacs-devel@gnu.org; Wed, 24 Apr 2019 12:56:51 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJL9J-0002VV-Hz for emacs-devel@gnu.org; Wed, 24 Apr 2019 12:53:34 -0400 Original-Received: from mout.gmx.net ([212.227.15.15]:42127) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJL9J-0002RW-5y for emacs-devel@gnu.org; Wed, 24 Apr 2019 12:53:33 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1556124807; bh=rEm5Er9BDMGzsChQ0D3OI6AXbqsvqqxQwZElTt8fK6k=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=DLZrM2w/R+LjYFnq6D11WGu/zkFhEqLpJ9p3jxKSILIhNrmFKwryMV0/2ZxTKK+dJ lM9rC1VE58oJ9I2LZpYkHc2/2GTGT+v+3ulLp1pBHKRN/y3fg++xadaFjVFRoz8U3p laCypzK33QHWFjNLv8//JG1es1/8n1WaPtysLES4= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Original-Received: from detlef.gmx.de ([213.220.159.187]) by mail.gmx.com (mrgmx003 [212.227.17.190]) with ESMTPSA (Nemesis) id 0MDQI1-1ha8Xi2MSj-00Gtd4; Wed, 24 Apr 2019 18:53:27 +0200 In-Reply-To: <20190424105838.6C364206A7@vcs0.savannah.gnu.org> (Philipp Stephani's message of "Wed, 24 Apr 2019 06:58:38 -0400 (EDT)") X-Provags-ID: V03:K1:9omUPfYmeyr29vefG8GZcS8ux9KWh0flxGU6kIv7sqF3Uc9eKFJ rvQN/fFyxXexqGjoWpIqbQLW/MaLGMUvOarIHAxw1V5VZu5uwx/lnq6FURAdfZZP1zf33Od 72qJs26yKaz4KMtRQq854SSe4U7FbWa5FZUcP2D/hj3ru7wnodHXEsifd3bJsoi8MyX3vM4 F5VzWC3itkDmaqrErImNA== X-UI-Out-Filterresults: notjunk:1;V03:K0:tQ63rnO/GUw=:Yf7CTAf5XiUQE6REKbtRlz oRlMHUBfbYxTeWYd9dbZ61xlc0TySOTx8aisrMGMSSmNMh2VRTcS3aZey3VDOLarfQEMX4XTm aJGr1Xt4RwgVdupnhlrNXBo3n7FvIesjD5fP24jPcGbqKhKRiwlfxV8vuc8xOuf9MlzuQ26F9 n0c7jkGdvCry8gVQF1o2TTYsqH2nzsPDp1B8H2AHeyyr6Dz+lPA+h9/MFXMaO/I80gHffH0Q3 PrQyaNF2l9Aczu7sl/ey/iDml9/OYNQE34BE+0m/uK57DsSQZuj/0eyvQ5wvWfpPKmqQT44bc 2STPju+ydQ4G7QaqRBn0YqjwEP3j5imF49jOytOwv34QA0F7NaQUqhlPVl/xkz9f1/XKLnqNO 6oLWXAgUacXuXjryaqYVSCmycBz3KoCciDYEcRw7VLhytQXPibnr5MOcodKWghLA7Yps2I5Ti I47I3Ob8AEiu5KW0hvcvBxRwcCFktdsEzEk2hGcY7BR1v1noBDsLL9LmYp0o6actusddpTmsV ++Hzj1G11qO9JSoMvJq0XMxwLsDzFkZzwSV4TZifMg3UXpa+b9ZvdfSHVWBCTX8edEoFVdlKq qn7Iu4hWW8Cf+iXQkR1gxcpdBr/q8tqe1EFRw8jQwz+SL2rW3yBZpTmUwDAiJP2cUeBpK/s6b QGtg9ksFJ2FUmw1ZEYD9mbMigIaQQTz6RiMNQrnSWmCRscj8HeBM7Rn0hN/ApsVP+wD4fA4X0 3S6vIFRNr8FnEbVTmNU3oUHXrsECTIJzbawzSTtOmYitn5iiHdsKsRRd+i0j7g72bLMDut38 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 212.227.15.15 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:235867 Archived-At: p.stephani2@gmail.com (Philipp Stephani) writes: > diff --git a/src/emacs-module.h.in b/src/emacs-module.h.in > index bfbe226..e61aadf 100644 > --- a/src/emacs-module.h.in > +++ b/src/emacs-module.h.in > @@ -28,6 +28,10 @@ along with GNU Emacs. If not, see . */ > #include > #endif > > +#ifdef EMACS_MODULE_GMP > +#include > +#endif > + This fails on hydra: =2D-8<---------------cut here---------------start------------->8--- In file included from lisp.h:4155:0, from dispnew.c:27: emacs-module.h:32:10: fatal error: gmp.h: No such file or directory #include ^~~~~~~ =2D-8<---------------cut here---------------end--------------->8--- See for example Best regards, Michael. > #if defined __cplusplus && __cplusplus >=3D 201103L > # define EMACS_NOEXCEPT noexcept > #else > @@ -94,6 +98,12 @@ enum emacs_process_input_result > emacs_process_input_quit =3D 1 > }; > > +#ifdef EMACS_MODULE_GMP > +struct emacs_mpz { mpz_t value; }; > +#else > +struct emacs_mpz; /* no definition */ > +#endif > + > struct emacs_env_25 > { > @module_env_snippet_25@ > diff --git a/src/lisp.h b/src/lisp.h > index d803f16..703fe76 100644 > --- a/src/lisp.h > +++ b/src/lisp.h > @@ -4151,6 +4151,7 @@ extern void *unexec_realloc (void *, size_t); > extern void unexec_free (void *); > #endif > > +#define EMACS_MODULE_GMP > #include "emacs-module.h" > > /* Function prototype for the module Lisp functions. */ > diff --git a/src/module-env-27.h b/src/module-env-27.h > index e63843f..00de300 100644 > --- a/src/module-env-27.h > +++ b/src/module-env-27.h > @@ -8,3 +8,11 @@ > > emacs_value (*make_time) (emacs_env *env, struct timespec time) > EMACS_ATTRIBUTE_NONNULL (1); > + > + void (*extract_big_integer) (emacs_env *env, emacs_value value, > + struct emacs_mpz *result) > + EMACS_ATTRIBUTE_NONNULL (1, 3); > + > + emacs_value (*make_big_integer) (emacs_env *env, > + const struct emacs_mpz *value) > + EMACS_ATTRIBUTE_NONNULL (1, 2); > diff --git a/test/data/emacs-module/mod-test.c b/test/data/emacs-module/= mod-test.c > index dbdbfec..85a7f28 100644 > --- a/test/data/emacs-module/mod-test.c > +++ b/test/data/emacs-module/mod-test.c > @@ -27,8 +27,11 @@ along with GNU Emacs. If not, see . */ > #include > #include > > +#define EMACS_MODULE_GMP > #include > > +#include > + > #include "timespec.h" > > int plugin_is_GPL_compatible; > @@ -378,6 +381,21 @@ Fmod_test_add_nanosecond (emacs_env *env, ptrdiff_t= nargs, emacs_value *args, > return env->make_time (env, time); > } > > +static emacs_value > +Fmod_test_double (emacs_env *env, ptrdiff_t nargs, emacs_value *args, > + void *data) > +{ > + assert (nargs =3D=3D 1); > + emacs_value arg =3D args[0]; > + struct emacs_mpz value; > + mpz_init (value.value); > + env->extract_big_integer (env, arg, &value); > + mpz_mul_ui (value.value, value.value, 2); > + emacs_value result =3D env->make_big_integer (env, &value); > + mpz_clear (value.value); > + return result; > +} > + > /* Lisp utilities for easier readability (simple wrappers). */ > > /* Provide FEATURE to Emacs. */ > @@ -447,6 +465,7 @@ emacs_module_init (struct emacs_runtime *ert) > NULL, NULL); > DEFUN ("mod-test-sleep-until", Fmod_test_sleep_until, 2, 2, NULL, NUL= L); > DEFUN ("mod-test-add-nanosecond", Fmod_test_add_nanosecond, 1, 1, NUL= L, NULL); > + DEFUN ("mod-test-double", Fmod_test_double, 1, 1, NULL, NULL); > > #undef DEFUN > > diff --git a/test/src/emacs-module-tests.el b/test/src/emacs-module-test= s.el > index eea4c61..78f2381 100644 > --- a/test/src/emacs-module-tests.el > +++ b/test/src/emacs-module-tests.el > @@ -338,4 +338,11 @@ Interactively, you can try hitting \\[keyboard-quit= ] to quit." > (ert-info ((format "input: %s" input)) > (should-error (mod-test-add-nanosecond input))))) > > +(ert-deftest mod-test-double () > + (dolist (input (list 0 1 2 -1 42 12345678901234567890 > + most-positive-fixnum (1+ most-positive-fixnum) > + most-negative-fixnum (1- most-negative-fixnum))) > + (ert-info ((format "input: %d" input)) > + (should (=3D (mod-test-double input) (* 2 input)))))) > + > ;;; emacs-module-tests.el ends here