[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