$Revision: 5.0.2.4 $
Package: EXCL
Arguments: (object &optional type)
This function returns the source file for object if such information is available and returns nil otherwise.
object identifies the object for which source-file information is desired. type, if provided, may be a symbol, a list or t. The behavior of source-file depends on the value of type. If type is not provided, and there is a single source file defining object, the pathname of that file is returned. If there is no source file information, nil is returned. If there are different source files in which are different types of definitions related to object, a continuable error is signaled and specific type information is requested if one continues from the error.
type may be any symbol. The predefined symbols are :function and :macro. :function is used for functions, generic functions and methods, flavor methods, and defstruct accessors, and :macro is used for macros. Those are the only objects for which source file information is automatically recorded. If type is one of these symbols, the pathname of the relevant source file is returned if the information exists, and nil if it does not exist. If there is no object of the specified type identified by object, an error is signaled. For example, if foo is a function (and has no other definitions recorded),
(source-file 'foo :function)
and
(source-file 'foo)
both return the pathname of the source file, if it is known, and nil if it is not known, but
(source-file 'foo :macro)
will signal an error.
Note: there may be several source files defining generic functions and methods named by a symbol. All of these files are remembered, but only the latest one is printed by
(source-file 'foo :function)
or
(source-file 'foo)
However,
(source-file 'foo t)
prints a list of dotted pairs identifying all files where something named by foo is defined, including the file with the defgeneric (if there is one) and all files containing defmethod's.
If type is a list of allowable types, a list of dotted pairs of the form
(type . pathname)
is returned with a pair for each type for which a source file can be found. If no source files can be found, nil is returned. No error is signaled even if object is neither a macro nor a function.
If type is t, again a list of dotted pairs is returned with pairs for each of the allowable types for which a source file is known. No error is signaled if no source file is known for a given type.
setf can be used to record source file information manually, in which case the type must be given and be a symbol.
Note that the value of *source-pathname* is a string, while source-file returns a pathname. The pathname is simply generated by calling the cl:pathname function with the string as an argument.
The source file for a definition typed to the top-level is the keyword :top-level.
See source_file_recording,htm for general information on soruce file recording.
The general documentation description is in introduction.htm. The index is in index.htm.
Copyright (C) 1998-1999, Franz Inc., Berkeley, CA. All Rights Reserved.