• Paul Eggert's avatar
    Modularize bignums better · 9abaf5f3
    Paul Eggert authored
    * src/bignum.c, src/bignum.h: New files.  Only modules that
    need to know how bignums are implemented should include
    bignum.h.  Currently these are alloc.c, bignum.c (of course),
    data.c, emacs.c, emacs-module.c, floatfns.c, fns.c, print.c.
    * src/Makefile.in (base_obj): Add bignum.o.
    * src/alloc.c (make_bignum_str): Move to bignum.c.
    (make_number): Remove; replaced by bignum.c’s make_integer.
    All callers changed.
    * src/conf_post.h (ARG_NONNULL): New macro.
    * src/json.c (json_to_lisp): Use it.
    * src/data.c (Fnatnump):
    Move NATNUMP’s implementation here from lisp.h.
    * src/data.c (Fnumber_to_string):
    * src/editfns.c (styled_format):
    Move conversion of string to bignum to bignum_to_string, and
    call it here.
    * src/emacs-module.c (module_make_integer):
    * src/floatfns.c (Fabs):
    Simplify by using make_int.
    * src/emacs.c: Include bignum.h, to expand its inline fns.
    * src/floatfns.c (Ffloat): Simplify by using XFLOATINT.
    (rounding_driver): Simplify by using double_to_bignum.
    (rounddiv_q): Clarify use of temporaries.
    * src/lisp.h: Move decls that need to know bignum internals to
    bignum.h.  Do not include gmp.h or mini-gmp.h; that is now
    bignum.h’s job.
    (GMP_NUM_BITS, struct Lisp_Bignum, XBIGNUM, mpz_set_intmax):
    Move to bignum.h.
    (make_int): New function.
    (NATNUMP): Remove; all callers changed to use Fnatnump.
    (XFLOATINT): If arg is a bignum, use bignum_to_double, so that
    bignum internals are not exposed here.
    * src/print.c (print_vectorlike): Use SAFE_ALLOCA to avoid the
    need for a record_unwind_protect_ptr.
    9abaf5f3
bignum.c 4.03 KB