Function | Package: excl | ToC | DocOverview | CGDoc | RelNotes | FAQ | Index | PermutedIndex
| Allegro CL version 9.0 Unrevised from 8.2 to 9.0. 8.2 version

## record-source-file

Arguments: fspec &key type

This function is used to record the location of built-in and user defined objects in source files.

The built-in types and the forms that use them are:

Type | Used with these forms:
`:operator` | defun, defmacro
`:variable` | defconstant, defparameter, defvar
`:special-declaration` | defconstant, defparameter, defvar
`:compiler-macro` | define-compiler-macro
`:setf-method` | defsetf
`:type` | defclass, defstruct, deftype

For example, putting the following form into a file, compile and loading it: `(defun foo (x) ...)` will cause foo to be recorded as an `:operator` in the file in which it was defined.

Redefinition warnings occur when a file is loaded and it defines an object of an already existing source file recording type. Objects of different types, say an `:operator` and `:type`, do not cause redefinition warnings.

Users can extend this facility to understand objects they define. The most usual case is a macro that defines a high-level object, such as:

    (defmacro def-frob (name fram)
      `(progn
         (record-source-file ',name :type :frob)
         (def-frob-1 ',name ,fram)))

    ;;  We assume def-frob-1 exists and does something useful.
    ;;  Here is a dummy def-frob-1 that make sthe example work:
    (defun def-frob-1 (name fram) (declare (ignore name fram))
      nil)

Then, if the following form is put into /a/b/foo.cl:

`(def-frob akbar 'fez)`

and is then compiled and loaded, `(source-file 'akbar :frob)` will return a pathname pointing to /a/b/foo.cl.

See also source-file-recording.htm for general information on source file recording in Allegro CL.

Copyright (c) 1998-2019, Franz Inc. Oakland, CA., USA. All rights reserved.
This page was not revised from the 8.2 page.
Created 2012.5.30.

|  | ToC | DocOverview | CGDoc | RelNotes | FAQ | Index | PermutedIndex
| Allegro CL version 9.0 Unrevised from 8.2 to 9.0. 8.2 version