# HG changeset patch # User Jim Blandy # Date 717139114 0 # Node ID 4eee4dc734bb26db15bf5309b005495757104023 # Parent 65e2edefe748696018ab951a5f7fe4ae349b41ea * lisp.h (struct handler): Remove the poll_suppress_count member of this structure; it is always equal to the poll_suppress_count of its catchtag structure. The non-local exit code in eval.c is difficult enough to understand as it is; needless duplication doesn't help. * lisp.h (struct specbinding, struct handler): More documentation. diff -r 65e2edefe748 -r 4eee4dc734bb src/lisp.h --- a/src/lisp.h Tue Sep 22 05:17:48 1992 +0000 +++ b/src/lisp.h Tue Sep 22 05:18:34 1992 +0000 @@ -670,8 +670,20 @@ #define DEFVAR_PER_BUFFER(lname, vname, type, doc) \ defvar_per_buffer (lname, vname, type, 0) -/* Structure for recording Lisp call stack for backtrace purposes */ +/* Structure for recording Lisp call stack for backtrace purposes. */ + +/* The special binding stack holds the outer values of variables while + they are bound by a function application or a let form, stores the + code to be executed for Lisp unwind-protect forms, and stores the C + functions to be called for record_unwind_protect. + If func is non-zero, undoing this binding applies func to old_value; + This implements record_unwind_protect. + If func is zero and symbol is nil, undoing this binding evaluates + the list of forms in old_value; this implements Lisp's unwind-protect + form. + Otherwise, undoing this binding stores old_value as symbol's value; this + undoes the bindings made by a let form or function call. */ struct specbinding { Lisp_Object symbol, old_value; @@ -683,13 +695,17 @@ extern struct specbinding *specpdl_ptr; extern int specpdl_size; +/* Everything needed to describe an active condition case. */ struct handler { + /* The handler clauses and variable from the condition-case form. */ Lisp_Object handler; Lisp_Object var; - int poll_suppress_count; /* No error should exit a piece of code - in which polling is suppressed. */ + + /* Used to effect the longjump out to the handler. */ struct catchtag *tag; + + /* The next enclosing handler. */ struct handler *next; };