Part III. Internals of the CLISP Implementation

Table of Contents

33. The source files of CLISP
33.1. File Types
33.2. Source Pre-Processing
33.3. Files
33.3.1. Unpreprocessed C code
33.3.2. Other assembly language stuff
33.3.3. Lisp source files
33.3.4. External Modules
33.3.5. Documentation
33.3.6. Internationalization
33.3.7. Automatic configuration on UNIX
34. Overview of CLISP's Garbage Collection
34.1. Introduction
34.2. Lisp objects in CLISP
34.3. Object Pointer Representations
34.4. Memory Models
34.5. The burden of garbage-collection upon the rest of CLISP
34.5.1. object pointer invalidation
34.5.2. Memory protection
34.6. Foreign Pointers
35. Extending CLISP
35.1. Adding a built-in function
35.2. Adding a built-in variable
35.3. Recompilation
36. The CLISP bytecode specification
36.1. Introduction
36.2. The virtual machine
36.3. The structure of compiled functions
36.4. The general structure of the instructions
36.5. The instruction set
36.5.1. Instructions for constants
36.5.2. Instructions for lexical variables
36.5.3. Instructions for dynamic variables
36.5.4. Instructions for stack operations
36.5.5. Instructions for control flow, jumps
36.5.6. Instructions for lexical environment, creation of closures
36.5.7. Instructions for function calls
36.5.8. Instructions for optional and keyword parameters
36.5.9. Instructions for multiple values
36.5.10. Instructions for BLOCK and RETURN-FROM
36.5.11. Instructions for TAGBODY and GO
36.5.12. Instructions for CATCH and THROW
36.5.13. Instructions for UNWIND-PROTECT
36.5.14. Instructions for HANDLER-BIND
36.5.15. Instructions for some inlined functions
36.5.16. Combined instructions
36.5.17. Shortcut instructions
36.6. Bytecode Design
36.6.1. When to add a new bytecode?
36.6.2. Why JMPTAIL?

These notes document CLISP version 2.41Last modified: 2006-10-13