Subject: [clisp-list] strange interaction between clisp / clocc's defsystem-3.x

From: Christian Schuhegger <[email-masked]>
Date: Wed Feb 26 08:35:08 2003

hello,

i am having difficulties with some code which works fine in clisp 2.30 
as long as i only use the default require / provides mechanism for 
defining dependencies. but when i use defsystem from clocc i get an error.

the original program is not mine, and i am just trying to understand it, 
but in the attached file you can see the part of the code that produces 
the problem. when i load the original program (not this boiled down test 
file) with defsystem i get the following problem:

1. Break [16]> (type-of jt-node)
JT-NODE
1. Break [21]> (get-setf-expansion '(jt-table jt-node))
(#:G2873) ;
(JT-NODE) ;
(#:G2874) ;
(SYSTEM::%STRUCTURE-STORE 'JT-SEPARATOR #:G2873 2 #:G2874) ;
(JT-TABLE #:G2873)

i have an object of type jt-node, but the setf expansion wants to have a 
jt-separator object and the error produced looks like this:

*** - SYSTEM::%STRUCTURE-STORE:
#S(JT-NODE :VARIABLES (BOWEL FAMILY DOG)
    :TABLE
    #3A(((1.0 1.0) (1.0 1.0))
        ((1.0 1.0) (1.0 1.0)))
    :NAME #:C2845 :NEIGHBOURS NIL) is not a structure of type JT-SEPARATOR

i did not find any defsetf or similar in the original program which 
would have an influence on the behaviour of the jt-table slot. and 
besides that everything works fine with require / provides.

the single test file is just giving the bare minimum of the program and 
i am not able to reproduce the problem with this signle test file, but i 
am able to reproduce it in the original program.

my question is now if anybody could tell me if there are certain 
pitfalls i should watchout for in order to debug this problem?

many thanks for any hints!!
-- 
Christian Schuhegger

(defstruct (jt-element (:conc-name jt-))
  variables
  table)
  
(defstruct (jt-finding (:include jt-element) (:conc-name jt-)))

(defstruct (jt-node (:include jt-element) (:conc-name jt-))
  name
  neighbours)

(defstruct (jt-separator (:include jt-element) (:conc-name jt-))
  neighbour1
  neighbour2)

(defvar *my-jt-node* (make-jt-node :name 1 :variables 2 :table 3))
(setf (jt-table *my-jt-node*) 4)