store lisp structures in SCM objects
authorBT Templeton <bpt@hcoop.net>
Wed, 11 Jul 2012 06:44:58 +0000 (02:44 -0400)
committerRobin Templeton <robin@terpri.org>
Sat, 18 Apr 2015 22:49:08 +0000 (18:49 -0400)
commit49609976b53d82d859e06d727469a30a12583d4a
tree2b7dd472f0e4151e7ec632d98f905da5ee2f0c56
parent9c53af1fb5b9feba494db78b74d73de1b04a9df9
store lisp structures in SCM objects

* src/alloc.c (allocate_string, make_float, Fcons, init_vectors)
  (allocate_vectorlike, allocate_buffer, Fmake_symbol, allocate_misc):
  Store a smob in the internal structure's self field. Adapted from
  Ken Raeburn's Guile-Emacs branch.

  (valid_lisp_object_p): Use `SCM_IMP' and `SCM2PTR'.

  (init_alloc_once): Initialize smob types.

  (lsb_bits): Remove.

* src/emacs.c (gdb_use_lsb, gdb_use_struct, gdb_gctypebits)
  (gdb_data_seg_bits): Remove.

* src/font.h (XFONT_SPEC, XFONT_ENTITY, XFONT_OBJECT):
* src/frame.h (XFRAME): Use `SCM_SMOB_DATA'.

* src/lisp.h (EMACS_INT, EMACS_UINT, EMACS_INT_MAX, FIXNUM_BITS)
  (INTMASK, Lisp_Object, XHASH, XINT, XUINT, make_number, SXHASH)
  (MOST_POSITIVE_FIXNUM, MOST_NEGATIVE_FIXNUM, XTYPE, INTEGERP):
  Redefine in terms of libguile's SCM type.

  (XCONS, XVECTOR, XSTRING, XSYMBOL, XFLOAT, XMISC, XPROCESS, XWINDOW)
  (XTERMINAL, XSUBR, XBUFFER, XCHAR_TABLE, XSUB_CHAR_TABLE)
  (XBOOL_VECTOR, XSETPSEUDOVECTOR, XHASH_TABLE, TYPED_PSEUDOVECTORP):
  Use `SCM_SMOB_DATA'.

  (XSETCONS, XSETVECTOR, XSETSTRING, XSETSYMBOL, XSETFLOAT, XSETMISC):
  Use the SCM object from the structure's `self' field.

  (XSETSUBR): Use `SCM_NEWSMOB'.

  (struct Lisp_Cons, struct Lisp_String, struct vectorlike_header)
  (struct Lisp_Subr, struct Lisp_Symbol, struct Lisp_Misc_Any)
  (struct Lisp_Marker, struct Lisp_Overlay, struct Lisp_Save_Value)
  (struct Lisp_Float): Add a `self' field.

  (DEFUN): Initialize the `self' field to `NULL'.

  (SYMBOLP, MISCP, VECTORLIKEP, STRINGP, CONSP, FLOATP): Use
  `SCM_SMOB_PREDICATE'.

  (enum Lisp_Type): Simplify.
  (Lisp_Int): New enum value.
  (Lisp_Int0, Lisp_Int1): Remove.
  (LISP_INT_TAG, case_Lisp_Int): Simplify.
  (XTYPE): Use type predicates instead of returning the tag bits.

  (pI): Redefine.

  (lisp_symbol_tag, lisp_misc_tag, lisp_string_tag, lisp_vectorlike_tag)
  (lisp_cons_tag, lisp_float_tag): New variables.

  (VALBITS, VALMAX, USE_LSB_TAG, INTTYPEBITS, LISP_INT1_TAG)
  (LISP_STRING_TAG, LISP_INT_TAG_P, XLI, XIL, TYPEMASK, XSET, XPNTR)
  (XUNTAG, VALMASK): Remove.

* src/vm-limit.c (exceeds_lisp_ptr): Always return false.

* src/w32heap.c (allocate_heap, init_heap): Remove MSB tagging
  support, leaving only code that would have been used with
  (`USE_LSB_TAG' in effect.
src/alloc.c
src/font.h
src/frame.h
src/lisp.h
src/lread.c
src/xdisp.c