emacs-devel
[Top][All Lists]
Advanced

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

Re: Watchpoints for emacs lisp.


From: alin.s
Subject: Re: Watchpoints for emacs lisp.
Date: Sat, 15 May 2010 04:24:05 -0700 (PDT)



alin.s wrote:
> 
> 
> 
> Stefan Monnier wrote:
>> 
>>> I insert to the struct Lisp_Symbol a field :watched: .
>> 
>> I think a good starting point is to use the existing `constant'
>> field and just add a special WATCHED value to it (it already has 2bits
>> but only uses 1, so you don't even need to make the field any larger).
>> 
>> 
> 
> Here is the symbol structure. Can you point your finger on the unused bit
> ?
> 
> 
> /* In a symbol, the markbit of the plist is used as the gc mark bit */
> 
> struct Lisp_Symbol
> {
>   unsigned gcmarkbit : 1;
> 
>   /* Non-zero means symbol serves as a variable alias.  The symbol
>      holding the real value is found in the value slot.  */
>   unsigned indirect_variable : 1;
> 
>   /* Non-zero means symbol is constant, i.e. changing its value
>      should signal an error.  */
>   unsigned constant : 1;
> 
>   /* Interned state of the symbol.  This is an enumerator from
>      enum symbol_interned.  */
>   unsigned interned : 2;
> 
>   /* The symbol's name, as a Lisp string.
> 
>      The name "xname" is used to intentionally break code referring to
>      the old field "name" of type pointer to struct Lisp_String.  */
>   Lisp_Object xname;
> 
>   /* Value of the symbol or Qunbound if unbound.  If this symbol is a
>      defvaralias, `value' contains the symbol for which it is an
>      alias.  Use the SYMBOL_VALUE and SET_SYMBOL_VALUE macros to get
>      and set a symbol's value, to take defvaralias into account.  */
>   Lisp_Object value;
> 
>   /* Function value of the symbol or Qunbound if not fboundp.  */
>   Lisp_Object function;
> 
>   /* The symbol's property list.  */
>   Lisp_Object plist;
> 
>   /* Next symbol in obarray bucket, if the symbol is interned.  */
>   struct Lisp_Symbol *next;
> };
> 
> 

I see 3 free bits here: 1+1+1+2 =5.

(the bits 6-7-8 are free).

Why do you say that it's impossible to insert a new field :watch: there ? It
takes 2 values, so it will rest 2 free bits.





-- 
View this message in context: 
http://old.nabble.com/Watchpoints-for-emacs-lisp.-tp28512483p28567697.html
Sent from the Emacs - Dev mailing list archive at Nabble.com.




reply via email to

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