[Openmcl-devel] Erroneous results if function is untraced

Liam Healy lnp at healy.washington.dc.us
Tue Dec 30 18:51:52 PST 2008

On Tue, Dec 30, 2008 at 9:26 PM, Gary Byers <gb at clozure.com> wrote:
> I can't tell from the above what the problem is, so I don't
> know whether you're seeing a symptom of a known problem or
> something else.
> What does COPY-CL-TO-C do ?  (A reasonable guess is that it copies
> a CL object's contents to foreign memory somewhere/somehow, but
> that's just a guess and it's not clear where that somewhere would
> be.)
> Likewise, what does MPOINTER do ?
> There shouldn't be too much that TRACE does (except for some
> extra printing and consing) that directly affects a function's
> result.   Is there a PRINT-OBJECT method (or structure print-function)
> defined on PERMUTATION ? If so, does that method have side-effects
> that might interact with whatever it is that COPY-CL-TO-C and MPOINTER do ?

Since I'm calling foreign functions with arrays, I need to copy them
over.  You are right about COPY-CL-TO-C, it copies the contents of the
CL array over to the C side, then MPOINTER returns a pointer to the C
structure that holds the array for the foreign function to use.
There is in fact a print-object method defined, and I thought that
might be the key because it has potential side effects, but it doesn't
make any difference if I print the object with tracing off,

? (let ((perm (make-permutation 4 T))) (permutation-reverse perm))
#<PERMUTATION #(0 0 0 0)>
? (let ((perm (make-permutation 4 T))) (print (permutation-reverse perm)))

#<PERMUTATION #(0 0 0 0)>
#<PERMUTATION #(0 0 0 0)>



More information about the Openmcl-devel mailing list