[gambit-list] Debugging problem
Marc Feeley
feeley at iro.umontreal.ca
Mon Jan 19 09:24:31 EST 2009
On 19-Jan-09, at 5:27 AM, David Rush wrote:
> 2009/1/19 Marc Feeley <feeley at iro.umontreal.ca>:
>> On 18-Jan-09, at 7:50 PM, David Rush wrote:
>>
>>> *** ERROR IN call-with-values -- (Argument 2) LIST expected
>>> (apply '#<procedure #2> '#<unknown>)
>>>>
>>>> ,be
>>>
>>> 0 call-with-values
>>
>> There's something strange in this backtrace... the procedure
>> call-with-values should never appear in the backtrace! It should be
>> ##call-with-values... so
>>
>> 2) Are you redefining call-with-values in your code?
>
> Exactly right. I'd completely forgotten about it as it was part of an
> old Gambit 3.x compatibility package. My apologies for the waste of
> bandwidth.
>
> david rush
[I'm CCing the Gambit list because this may be of general interest.]
Good to know the problem is solved!
As a general rule, if code works interpreted but not compiled, you
should try compiling your code with no declarations. Then add the
declarations one by one to see which one is causing the problem.
Remember that the validity of declarations is not checked by the
system. The compiler will trust you blindly and if the conditions are
not right the semantics of the compiled code will not match the
semantics of Scheme.
It is perfectly valid to redefine the "call-with-values" and "values"
procedures if you wish to, but if you do you cannot use the standard-
bindings declaration for those procedures. In that case, the proper
declaration to use in your code is:
(declare (standard-bindings)
(not standard-bindings call-with-values values))
Moreover you should not use the block declaration when defining those
procedures because there is more than one assignment to those
variables (i.e. once in your code and once in the runtime system). So
the procedures should be defined like this:
(declare (separate))
(define (values . lst) lst)
(define (call-with-values producer receiver) (apply receiver producer))
(declare (block))
... rest of the code
So when it comes to declarations... you'll be sorry if you lie to the
compiler!
Marc
More information about the Gambit-list
mailing list