[Openmcl-devel] CCL Win32 confuses equally named functions
Wimpie Nortje
wimpie at selectiveshare.com
Mon Jun 8 10:23:41 PDT 2015
Bill,
Thanks for the thorough explanation. After Hans' answer and reading up
on the topic I figured out where I misunderstood the package system.
SBCL also gives me the same error when I load the systems in just the
right way, otherwise there are no warnings. And yet it worked well
enough until now that I have never had reason to inspect the issue. This
scares me.
--
Wimpie Nortje
Strongroom - Host-proof notepad
Selective Share - Encryption-as-a-Service
https://www.selectiveshare.com[1]
On Mon, Jun 8, 2015, at 04:33 PM, Bill St. Clair wrote:
> Wimpie,
>
> Your code behaved as it did because your USE of the ENCRYPTION package by the DIRECTOR package, as Hans surmised, caused the GENERATE-KEY definition in the DIRECTOR package to overwrite the definition in the ENCRYPTION package, since DIRECTOR:GENERATE-KEY is the same symbol as ENCRYPTION:GENERATE-KEY.
>
> How your code ever "worked" I don't know, but since you said it did, I tried it in 64-bit Darwin, x8664 Linux, 32-bit ARM Linux, and both 32-bit and 64-bit Windows. Same error on all platforms: "In the call to GENERATE-KEY with arguments (NEW-USER NEW-PASSWD *LIBRARY-KEYS-DIR*), 3 arguments were provided, but at most 2 are accepted". To behave otherwise would be a bug in the package system.
>
> -Bill
>
> On Mon, Jun 8, 2015 at 8:09 AM, Wimpie Nortje <wimpie at selectiveshare.com> wrote:
>> __
>> Thanks, I will do that.
>>
>>
>> --
>> Wimpie Nortje
>> Strongroom - Host-proof notepad
>> Selective Share - Encryption-as-a-Service
>> https://www.selectiveshare.com[2]
>>
>>
>>
>> On Mon, Jun 8, 2015, at 02:05 PM, Hans Hübner wrote:
>>> Wimpie,
>>>
>>> the problem is caused by:
>>>
>>> (defpackage #:director
>>> (:use #:cl
>>> #:encryption)
>>> (:export #:generate-key))
>>>
>>> I would recommend not :USEing the #:encryption package and instead qualify all external symbols.
>>>
>>> -Hans
>>>
>>> 2015-06-08 8:00 GMT-04:00 Wimpie Nortje <wimpie at selectiveshare.com>:
>>>> __
>>>> Hans,
>>>>
>>>> The example is below. I put all of it in a single file. When I load the file I get
>>>>
>>>> ;Compiler warnings for "bug.lisp" :
>>>> ; In GENERATE-KEY: In the call to GENERATE-KEY with arguments (NEW-USER NEW-PASSWD *LIBRARY-KEYS-DIR*),
>>>> ; 3 arguments were provided, but at most 2 are accepted
>>>> ; by the lexically visible definition of GENERATE-KEY
>>>>
>>>> In the real project this was hidden by Quicklisp. It also fails on both CCL linux 64b and SBCL linux 64b with the same warning. So this was my mistake. I will have to read up on scoping rules again.
>>>>
>>>> Thanks for your time.
>>>>
>>>>
>>>> #|****************************************************************************|#
>>>> (in-package #:cl-user)
>>>>
>>>> (defpackage #:encryption
>>>> (:use #:cl)
>>>> (:export #:generate-key))
>>>>
>>>> (in-package #:encryption)
>>>>
>>>> (defun generate-key (new-user new-passwd home-dir
>>>> &optional (out *standard-output*))
>>>> (declare (ignore new-user new-passwd home-dir out))
>>>> (print "Correct function called."))
>>>>
>>>> #|****************************************************************************|#
>>>> (in-package #:cl-user)
>>>>
>>>> (defpackage #:director
>>>> (:use #:cl
>>>> #:encryption)
>>>> (:export #:generate-key))
>>>>
>>>> (in-package #:director)
>>>>
>>>> (defparameter *library-keys-dir* #P"C:/tmp/keys")
>>>>
>>>> (defun generate-key (new-user new-passwd)
>>>> (encryption:generate-key new-user new-passwd *library-keys-dir*))
>>>>
>>>> #|****************************************************************************|#
>>>> (in-package :cl-user)
>>>>
>>>> (defpackage #:main
>>>> (:use #:cl))
>>>>
>>>> (in-package #:main)
>>>>
>>>> (director:generate-key "username" "gpg-passphrase")
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Wimpie Nortje
>>>> Strongroom - Host-proof notepad
>>>> Selective Share - Encryption-as-a-Service
>>>> https://www.selectiveshare.com[3]
>>>>
>>>>
>>>>
>>>> On Mon, Jun 8, 2015, at 01:16 PM, Hans Hübner wrote:
>>>>> Wimpie,
>>>>>
>>>>> can you please supply us with a complete, working example of code that demonstrates the problem, in particular including the defpackage forms?
>>>>>
>>>>> Thanks,
>>>>> Hans
>>>>>
>>>>> 2015-06-08 7:03 GMT-04:00 Wimpie Nortje <wimpie at selectiveshare.com>:
>>>>>> Hi everyone,
>>>>>>
>>>>>>
I am porting my application from linux 64b to windows 32b. On windows
>>>>>>
CCL calls the wrong function while it works fine in linux.
>>>>>>
>>>>>>
In principle the code looks like this
>>>>>>
>>>>>>
(in-package :b)
>>>>>>
(defun fn (par1 par2 &optional (out *standard-output*)) [3]
>>>>>>
(do-stuff))
>>>>>>
>>>>>>
(in-package :a)
>>>>>>
(defun fn (par1 par2) [2]
>>>>>>
(b:fn par1 par2 *some-global*)) [1]
>>>>>>
>>>>>>
(in-package :main)
>>>>>>
(a:fn Val1 Val2)
>>>>>>
>>>>>>
>>>>>>
When I run this I get the following error:
>>>>>>
Too many arguments in call to #<Compiled-function B:FN #xE0A390E>:
>>>>>>
3 arguments provided, at most 2 accepted.
>>>>>>
[Condition of type CCL::TOO-MANY-ARGUMENTS]
>>>>>>
>>>>>>
It seems that the function call at [1] is calling the definition at [2]
>>>>>>
instead of the one at [3]. Also, when I do M-. (slime-edit-definition)
>>>>>>
at [1] it jumps to [2].
>>>>>>
>>>>>>
If I rename b:fn to something else without any other code changes, it
>>>>>>
works.
>>>>>>
>>>>>>
This code works unmodified on linux 64b. I have not yet tried on windows
>>>>>>
64b
>>>>>>
>>>>>>
Is this a bug or am I doing something wrong?
>>>>>>
>>>>>>
I am running CCL Version 1.10-r16196 (WindowsX8632) on Windows XP SP3.
>>>>>>
>>>>>>
>>>>>>
--
>>>>>>
Wimpie Nortje
>>>>>>
Strongroom - Host-proof notepad
>>>>>>
Selective Share - Encryption-as-a-Service
>>>>>> https://www.selectiveshare.com
>>>>>>
_______________________________________________
>>>>>>
Openmcl-devel mailing list
>>>>>> Openmcl-devel at clozure.com
>>>>>> https://lists.clozure.com/mailman/listinfo/openmcl-devel
>>>>>
>>>>
>>>
>>
>> _______________________________________________
>> Openmcl-devel mailing list
>> Openmcl-devel at clozure.com
>> https://lists.clozure.com/mailman/listinfo/openmcl-devel
>>
>
Links:
1. https://www.selectiveshare.com/?pk_campaign=email-sig
2. https://www.selectiveshare.com/?pk_campaign=email-sig
3. https://www.selectiveshare.com/?pk_campaign=email-sig
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.clozure.com/pipermail/openmcl-devel/attachments/20150608/285e54c8/attachment.htm>
More information about the Openmcl-devel
mailing list