Mercurial > hg > xemacs-beta
view lisp/README @ 4921:17362f371cc2
add more byte-code assertions and better failure output
-------------------- ChangeLog entries follow: --------------------
src/ChangeLog addition:
2010-02-03 Ben Wing <ben@xemacs.org>
* alloc.c (Fmake_byte_code):
* bytecode.h:
* lisp.h:
* lread.c:
* lread.c (readevalloop):
* lread.c (Fread):
* lread.c (Fread_from_string):
* lread.c (read_list_conser):
* lread.c (read_list):
* lread.c (vars_of_lread):
* symbols.c:
* symbols.c (Fdefine_function):
Turn on the "compiled-function annotation hack". Implement it
properly by hooking into Fdefalias(). Note in the docstring to
`defalias' that we do this. Remove some old broken code and
change code that implemented the old kludgy way of hooking into
the Lisp reader into bracketed by `#ifdef
COMPILED_FUNCTION_ANNOTATION_HACK_OLD_WAY', which is not enabled.
Also enable byte-code metering when DEBUG_XEMACS -- this is a form
of profiling for computing histograms of which sequences of two
bytecodes are used most often.
* bytecode-ops.h:
* bytecode-ops.h (OPCODE):
New file. Extract out all the opcodes and declare them using
OPCODE(), a bit like frame slots and such. This way the file can
be included multiple times if necessary to iterate multiple times
over the byte opcodes.
* bytecode.c:
* bytecode.c (NUM_REMEMBERED_BYTE_OPS):
* bytecode.c (OPCODE):
* bytecode.c (assert_failed_with_remembered_ops):
* bytecode.c (READ_UINT_2):
* bytecode.c (READ_INT_1):
* bytecode.c (READ_INT_2):
* bytecode.c (PEEK_INT_1):
* bytecode.c (PEEK_INT_2):
* bytecode.c (JUMP_RELATIVE):
* bytecode.c (JUMP_NEXT):
* bytecode.c (PUSH):
* bytecode.c (POP_WITH_MULTIPLE_VALUES):
* bytecode.c (DISCARD):
* bytecode.c (UNUSED):
* bytecode.c (optimize_byte_code):
* bytecode.c (optimize_compiled_function):
* bytecode.c (Fbyte_code):
* bytecode.c (vars_of_bytecode):
* bytecode.c (init_opcode_table_multi_op):
* bytecode.c (reinit_vars_of_bytecode):
* emacs.c (main_1):
* eval.c (funcall_compiled_function):
* symsinit.h:
Any time we change either the instruction pointer or the stack
pointer, assert that we're going to move it to a valid location.
This should catch failures right when they occur rather than
sometime later. This requires that we pass in another couple of
parameters into some functions (only with error-checking enabled,
see below).
Also keep track, using a circular queue, of the last 100 byte
opcodes seen, and when we hit an assert failure during byte-code
execution, output the contents of the queue in a nice readable
fashion. This requires that bytecode-ops.h be included a second
time so that a table mapping opcodes to the name of their operation
can be constructed. This table is constructed in new function
reinit_vars_of_bytecode().
Everything in the last two paras happens only when
ERROR_CHECK_BYTE_CODE.
Add some longish comments describing how the arrays that hold the
stack and instructions, and the pointers used to access them, work.
* gc.c:
Import some code from my `latest-fix' workspace to mark the
staticpro's in order from lowest to highest, rather than highest to
lowest, so it's easier to debug when something goes wrong.
* lisp.h (abort_with_message): Renamed from abort_with_msg().
* symbols.c (defsymbol_massage_name_1):
* symbols.c (defsymbol_nodump):
* symbols.c (defsymbol):
* symbols.c (defkeyword):
* symeval.h (DEFVAR_SYMVAL_FWD_OBJECT):
Make the various calls to staticpro() instead call staticpro_1(),
passing in the name of the C var being staticpro'ed, so that it
shows up in staticpro_names. Otherwise staticpro_names just has
1000+ copies of the word `location'.
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Wed, 03 Feb 2010 08:01:55 -0600 |
parents | 2cf5d151eeb9 |
children |
line wrap: on
line source
The files in this directory contain source code for the core XEmacs facilities written in Emacs Lisp. *.el files are Elisp source, and *.elc files are byte-compiled versions of the corresponding *.el files. Byte-compiled files are architecture-independent. Functions used only by files in this directory are considered "internal" and are subject to change at any time. All commands, and most functions with docstrings, are part of the exported API. In particular, it is considered good style to use the Common Lisp facilities provided in cl*.el. (Yes, that's ambiguous. Sorry, we don't have a full specification of the API, as the Lispref is chronically incomplete. Anything described in the Lispref is part of the API, of course.) Libraries which implement applications and enhancements are placed in the "packages", which are distributed separately from the core sources. #### Someone please update this. #### Partially updated 2001-08-25 by sjt. Needs more work. Mike? When XEmacs starts up, it adds certain directories in various hierarchies containing Lisp libraries to `load-path' (the list of directories to be searched when loading files). These are: this directory, its subdirectory ./mule (in Mule-enabled XEmacs only), the site-lisp directory (deprecated), and all the lisp/PACKAGE subdirectories of the xemacs-packages, mule-packages, and site-packages hierarchies. See setup-paths.el. #### Is the following true or relevant any more? bogus> Directories whose names begin with "-" or "." are not added to bogus> the default load-path. Some files which you might reasonably want to alter when installing or customizing XEmacs at your site are: paths.el You may need to change the default pathnames here, but probably not. This is loaded before XEmacs is dumped. site-init.el #### obsolete and removed? To pre-load additional libraries into XEmacs and dump them in the executable, load them from this file. Read the instructions in this file for a description of how to do this. site-load.el #### description is obsolete This is like site-init.el, but if you want the docstrings of your preloaded libraries to be kept in the DOC file instead of in the executable, you should load them from this file instead. To do this, you must also cause them to be scanned when the DOC file is generated by editing ../src/Makefile.in.in and rerunning configure. #### new semantics This file will preload additional libraries listed in ../site-packages and dump them into XEmacs. ../site-packages List of additional libraries read by site-load.el. site-start.el This is loaded each time XEmacs starts up, before the user's .emacs file. (Sysadmin must create.) Can be inhibited for a given invocation with `--no-site-file'. default.el This is loaded each time XEmacs starts up, after the user's .emacs file, unless .emacs sets the variable inhibit-default-init to t. (Sysadmin must create.) Can be inhibited for a given invocation with `-q'. version.el This contains the version information for XEmacs. ======================================================================== Original text follows: The files in this directory contain source code for the XEmacs facilities written in Emacs Lisp. *.el files are Elisp source, and *.elc files are byte-compiled versions of the corresponding *.el files. Byte-compiled files are architecture-independent. #### Someone please update this. bogus> When XEmacs starts up, it adds all subdirectories of the bogus> site-lisp directory. The site-lisp directory normally exists bogus> only in installation trees. For more information about the bogus> site-lisp directory see the NEWS file. bogus> After XEmacs adds all subdirectories of the site-lisp bogus> directory, it adds all subdirectories of this directory to the bogus> load-path (the list of directories to be searched when loading bogus> files.) To speed up this process, this directory has been bogus> rearranged to have very few files at the top-level, so that bogus> emacs doesn't have to stat() several hundred files to find the bogus> dozen or so which are actually subdirectories. bogus> Directories whose names begin with "-" or "." are not added to bogus> the default load-path. The only files which remain at top-level are those which you might reasonably want to alter when installing or customizing XEmacs at your site. The files which may appear at top level are: paths.el You may need to change the default pathnames here, but probably not. This is loaded before XEmacs is dumped. site-init.el To pre-load additional libraries into XEmacs and dump them in the executable, load them from this file. Read the instructions in this file for a description of how to do this. site-load.el This is like site-init.el, but if you want the docstrings of your preloaded libraries to be kept in the DOC file instead of in the executable, you should load them from this file instead. To do this, you must also cause them to be scanned when the DOC file is generated by editing ../src/Makefile.in.in and rerunning configure. site-start.el This is loaded each time XEmacs starts up, before the user's .emacs file. default.el This is loaded each time XEmacs starts up, after the user's .emacs file, unless .emacs sets the variable inhibit-default-init to t. version.el This contains the version information for XEmacs.