‘Returns a new map. We implement a map as a pair, with head the symbol `map and tail a Lisp association list. Here, an association list is a possibly empty list of lists, each with first element <,argument>, and second element <,image>,. Each argument and image is an arbitrary Lisp object.’ ‘Binds VARIABLE to successive car’s of LIST and evaluates BODY. returning the list of results. This is just a convenient abbreviation of mapcar. The ‘ce:’ prefix denotes our library of Common Emacs-lisp functions and macros.’ bound to nil or a list (pattern value) binding the symbols in pattern to corresponding value’s. Each value can refer to symbols already bound in bindings. For example: (ce ] returns a list ((symbol access)*) where SYMBOL occurs in the PATTERN and ACCESS is an accessing expression of nested calls to car and cdr.’ ((null pattern) nil) ((symbolp pattern) (list (list pattern path))) ((consp pattern) (append (funcall b (car pattern) (list ‘car path)) (funcall b (cdr pattern) (list ‘cdr path)))))))) (apply ‘append (ce ‘This macro creates a new class record, fills in its fields, and then compiles the class. The class record remembers the class’s name, slots, methods, and other information.’ ‘Implements fast message passing. The $ macro implements a partial method-lookup at compile-time, by precomputing the hash code for the SELECTOR. Then $ constructs code to dispatch on the class of the *receiver* at run-time. There are three cases which are described in the Eoops paper.’ )) ‘compiled))) (funcall (cdr (assq ‘(, selector) (aref super (, h)))) self (,@ args))))) ((symbolp receiver) (` (funcall (cdr (assq (, s) (aref (aref (, receiver) 0) (, h)))) (, receiver) (,@ args)))) (t (` ( may require the expense of loading the class. After the class record, *c*, is retrieved, the *cv* is retrieved, the instance vector is created and initialized, an init message is sent to the new instance, and finally the new initialized instance is returned.’ ‘Given a lambda expression F, prepends the symbol ‘self to the arguments in f. This is required since $ calls a method with the receiver as an additional argument prepended to those specified in a method definition.’ ‘Copies the methods from the parent-vector to the class-vector. Called when the compiled code is loaded, this implements load-time inheritance.’ ‘Loads the specified class, NC, when either the class has never been loaded or when its sources, if available, are newer than the object file.’ under the name NC. This function is explicitly invoked in a class’s object file. Loading a class enforces that the parent is loaded. The parent’s class vector is then copied and merged with the current class’s class vector by eoops . This inheritance step is done at load time so that a new object file need not be created and written for a class when an ancestor is modified.’ . The resulting file, when loaded into Emacs, will install class c. Each file contains only one class and each class has to be in exactly one file. However, a file may include other expressions. Therefore, eoops first byte-compiles the source file and then replaces the item corresponding to the class definition by the printed representation of the class. Setting print-depth to nil makes sure that the prin1 prints the complete class. Since a class’s children field is a list of its currently loaded subclasses, this field is set to nil before printing.’ (byte-compile-file src-name) (set-buffer standard-output) (erase-buffer) (insert-file obj-name) (goto-char (point-max)) (re-search-backward ”Locks’ are used to attempt to avoid disk contention when more than one person tries to compile the same class simultaneously.’ . Alternatively, you may choose to receive this work under any other license that grants the right to use, copy, modify, and/or distribute the work, as long as that license imposes the restriction that derivative works have to grant the same rights and impose the same restriction. For example, you may choose to receive this work under the Source.