emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/lisp.h


From: Stefan Monnier
Subject: [Emacs-diffs] Changes to emacs/src/lisp.h
Date: Wed, 09 Jul 2003 16:30:16 -0400

Index: emacs/src/lisp.h
diff -c emacs/src/lisp.h:1.463 emacs/src/lisp.h:1.464
*** emacs/src/lisp.h:1.463      Wed Jul  9 10:46:06 2003
--- emacs/src/lisp.h    Wed Jul  9 16:30:15 2003
***************
*** 154,168 ****
      Lisp_Misc_Limit
    };
  
- /* These values are overridden by the m- file on some machines.  */
- #ifndef VALBITS
- #define VALBITS (BITS_PER_EMACS_INT - 4)
- #endif
- 
  #ifndef GCTYPEBITS
  #define GCTYPEBITS 3
  #endif
  
  #ifndef NO_UNION_TYPE
  
  #ifndef WORDS_BIG_ENDIAN
--- 154,169 ----
      Lisp_Misc_Limit
    };
  
  #ifndef GCTYPEBITS
  #define GCTYPEBITS 3
  #endif
  
+ /* These values are overridden by the m- file on some machines.  */
+ #ifndef VALBITS
+ /* The -1 is for the markbit.  */
+ #define VALBITS (BITS_PER_EMACS_INT - GCTYPEBITS - 1)
+ #endif
+ 
  #ifndef NO_UNION_TYPE
  
  #ifndef WORDS_BIG_ENDIAN
***************
*** 546,602 ****
      bcopy (new, XSTRING (string)->data + index, count)
  
  
! /* Basic data type for use of intervals.  See the macros in intervals.h.  */
! 
! struct interval
! {
!   /* The first group of entries deal with the tree structure.  */
! 
!   unsigned int total_length;  /* Length of myself and both children.  */
!   unsigned int position;      /* Cache of interval's character position.  */
!                               /* This field is usually updated
!                                  simultaneously with an interval
!                                  traversal, there is no guarantee
!                                  that it is valid for a random
!                                  interval.  */
!   struct interval *left;      /* Intervals which precede me.  */
!   struct interval *right;     /* Intervals which succeed me.  */
! 
!   /* Parent in the tree, or the Lisp_Object containing this interval tree.
! 
!      The mark bit on the root interval of an interval tree says
!      whether we have started (and possibly finished) marking the
!      tree.  If GC comes across an interval tree whose root's parent
!      field has its markbit set, it leaves the tree alone.
! 
!      You'd think we could store this information in the parent object
!      somewhere (after all, that should be visited once and then
!      ignored too, right?), but strings are GC'd strangely.  */
!   union
!   {
!     struct interval *interval;
!     Lisp_Object obj;
!   } up;
!   unsigned int up_obj : 1;
! 
!   unsigned gcmarkbit : 1;
! 
!   /* The remaining components are `properties' of the interval.
!      The first four are duplicates for things which can be on the list,
!      for purposes of speed.  */
! 
!   unsigned int write_protect : 1;   /* Non-zero means can't modify.  */
!   unsigned int visible : 1;       /* Zero means don't display.  */
!   unsigned int front_sticky : 1;    /* Non-zero means text inserted just
!                                      before this interval goes into it.  */
!   unsigned int rear_sticky : 1;           /* Likewise for just after it.  */
! 
!   /* Properties of this interval.
!      The mark bit on this field says whether this particular interval
!      tree node has been visited.  Since intervals should never be
!      shared, GC aborts if it seems to have visited an interval twice.  */
!   Lisp_Object plist;
! };
  
  typedef struct interval *INTERVAL;
  
--- 547,553 ----
      bcopy (new, XSTRING (string)->data + index, count)
  
  
! /* See the macros in intervals.h.  */
  
  typedef struct interval *INTERVAL;
  
***************
*** 1085,1091 ****
      union Lisp_Misc *chain;
    };
  
