[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Exporting a Symbol in a Patch File
Date: Mon, 11 May 1992 10:34 EDT
From: David Emme <Emme@Tweety>
I'm trying to figure out a foolproof incantation within a Genera patch file to do the
following:
1. Define a new function F in package A.
2. Export symbol F from package A.
3. Change an existing function in package B to reference function F as an external
symbol in package A ... that is, A:F.
For example, I have a patch file of the following form:
;;; -*- Mode: LISP; Syntax: Common-lisp; Package: USER; Base: 10; Patch-File: T -*-
;;; Patch file for Private version 0.0
[...]
;=====================================
(SYSTEM-INTERNALS:BEGIN-PATCH-SECTION)
(SYSTEM-INTERNALS:PATCH-SECTION-SOURCE-FILE "AISIS-V2:GANTT;INTERFACE.LISP.11")
(SYSTEM-INTERNALS:PATCH-SECTION-ATTRIBUTES
"-*- Syntax: Common-lisp; Mode: LISP; Default-character-style: (:FIX :ROMAN :NORMAL); Package: GANTT; Lowercase: Yes -*-")
(defun rename (old-name new-name &key (must-be-current t))
...)
(eval-when (load)
(export '(gantt::rename) "gantt"))
;=====================================
(SYSTEM-INTERNALS:BEGIN-PATCH-SECTION)
(SYSTEM-INTERNALS:PATCH-SECTION-SOURCE-FILE "AISIS-V2:INTERFACES;DATA-MEDIATION.LISP.16")
(SYSTEM-INTERNALS:PATCH-SECTION-ATTRIBUTES
"-*- Syntax: Common-lisp; Package: AISIS; Mode: LISP; Default-character-style: (:FIX :ROMAN :NORMAL); Lowercase: Yes -*-")
(defun create-mediated-gantt-chart (new-schedule-start-ut new-schedule-duration
&key model-major-class gi-data)
...
(gantt:rename :foo :bar)
...)
If I reboot, load the appropriate systems, then load this patch file, I get some message
to the effect that I'm trying to reference external symbol gantt:rename which has not been
exported. I made sure that gantt:rename was exported in my world when I compiled the
patch file, but still no go. What's the secret??
-Dave
The complaint is occurring when the loader is seeing the reference to
the symbol in the EXPORT form. At the time that the compiler wrote the
binary file, the symbol was exported, so it wrote a reference to an
external symbol into the bin file. At load time, the symbol isn't yet
exported, so the reference fails.
Change it to:
(eval-when (load)
(export (intern "RENAME" "GANTT") "GANTT"))
barmar