bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#20467: 25.0.50; eieio-custom.el


From: Pierre Lorenzon
Subject: bug#20467: 25.0.50; eieio-custom.el
Date: Sat, 02 May 2015 10:10:22 +0200 (CEST)

Hi,

Sorry Eric if you already got this bug report.

This last patch does not correct any error but suggests
alternative implementations for certan loops.


Pierre





From: Pierre Lorenzon <devel@pollock-nageoire.net>
Subject: bug#20467: 25.0.50; eieio-custom.el
Date: Sat, 02 May 2015 07:50:40 +0200 (CEST)

> From: Pierre Lorenzon <devel@pollock-nageoire.net>
> Subject: bug#20467: 25.0.50; eieio-custom.el
> Date: Thu, 30 Apr 2015 08:39:23 +0200 (CEST)
> 
>> OK :
>> 
>> 
>> From: devel@pollock-nageoire.net (Pierre L. Nageoire), Pierre Lorenzon 
>> <devel@pollock-nageoire.net>
>> Subject: bug#20467: 25.0.50; eieio-custom.el
>> Date: Thu, 30 Apr 2015 07:23:43 +0200 (CEST)
>> 
>>> 
>>> --text follows this line--
>>> 
>>> 
>>> eieio-custom.el line 264 : (car slots)
>>> 
>>> but due to recent changes in implementation variable slots is no longer
>>> a list but a vector. So `car' cannot be applied here that causes a wrong
>>> type argument error when trying to customize an object.
>> 
>>   Moreover slot itself is no longer a symbol but a structure
>>   whereas a symbol is needed at this code place.
>> 
>>   so : (eieio-slot-descriptor-name slot) must replace (car
>>   slots).
>> 
>>   There's a joined patch that fix this bug. But now there seems
>>   to be a bug in project saving to that I did not yet identify.
> 
>     In fact i detected an infinit loop in
>     `eieio-object-value-get' function due to not incrementing
>     the integer loop variable. A new patch corrects both
>     previous bug mentioned above and the latter.
> 
> 
>     Pierre
> 
> 
> 
> 
> 
> 
>> 
>>   Pierre
>> 
>>> 
>>> I can try to fix that if you want.
>>> 
>>> Pierre
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> In GNU Emacs 25.0.50.1 (x86_64-unknown-linux-gnu)
>>>  of 2015-04-30 on jabberwocky
>>> Configured using:
>>>  `configure --prefix=/home/emacs'
>>> 
>>> Configured features:
>>> JPEG SOUND NOTIFY ZLIB
>>> 
>>> Important settings:
>>>   value of $LANG: C
>>>   locale-coding-system: nil
>>> 
>>> Major mode: Emacs-Lisp
>>> 
>>> Minor modes in effect:
>>>   global-ede-mode: t
>>>   ede-minor-mode: t
>>>   gpm-mouse-mode: t
>>>   global-speechd-speak-mode: t
>>>   speechd-speak-mode: t
>>>   global-speechd-speak-map-mode: t
>>>   speechd-speak-map-mode: t
>>>   tooltip-mode: t
>>>   electric-indent-mode: t
>>>   menu-bar-mode: t
>>>   file-name-shadow-mode: t
>>>   global-font-lock-mode: t
>>>   font-lock-mode: t
>>>   auto-composition-mode: t
>>>   auto-encryption-mode: t
>>>   auto-compression-mode: t
>>>   line-number-mode: t
>>> 
>>> Recent messages:
>>> 27 (#o33, #x1b, ?\C-\[)
>>> [cl-struct-cl-slot-descriptor expanded nil boolean ((:documentation . 
>>> "State of an object being expanded in speedbar."))]
>>> Entering debugger...
>>> Back to top level
>>> Entering debugger...
>>> Back to top level
>>> Line 264
>>> "Line 264"
>>> Making completion list... [2 times]
>>> line-move-visual: End of buffer
>>> 
>>> Load-path shadows:
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/interfaces/j++-pointed 
>>> hides /home/emacs/share/emacs/site-lisp/jabberwocky/basic/lists/j++-pointed
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/interfaces/j++-interface
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/misc/j++-interface
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/j++-synchronized hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/widgets/j++-synchronized
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/j++-timed hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/widgets/j++-timed
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/files/j++-file hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/project/j++-file
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/test hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/scmel/test
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/project/j++-target 
>>> hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/j++-target
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/processes/j++-asynchronous
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/interfaces/processes/j++-asynchronous
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/processes/j++-process 
>>> hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/interfaces/processes/j++-process
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/processes/j++-synchronous
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/interfaces/processes/j++-synchronous
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/processes/j++-network-stream
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/interfaces/processes/j++-network-stream
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/trees/j++-linked hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/trees/widgets/j++-linked
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/trees/j++-node hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/trees/widgets/j++-node
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/cdrom/j++-discid 
>>> hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/cdrom/components/j++-discid
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/cdrom/components/j++-author
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/cdrom/projects/j++-author
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/cdrom/j++-discid 
>>> hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/cdrom/projects/j++-discid
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/cdrom/components/j++-performer
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/cdrom/projects/j++-performer
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/cdrom/components/j++-piece
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/cdrom/projects/j++-piece
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/project/j++-project 
>>> hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/cdrom/projects/j++-project
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/widgets/j++-flaggable 
>>> hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/databases/items/j++-flaggable
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/cdrom/components/j++-item
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/databases/items/j++-item
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/files/j++-file hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/databases/items/j++-file
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/cdrom/components/j++-person
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/databases/items/j++-person
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/graphs/j++-element 
>>> hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/databases/spreadsheet/j++-element
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/databases/items/j++-latex
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/databases/user/j++-latex
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/trees/j++-node hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/html/nodes/j++-node
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/cdrom/components/j++-item
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/alsa/j++-item
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/alsa/j++-client
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/ecasound/j++-client
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/widgets/j++-bar-title 
>>> hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/ecasound/j++-bar-title
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/scmel/efm/j++-connection
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/festival/j++-connection
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/scmel/efm/j++-driver 
>>> hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/festival/j++-driver
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/scmel/efm/j++-parameters
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/festival/j++-parameters
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/alsa/j++-client
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/festival/j++-client
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/ecasound/j++-mark
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/mixers/j++-mark
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/cdrom/components/j++-piece
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/mixers/j++-piece
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/html/attributes/j++-style
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/html/attributes/b/j++-style
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/html/attributes/j++-style
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/html/attributes/div/j++-style
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/html/attributes/j++-style
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/html/attributes/font/j++-style
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/html/attributes/a/j++-name
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/html/attributes/meta/j++-name
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/html/attributes/j++-style
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/html/attributes/span/j++-style
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/html/attributes/body/j++-bgcolor
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/html/attributes/td/j++-bgcolor
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/html/nodes/j++-text 
>>> hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/project/latex/template/j++-text
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/trees/j++-node hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/project/latex/tree/j++-node
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/ecasound/j++-position
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/project/latex/tree/j++-position
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/html/nodes/j++-root 
>>> hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/project/latex/tree/j++-root
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/html/nodes/j++-text 
>>> hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/project/latex/tree/j++-text
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/ecasound/j++-amplify
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/festival/interfaces/j++-amplify
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/widgets/j++-incdec 
>>> hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/festival/interfaces/j++-incdec
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/ecasound/j++-chain
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/festival/interfaces/j++-chain
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/ecasound/j++-amplify
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/festival/objects/j++-amplify
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/widgets/j++-incdec 
>>> hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/festival/objects/j++-incdec
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/basic/widgets/j++-object 
>>> hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/festival/objects/j++-object
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/ecasound/j++-input
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/festival/objects/j++-input
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/ecasound/j++-chainsetup
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/festival/objects/j++-chainsetup
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/ecasound/j++-chain
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/festival/objects/j++-chain
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/ecasound/j++-output
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/festival/objects/j++-output
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/ecasound/j++-position
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/festival/objects/j++-position
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/festival/objects/j++-play
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/sound/festival/presets/j++-play
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/1.0.0/cross
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/1.2.0/cross
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/1.0.0/data
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/1.2.0/data
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/1.2.0/boot
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/2.1.0/boot
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/1.2.0/cblfs
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/2.1.0/cblfs
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/1.2.0/tools
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/2.1.0/tools
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/1.2.0/tests
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/2.1.0/tests
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/1.0.0/cross
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/2.1.0/cross
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/1.0.0/data
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/2.1.0/data
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/1.2.0/boot
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/development/boot
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/1.2.0/cblfs
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/development/cblfs
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/1.2.0/tools
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/development/tools
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/2.1.0/grub
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/development/grub
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/1.2.0/tests
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/development/tests
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/2.1.0/bash
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/development/bash
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/2.1.0/10.10
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/development/10.10
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/2.1.0/10.25
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/development/10.25
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/2.1.0/eglibc
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/development/eglibc
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/2.1.0/10.53
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/development/10.53
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/2.1.0/10.04
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/development/10.04
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/2.1.0/gcc
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/development/gcc
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/2.1.0/05
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/development/05
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/1.0.0/cross
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/development/cross
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/2.1.0/07
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/development/07
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/2.1.0/06
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/development/06
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/1.0.0/data
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/development/data
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/2.1.0/09
>>>  hides 
>>> /home/emacs/share/emacs/site-lisp/jabberwocky/packages/generator/clfs/data/development/09
>>> 
>>> Features:
>>> (shadow sort mail-extr emacsbug message format-spec rfc822 mml mml-sec
>>> mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils
>>> mailheader sendmail rfc2047 rfc2045 ietf-drums mail-utils find-func
>>> help-mode debug semantic/lex-spp semantic/util-modes semantic/util
>>> semantic semantic/tag semantic/lex semantic/fw mode-local ede/proj
>>> ede/make ede/proj-comp ede/autoconf-edit autoconf autoconf-mode pp
>>> cus-edit ede/custom cus-start cus-load ede/speedbar ede/files ede
>>> ede/detect ede/base ede/auto ede/source eieio-speedbar speedbar sb-image
>>> ezimage image dframe cedet jka-compr misearch multi-isearch info
>>> tool-bar easymenu regexp-opt dired j++-packages-scmel-efm-parameters
>>> j++-packages-scmel-efm-connection t-mouse network-stream nsm auth-source
>>> gnus-util time-date mm-util mail-prsvr password-cache starttls tls
>>> j++-packages-scmel-efm-driver j++-packages-scmel-efm-efm
>>> j++-packages-scmel-monitor j++-basic-widgets-object
>>> j++-packages-scmel-scmel j++-basic-logger j++-basic-files-file
>>> j++-basic-files-serializable j++-basic-files-stringifiable
>>> j++-basic-processes-filtered-network-stream j++-basic-processes-filtered
>>> j++-basic-processes-put-and-get j++-basic-processes-network-stream
>>> j++-basic-processes-process warnings speechd-speak advice help-fns
>>> speechd-brltty speechd-braille braille mmanager brltty speechd-ssip
>>> speechd speechd-out speechd-common eieio-custom wid-edit eieio-base
>>> cl-macs j++ eieio-compat eieio eieio-core cl-generic byte-opt bytecomp
>>> byte-compile cl-extra seq cconv cl gv cl-loaddefs pcase cl-lib mule-util
>>> tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type
>>> tabulated-list newcomment elisp-mode lisp-mode prog-mode register page
>>> menu-bar rfn-eshadow timer select mouse jit-lock font-lock syntax
>>> facemenu font-core frame cham georgian utf-8-lang misc-lang vietnamese
>>> tibetan thai tai-viet lao korean japanese hebrew greek romanian slovak
>>> czech european ethiopic indian cyrillic chinese case-table epa-hook
>>> jka-cmpr-hook help simple abbrev minibuffer cl-preloaded nadvice
>>> loaddefs button faces cus-face macroexp files text-properties overlay
>>> sha1 md5 base64 format env code-pages mule custom widget
>>> hashtable-print-readable backquote inotify multi-tty
>>> make-network-process emacs)
>>> 
>>> Memory information:
>>> ((conses 16 160369 16737)
>>>  (symbols 48 25818 57)
>>>  (miscs 40 271 226)
>>>  (strings 32 32914 6239)
>>>  (string-bytes 1 1076675)
>>>  (vectors 16 20587)
>>>  (vector-slots 8 541737 3136)
>>>  (floats 8 702 175)
>>>  (intervals 56 1216 153)
>>>  (buffers 976 23)
>>>  (heap 1024 44415 1130))
>>> 
>>> 
>>> 
--- eieio-custom.el.orig        2015-04-30 05:34:45.000000000 +0200
+++ eieio-custom.el     2015-05-02 09:53:03.000000000 +0200
@@ -193,8 +193,13 @@
   (let* ((chil nil)
         (obj (widget-get widget :value))
         (master-group (widget-get widget :eieio-group))
-        (cv (eieio--object-class obj))
-        (slots (eieio--class-slots cv)))
+        ;;
+        ;; Not needed here if we implement loop with `mapc'
+        ;; instead of `dotimes'. PLN Sat May  2 09:31:18 2015
+        ;; 
+        ;; (cv (eieio--object-class obj))
+        ;; (slots (eieio--class-slots cv))
+        )
     ;; First line describes the object, but may not editable.
     (if (widget-get widget :eieio-show-name)
        (setq chil (cons (widget-create-child-and-convert
@@ -221,59 +226,80 @@
          (setq groups (cdr groups)))
        (widget-insert "\n\n")))
     ;; Loop over all the slots, creating child widgets.
-    (dotimes (i (length slots))
-      (let* ((slot (aref slots i))
-             (props (cl--slot-descriptor-props slot)))
-        ;; Output this slot if it has a customize flag associated with it.
-        (when (and (alist-get :custom props)
-                   (or (not master-group)
-                       (member master-group (alist-get :group props)))
-                   (slot-boundp obj (cl--slot-descriptor-name slot)))
-          ;; In this case, this slot has a custom type.  Create its
-          ;; children widgets.
-          (let ((type (eieio-filter-slot-type widget (alist-get :custom 
props)))
-                (stuff nil))
-            ;; This next bit is an evil hack to get some EDE functions
-            ;; working the way I like.
-            (if (and (listp type)
-                     (setq stuff (member :slotofchoices type)))
-                (let ((choices (eieio-oref obj (car (cdr stuff))))
-                      (newtype nil))
-                  (while (not (eq (car type) :slotofchoices))
-                    (setq newtype (cons (car type) newtype)
-                          type (cdr type)))
-                  (while choices
-                    (setq newtype (cons (list 'const (car choices))
-                                        newtype)
-                          choices (cdr choices)))
-                  (setq type (nreverse newtype))))
-            (setq chil (cons (widget-create-child-and-convert
-                              widget 'object-slot
-                              :childtype type
-                              :sample-face 'eieio-custom-slot-tag-face
-                              :tag
-                              (concat
-                               (make-string
-                                (or (widget-get widget :indent) 0)
-                                ?\s)
-                               (or (alist-get :label props)
-                                   (let ((s (symbol-name
-                                             (or
-                                              (eieio--class-slot-initarg
-                                               (eieio--object-class obj)
-                                               (car slots))
-                                              (car slots)))))
-                                     (capitalize
-                                      (if (string-match "^:" s)
-                                          (substring s (match-end 0))
-                                        s)))))
-                              :value (slot-value obj (car slots))
-                              :doc  (or (alist-get :documentation props)
-                                        "Slot not Documented.")
-                              :eieio-custom-visibility 'visible
-                              )
-                             chil))
-            ))))
+    ;;
+    ;; Alternative implementation.
+    ;; 
+    ;; (dotimes (i (length slots))
+    ;;   (let* ((slot (aref slots i))
+    (mapc
+     (lambda (slot)
+       (let* ((sym (eieio-slot-descriptor-name slot))
+             (props (cl--slot-descriptor-props slot)))
+            ;; 
+            ;; Output this slot if it has a customize
+            ;; flag associated with it.
+            ;; 
+            (when (and (alist-get :custom props)
+                       (or (not master-group)
+                           (member master-group
+                                   (alist-get :group props)))
+                       (slot-boundp obj sym))
+              ;; 
+              ;; In this case, this slot has a custom
+              ;; type.  Create its children widgets.
+              ;; 
+              (let ((type (eieio-filter-slot-type widget (alist-get :custom 
props)))
+                    (stuff nil))
+                ;; 
+                ;; This next bit is an evil hack to get
+                ;; some EDE functions working the way I
+                ;; like.
+                ;; 
+                (if (and (listp type)
+                         (setq stuff (member :slotofchoices type)))
+                    (let ((choices (eieio-oref obj (car (cdr stuff))))
+                          (newtype nil))
+                      (while (not (eq (car type) :slotofchoices))
+                        (setq newtype (cons (car type) newtype)
+                              type (cdr type)))
+                      (while choices
+                        (setq newtype (cons (list 'const (car choices))
+                                            newtype)
+                              choices (cdr choices)))
+                      (setq type (nreverse newtype))))
+                (setq chil (cons (widget-create-child-and-convert
+                                  widget 'object-slot
+                                  :childtype type
+                                  :sample-face 'eieio-custom-slot-tag-face
+                                  :tag
+                                  (concat
+                                   (make-string
+                                    (or (widget-get widget :indent) 0)
+                                    ?\s)
+                                   (or (alist-get :label props)
+                                       (let ((s (symbol-name
+                                                 (or
+                                                  (eieio--class-slot-initarg
+                                                   (eieio--object-class obj)
+                                                   sym
+                                                   )
+                                                  sym
+                                                  ))))
+                                         (capitalize
+                                          (if (string-match "^:" s)
+                                              (substring s (match-end 0))
+                                            s)))))
+                                  :value (slot-value obj sym)
+                                  :doc  (or (alist-get :documentation props)
+                                            "Slot not Documented.")
+                                  :eieio-custom-visibility 'visible
+                                  )
+                                 chil))
+                ))))
+     (eieio--class-slots (eieio--object-class obj)))
+    ;;
+    ;; End Modified implementation.
+    ;; 
     (widget-put widget :children (nreverse chil))
     ))
 
@@ -287,27 +313,77 @@
                 nil))
         (chil (if (widget-get widget :eieio-show-name)
                   (nthcdr 1 wids) wids))
-        (cv (eieio--object-class obj))
-         (i 0)
-        (slots (eieio--class-slots cv)))
-    ;; If there are any prefix widgets, clear them.
-    ;; -- None yet
-    ;; Create a batch of initargs for each slot.
-    (while (and (< i (length slots)) chil)
-      (let* ((slot (aref slots i))
-             (props (cl--slot-descriptor-props slot))
-             (cust (alist-get :custom props)))
-        (if (and cust
-                 (or eieio-custom-ignore-eieio-co
-                     (not master-group)
-                     (member master-group (alist-get :group props)))
-              (slot-boundp obj (cl--slot-descriptor-name slot)))
-            (progn
-              ;; Only customized slots have widgets
-              (let ((eieio-custom-ignore-eieio-co t))
-                (eieio-oset obj (cl--slot-descriptor-name slot)
-                            (car (widget-apply (car chil) :value-inline))))
-              (setq chil (cdr chil))))))
+        )
+    ;;
+    ;; Not clear that impomentation is more efficient. In fact
+    ;; if customizable slots are concentrated at the beginning
+    ;; of the slot list, previous loop will break earlier due
+    ;; to chil becoming nul. Mor over if there are much more
+    ;; slots than customizable slots, mapc will run over many
+    ;; unuseful slots. PLN Sat May 2 08:10:23 2015
+    ;;
+    ;; Alternative loop implementation
+    (mapc (lambda (slot)
+           (when chil
+             ;;
+             ;; If there are no more children there is no need
+             ;; to do anything..
+             ;; 
+             (let* ((sym
+                     ;; Is it better to use
+                     ;; `eieio-slot-descriptor-name' here or
+                     ;; `cl--slot-descriptor-name' ?
+                     ;;
+                     (eieio-slot-descriptor-name slot))
+                    (props (cl--slot-descriptor-props slot))
+                    (cust (alist-get :custom props))
+                    )
+               (when (and cust
+                          (or eieio-custom-ignore-eieio-co
+                              (not master-group)
+                              (member master-group (alist-get :group props)))
+                          (slot-boundp obj sym))
+                 ;; 
+                 ;; Only customized slots have widgets
+                 ;; 
+                 (let ((eieio-custom-ignore-eieio-co t))
+                   (eieio-oset obj sym
+                               (car (widget-apply (car chil)
+                                                  :value-inline))))
+                 (setq chil (cdr chil)))
+               )))
+         (eieio--class-slots (eieio--object-class obj)))
+    ;; End Alternative loop implementation
+    ;; 
+    ;; 
+    ;;          (cv (eieio--object-class obj))
+    ;;      (i 0)
+    ;;          (slots (eieio--class-slots cv)))
+    ;; ;; If there are any prefix widgets, clear them.
+    ;; ;; -- None yet
+    ;; ;; Create a batch of initargs for each slot.
+    ;; (while (and (< i (length slots)) chil)
+    ;;   (let* ((slot (aref slots i))
+    ;;          (props (cl--slot-descriptor-props slot))
+    ;;          (cust (alist-get :custom props)))
+    ;;         ;;
+    ;;         ;; Shouldn't i be incremented unconditionnaly ? Or
+    ;;         ;; better shouldn't we simply mapc on the slots vector
+    ;;         ;; avoiding use of this integer variable ? PLN Sat May
+    ;;         ;; 2 07:35:45 2015
+    ;;         ;;
+    ;;         (setq i (+ i 1))
+    ;;     (if (and cust
+    ;;              (or eieio-custom-ignore-eieio-co
+    ;;                  (not master-group)
+    ;;                  (member master-group (alist-get :group props)))
+    ;;                (slot-boundp obj (cl--slot-descriptor-name slot)))
+    ;;         (progn
+    ;;           ;; Only customized slots have widgets
+    ;;           (let ((eieio-custom-ignore-eieio-co t))
+    ;;             (eieio-oset obj (cl--slot-descriptor-name slot)
+    ;;                         (car (widget-apply (car chil) :value-inline))))
+    ;;           (setq chil (cdr chil))))))
     ;; Set any name updates on it.
     (if name (eieio-object-set-name-string obj name))
     ;; This is the same object we had before.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]