- /* In a marker, the markbit of the chain field is used as the gc mark bit.  */
  struct Lisp_Marker
  {
    int type : 16;              /* = Lisp_Misc_Marker */
--- 1036,1041 ----
***************
*** 1105,1113 ****
       this is used to chain of all the markers in a given buffer.  */
    struct Lisp_Marker *next;
    /* This is the char position where the marker points.  */
!   int charpos;
    /* This is the byte position.  */
!   int bytepos;
  };
  
  /* Forwarding pointer to an int variable.
--- 1055,1063 ----
       this is used to chain of all the markers in a given buffer.  */
    struct Lisp_Marker *next;
    /* This is the char position where the marker points.  */
!   EMACS_INT charpos;
    /* This is the byte position.  */
!   EMACS_INT bytepos;
  };
  
  /* Forwarding pointer to an int variable.
***************
*** 1217,1224 ****
      Lisp_Object cdr;
    };
  
! /* In an overlay object, the mark bit of the plist is used as the GC mark.
!    START and END are markers in the overlay's buffer, and
     PLIST is the overlay's property list.  */
  struct Lisp_Overlay
    {
--- 1167,1173 ----
      Lisp_Object cdr;
    };
  
! /* START and END are markers in the overlay's buffer, and
     PLIST is the overlay's property list.  */
  struct Lisp_Overlay
    {
***************
*** 2172,2178 ****
  EXFUN (Fend_of_line, 1);
  EXFUN (Fforward_char, 1);
  EXFUN (Fforward_line, 1);
- extern int forward_point P_ ((int));
  extern int internal_self_insert P_ ((int, int));
  extern void syms_of_cmds P_ ((void));
  extern void keys_of_cmds P_ ((void));
--- 2121,2126 ----
***************
*** 3010,3037 ****
  extern void syms_of_undo P_ ((void));
  
  /* defined in textprop.c */
! extern Lisp_Object Qmodification_hooks;
! extern Lisp_Object Qrear_nonsticky, Qfont, Qmouse_face;
  extern Lisp_Object Qinsert_in_front_hooks, Qinsert_behind_hooks;
- EXFUN (Fnext_property_change, 3);
  EXFUN (Fnext_single_property_change, 4);
  EXFUN (Fnext_single_char_property_change, 4);
  EXFUN (Fprevious_single_property_change, 4);
- EXFUN (Fget_text_property, 3);
  EXFUN (Fput_text_property, 5);
- EXFUN (Fset_text_properties, 4);
- EXFUN (Ftext_property_not_all, 5);
  EXFUN (Fprevious_char_property_change, 2);
  EXFUN (Fnext_char_property_change, 2);
  extern void report_interval_modification P_ ((Lisp_Object, Lisp_Object));
- extern void syms_of_textprop P_ ((void));
  extern Lisp_Object next_single_char_property_change P_ ((Lisp_Object,
                                                         Lisp_Object,
                                                         Lisp_Object,
                                                         Lisp_Object));
- extern Lisp_Object set_text_properties P_ ((Lisp_Object, Lisp_Object,
-                                           Lisp_Object, Lisp_Object,
-                                           Lisp_Object));
  
  /* defined in xmenu.c */
  EXFUN (Fx_popup_menu, 2);
--- 2958,2976 ----
  extern void syms_of_undo P_ ((void));
  
  /* defined in textprop.c */
! extern Lisp_Object Qfont, Qmouse_face;
  extern Lisp_Object Qinsert_in_front_hooks, Qinsert_behind_hooks;
  EXFUN (Fnext_single_property_change, 4);
  EXFUN (Fnext_single_char_property_change, 4);
  EXFUN (Fprevious_single_property_change, 4);
  EXFUN (Fput_text_property, 5);
  EXFUN (Fprevious_char_property_change, 2);
  EXFUN (Fnext_char_property_change, 2);
  extern void report_interval_modification P_ ((Lisp_Object, Lisp_Object));
  extern Lisp_Object next_single_char_property_change P_ ((Lisp_Object,
                                                         Lisp_Object,
                                                         Lisp_Object,
                                                         Lisp_Object));
  
  /* defined in xmenu.c */
  EXFUN (Fx_popup_menu, 2);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]