Part IV. Internals of the CLISP Implementation

Table of Contents

34. The source files of CLISP
34.1. File Types
34.2. Source Pre-Processing
34.3. Files
34.3.1. Unpreprocessed C code
34.3.2. Other assembly language stuff
34.3.3. Lisp source files
34.3.4. External Modules
34.3.5. Documentation
34.3.6. Internationalization
34.3.7. Automatic configuration on UNIX and MinGW
34.3.8. Externally maintained files
35. Overview of CLISP's Garbage Collection
35.1. Introduction
35.2. Lisp objects in CLISP
35.3. Object Pointer Representations
35.4. Memory Models
35.5. The burden of garbage-collection upon the rest of CLISP
35.5.1. Lisp object invalidation
35.5.2. Managing Lisp objects in C
35.5.3. Run-time GC-safety checks
35.5.4. Memory protection
35.6. Foreign Pointers
35.7. Garbage Collection and Multithreading
36. Extending CLISP Core
36.1. Adding a built-in function
36.2. Adding a built-in variable
36.3. Recompilation
37. The CLISP bytecode specification
37.1. Introduction
37.2. The virtual machine
37.3. The structure of compiled functions
37.4. The general structure of the instructions
37.5. The instruction set
37.5.1. Instructions for constants
37.5.2. Instructions for lexical variables
37.5.3. Instructions for dynamic variables
37.5.4. Instructions for stack operations
37.5.5. Instructions for control flow, jumps
37.5.6. Instructions for lexical environment, creation of closures
37.5.7. Instructions for function calls
37.5.8. Instructions for optional and keyword parameters
37.5.9. Instructions for multiple values
37.5.10. Instructions for BLOCK and RETURN-FROM
37.5.11. Instructions for TAGBODY and GO
37.5.12. Instructions for CATCH and THROW
37.5.13. Instructions for UNWIND-PROTECT
37.5.14. Instructions for HANDLER-BIND
37.5.15. Instructions for some inlined functions
37.5.16. Combined instructions
37.5.17. Shortcut instructions
37.6. Examining compiled closures
37.7. Bytecode Design
37.7.1. When to add a new bytecode?
37.7.2. Why JMPTAIL?

These notes document CLISP version 2.49Last modified: 2010-07-07