Lisp HUG Maillist Archive

Question about FLI:WITH-DYNAMIC-FOREIGN-OBJECTS

Hello,

If I have the following definitions :


(fli:define-c-struct (mt-timestamp (:foreign-name "xxx"))
                     (year mt-short)
                     (month mt-short)
                     (day mt-short)
                     (hour mt-short)
                     (minute mt-short)
                     (second mt-short)
                     (microsecs mt-integer))
(fli:define-c-typedef (mt-timestamp (:foreign-name "xxx"))
                      (:struct mt-timestamp))


(defclass mh-timestamp ()
  ((fs :initform (let ((fs (fli:allocate-dynamic-foreign-object :type 'mt-
timestamp)))
                   (setf (fli:foreign-slot-value fs 'microsecs) 0)
                   (setf (fli:foreign-slot-value fs 'second) 0)
                   (setf (fli:foreign-slot-value fs 'minute) 0)
                   (setf (fli:foreign-slot-value fs 'hour) 0)
                   (setf (fli:foreign-slot-value fs 'day) 1)
                   (setf (fli:foreign-slot-value fs 'month) 1)
                   (setf (fli:foreign-slot-value fs 'year) 2003)
                   fs
                   )
))
)

I suppose, that if I write in the listener

CL-USER 77 > (fli:with-dynamic-foreign-objects () (setq x (make-instance 'mh-
timestamp)) x)
#<MH-TIMESTAMP 205F28E4>

CL-USER 78 > (inspect x)

#<MH-TIMESTAMP 205F28E4> is a MH-TIMESTAMP
FS      #<Pointer to type MT-TIMESTAMP = #x007C4208>

I see that the pointer 'FS is not NIL.

Why? I have allocated it with 'FLI:WITH-DYNAMIC-FOREIGN-OBJECTS and now I'm out 
of its scope.


If I further write:

CL-USER 13 > (fli:with-dynamic-foreign-objects () (setq x (make-instance 'mh-
timestamp)) x)
#<MH-TIMESTAMP 205E9B14>

CL-USER 14 > (fli:foreign-slot-value (slot-value x 'fs) 'year)
2003

CL-USER 15 > (fli:foreign-slot-value (slot-value x 'fs) 'year)
2003

CL-USER 16 > x
#<MH-TIMESTAMP 205E9B14>

CL-USER 17 > (fli:foreign-slot-value (slot-value x 'fs) 'year)
2003


But if I start now the graphical inspector I see meaningless values for the 
slots of 'FS

CL-USER 18 > x
#<MH-TIMESTAMP 205E9B14>

CL-USER 19 > :gi

CL-USER 20 > (fli:foreign-slot-value (slot-value x 'fs) 'year)
221619568

What does this mean?


Can somebody help me to see what I'm missing in my understanding about CLOS and 
FLI?

With best regards


Updated at: 2020-12-10 09:00 UTC