unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Pierre Lorenzon <devel@pollock-nageoire.net>
To: 20467@debbugs.gnu.org
Cc: zappo@gnu.org
Subject: bug#20467: 25.0.50; eieio-custom.el
Date: Sat, 02 May 2015 10:10:22 +0200 (CEST)	[thread overview]
Message-ID: <20150502.101022.500436073341208744.devel@pollock-nageoire.net> (raw)
In-Reply-To: <20150502.075040.602513714458775462.devel@pollock-nageoire.net>

[-- Attachment #1: Type: Text/Plain, Size: 20355 bytes --]


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))
>>> 
>>> 
>>> 

[-- Attachment #2: eieio-custom-0502-01.patch --]
[-- Type: Text/X-Patch, Size: 9884 bytes --]

--- 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	other threads:[~2015-05-02  8:10 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-30  5:23 bug#20467: 25.0.50; eieio-custom.el Pierre L. Nageoire, Pierre Lorenzon
2015-04-30  6:39 ` Pierre Lorenzon
2015-05-02  5:50   ` Pierre Lorenzon
2015-05-02  8:10     ` Pierre Lorenzon [this message]
2015-05-05 18:49     ` Stefan Monnier
2015-05-06  3:48       ` Pierre Lorenzon
2015-05-06  4:32         ` Stefan Monnier
2015-05-06  6:48           ` Pierre Lorenzon
2016-07-29  0:55             ` npostavs
2018-09-17  0:45               ` Noam Postavsky

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150502.101022.500436073341208744.devel@pollock-nageoire.net \
    --to=devel@pollock-nageoire.net \
    --cc=20467@debbugs.gnu.org \
    --cc=zappo@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).