view info/dir @ 107984:bef5d1738c0b

Make variable forwarding explicit rather the using special values. Basically, this makes the structure of buffer-local values and object forwarding explicit in the type of Lisp_Symbols rather than use special Lisp_Objects for that. This tends to lead to slightly more verbose code, but is more C-like, simpler, and makes it easier to make sure we handled all cases, among other things by letting the compiler help us check it. * lisp.h (enum Lisp_Misc_Type, union Lisp_Misc): Removing forwarding objects. (enum Lisp_Fwd_Type, enum symbol_redirect, union Lisp_Fwd): New types. (struct Lisp_Symbol): Make the various forms of variable-forwarding explicit rather than hiding them inside Lisp_Object "values". (XFWDTYPE): New macro. (XINTFWD, XBOOLFWD, XOBJFWD, XKBOARD_OBJFWD): Redefine. (XBUFFER_LOCAL_VALUE): Remove. (SYMBOL_VAL, SYMBOL_ALIAS, SYMBOL_BLV, SYMBOL_FWD, SET_SYMBOL_VAL) (SET_SYMBOL_ALIAS, SET_SYMBOL_BLV, SET_SYMBOL_FWD): New macros. (SYMBOL_VALUE, SET_SYMBOL_VALUE): Remove. (struct Lisp_Intfwd, struct Lisp_Boolfwd, struct Lisp_Objfwd) (struct Lisp_Buffer_Objfwd, struct Lisp_Kboard_Objfwd): Remove the Lisp_Misc_* header. (struct Lisp_Buffer_Local_Value): Redefine. (BLV_FOUND, SET_BLV_FOUND, BLV_VALUE, SET_BLV_VALUE): New macros. (struct Lisp_Misc_Any): Add filler to get the right size. (struct Lisp_Free): Use struct Lisp_Misc_Any rather than struct Lisp_Intfwd. (DEFVAR_LISP, DEFVAR_LISP_NOPRO, DEFVAR_BOOL, DEFVAR_INT) (DEFVAR_KBOARD): Allocate a forwarding object. * data.c (do_blv_forwarding, store_blv_forwarding): New macros. (let_shadows_global_binding_p): New function. (union Lisp_Val_Fwd): New type. (make_blv): New function. (swap_in_symval_forwarding, indirect_variable, do_symval_forwarding) (store_symval_forwarding, swap_in_global_binding, Fboundp) (swap_in_symval_forwarding, find_symbol_value, Fset) (let_shadows_buffer_binding_p, set_internal, default_value) (Fset_default, Fmake_variable_buffer_local, Fmake_local_variable) (Fkill_local_variable, Fmake_variable_frame_local) (Flocal_variable_p, Flocal_variable_if_set_p) (Fvariable_binding_locus): * xdisp.c (select_frame_for_redisplay): * lread.c (Fintern, Funintern, init_obarray, defvar_int) (defvar_bool, defvar_lisp_nopro, defvar_lisp, defvar_kboard): * frame.c (store_frame_param): * eval.c (Fdefvaralias, Fuser_variable_p, specbind, unbind_to): * bytecode.c (Fbyte_code) <varref, varset>: Adapt to the new symbol value structure. * buffer.c (PER_BUFFER_SYMBOL): Move from buffer.h. (clone_per_buffer_values): Only adjust markers into the current buffer. (reset_buffer_local_variables): PER_BUFFER_IDX is never -2. (Fbuffer_local_value, set_buffer_internal_1) (swap_out_buffer_local_variables): Adapt to the new symbol value structure. (DEFVAR_PER_BUFFER): Allocate a Lisp_Buffer_Objfwd object. (defvar_per_buffer): Take a new arg for the fwd object. (buffer_lisp_local_variables): Return a proper alist (different fix for bug#4138). * alloc.c (Fmake_symbol): Use SET_SYMBOL_VAL. (Fgarbage_collect): Don't handle buffer_defaults specially. (mark_object): Handle new symbol value structure rather than the old special Lisp_Misc_* objects. (gc_sweep) <symbols>: Free also the buffer-local-value objects. * term.c (set_tty_color_mode): * bidi.c (bidi_initialize): Don't access the ->value field directly. * buffer.h (PER_BUFFER_VAR_OFFSET): Don't bother with a buffer_local_flags. * print.c (print_object): Get rid of impossible forwarding objects.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Mon, 19 Apr 2010 21:50:52 -0400
parents 7787e34f5b4f
children 21cb91dca6c7
line wrap: on
line source

This is the file .../info/dir, which contains the
topmost node of the Info hierarchy, called (dir)Top.
The first time you invoke Info you start off looking at this node.

File: dir,	Node: Top	This is the top of the INFO tree

The Info Directory
******************

  The Info Directory is the top-level menu of major Info topics.
  Type "d" in Info to return to the Info Directory.  Type "q" to exit Info.
  Type "?" for a list of Info commands, or "h" to visit an Info tutorial.
  Type "m" to choose a menu item--for instance,
    "mEmacs<Return>" visits the Emacs manual.
  In Emacs Info, you can click mouse button 2 on a menu item
  or cross reference to follow it to its target.
  Each menu line that starts with a * is a topic you can select with "m".
  Every third topic has a red * to help pick the right number to type.

* Menu:

* Info: (info).         How to use the documentation browsing system.

Emacs
* Emacs: (emacs).       The extensible self-documenting text editor.
* Emacs FAQ: (efaq).    Frequently Asked Questions about Emacs.

GNU Emacs Lisp
* Emacs Lisp Intro: (eintr).
                          A simple introduction to Emacs Lisp programming.
* Elisp: (elisp).       The Emacs Lisp Reference Manual.

Emacs editing modes
* Ada mode: (ada-mode). Emacs mode for editing and compiling Ada code.
* CC Mode: (ccmode).    Emacs mode for editing C, C++, Objective-C,
                        Java, Pike, AWK, and CORBA IDL code.
* IDLWAVE: (idlwave).   Major mode and shell for IDL files.
* nXML Mode: (nxml-mode).       XML editing mode with RELAX NG support.
* Org Mode: (org).      Outline-based notes management and organizer

Emacs network features
* EUDC: (eudc).   An Emacs client for directory servers (LDAP, PH).
* Gnus: (gnus).         The newsreader Gnus.
* Mairix: (mairix-el).  Emacs interface to the Mairix mail indexer.
* MH-E: (mh-e).         Emacs interface to the MH mail system.
* Message: (message).   Mail and news composition mode that goes with Gnus.
* Newsticker: (newsticker). A Newsticker for Emacs.
* PGG: (pgg).   Emacs interface to various PGP implementations.
* ERC: (erc).           Powerful, modular, and extensible IRC client for Emacs.
* Rcirc: (rcirc).       Internet Relay Chat (IRC) client.
* SASL: (sasl).         The Emacs SASL library.
* SC: (sc).             Supercite lets you cite parts of messages you're
                          replying to, in flexible ways.
* Sieve: (sieve).               Managing Sieve scripts in Emacs.
* TRAMP: (tramp).                Transparent Remote Access, Multiple Protocol
                                 GNU Emacs remote file access via rsh and rcp.

Emacs misc features
* Autotype: (autotype). Convenient features for text that you enter frequently
                          in Emacs.
* Calc: (calc).         Advanced desk calculator and mathematical tool.
* Dired-X: (dired-x).   Dired Extra Features.
* EasyPG Assistant: (epa).   An Emacs user interface to GNU Privacy Guard.
* Ebrowse: (ebrowse).   A C++ class browser for Emacs.
* EDE: (ede).           The Emacs Development Environment.
* Ediff: (ediff).       A visual interface for comparing and merging programs.
* EDT: (edt).           An Emacs emulation of the EDT editor.
* EIEIO: (eieio).       An object system for Emacs Lisp.
* Eshell: (eshell).     A command shell implemented in Emacs Lisp.
* Flymake: (flymake).   A universal on-the-fly syntax checker.
* Forms: (forms).       Emacs package for editing data bases
                          by filling in forms.
* PCL-CVS: (pcl-cvs).   Emacs front-end to CVS.
* RefTeX: (reftex).     Emacs support for LaTeX cross-references and citations.
* Remember: (remember). Simple information manager for Emacs.
* Semantic: (semantic). Source code parsing utilities for Emacs.
* SES: (ses).       Simple Emacs Spreadsheet
* Speedbar: (speedbar). File/Tag summarizing utility.
* VIP: (vip).           An older VI-emulation for Emacs.
* VIPER: (viper).       The newest Emacs VI-emulation mode.
                          (also, A VI Plan for Emacs Rescue
                           or the VI PERil.)
* WoMan: (woman).       Browse UN*X Manual Pages "W.O. (without) Man".

Emacs lisp libraries
* Auth-source: (auth).  A single configuration for multiple applications.
* CL: (cl).             Partial Common Lisp support for Emacs Lisp.
* D-Bus: (dbus).                Using D-Bus in Emacs.
* Emacs MIME: (emacs-mime).   Emacs MIME de/composition library.
* URL: (url).                 URL loading package.
* Widget: (widget).      The "widget" package used by the Emacs Customization
                           facility.
* SMTP: (smtpmail). Emacs library for sending mail via SMTP.