Subject: bug#24876: closed (Re: bug#24876: 26.0.50; alist copied by copy-tree shares structure with original)

From: [email-masked] (GNU bug Tracking System)
Date: Sat, 05 Nov 2016 15:39:02 +0000

Your bug report

#24876: 26.0.50; alist copied by copy-tree shares structure with original

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
24876: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=24876
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#24876: 26.0.50; alist copied by copy-tree shares structure with original
From: Johan Bockgård <[email-masked]>
To: [email-masked]
Date: Sat, 05 Nov 2016 16:38:04 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

Fixed in master.

Subject: 26.0.50; alist copied by copy-tree shares structure with original
From: Gemini Lasswell <[email-masked]>
To: [email-masked]
Date: Fri, 04 Nov 2016 08:51:36 -0700
List-Id: <debbugs-submit.debbugs.gnu.org>

copy-tree will recursively copy structures inside of vectors if you pass
it a non-nil vecp argument. But it fails to recursively copy structures
inside of vectors in alists constructed with dotted pairs. To reproduce,
enter the following code into *scratch* and M-x eval-buffer RET:

(defun my-copy-tree-bug ()
  (let* ((vec-ab (vector 'a 'b))
	 (vec-abcd (vector vec-ab (vector 'c 'd)))
	 (vec-alist (list (list 'key vec-abcd)))
	 (vec-alist-copy (copy-tree vec-alist t))
	 (vec-dotted-alist (list (cons 'key vec-abcd)))
	 (vec-dotted-alist-copy (copy-tree vec-dotted-alist t)))
    (message "Before:")
    (message " Original: %S \tCopy: %S" vec-alist vec-alist-copy)
    (message " Original: %S \tCopy: %S" vec-dotted-alist vec-dotted-alist-copy)

    (aset vec-ab 0 'foo)
    (message "After change to original:")
    (message " Original: %S \tCopy: %S" vec-alist vec-alist-copy)
    (message " Original: %S \tCopy: %S" vec-dotted-alist vec-dotted-alist-copy)))

(my-copy-tree-bug)

Result:
The copy is independent of the original of the alist constructed
with a list but not independent of the original of the alist constructed
with a dotted pair.

In GNU Emacs 26.0.50.23 (x86_64-apple-darwin15.6.0, NS appkit-1404.47 Version 10.11.6 (Build 15G1004))
 of 2016-11-03 built on rainbow.local
Repository revision: 1a2e210db7d85d8cf5f7205a0e4acc49f2ac6e67
Windowing system distributor 'Apple', version 10.3.1404
Recent messages:
 Original: ((key . [(foo b) (c d)])) 	Copy: ((key . [(foo b) (c d)]))
" Original: ((key . [(foo b) (c d)])) 	Copy: ((key . [(foo b) (c d)]))"
my-copy-tree-bug
Before:
 Original: ((key [[a b] [c d]])) 	Copy: ((key [[a b] [c d]]))
 Original: ((key . [[a b] [c d]])) 	Copy: ((key . [[a b] [c d]]))
After change to original:
 Original: ((key [[foo b] [c d]])) 	Copy: ((key [[a b] [c d]]))
 Original: ((key . [[foo b] [c d]])) 	Copy: ((key . [[foo b] [c d]]))
" Original: ((key . [[foo b] [c d]])) 	Copy: ((key . [[foo b] [c d]]))"

Configured using:
 'configure --with-ns --disable-ns-self-contained'

Configured features:
JPEG RSVG IMAGEMAGICK NOTIFY ACL GNUTLS LIBXML2 ZLIB TOOLKIT_SCROLL_BARS
NS

Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Emacs-Lisp

Minor modes in effect:
  global-undo-tree-mode: t
  undo-tree-mode: t
  diff-auto-refine-mode: t
  ivy-mode: t
  global-flycheck-mode: t
  flycheck-mode: t
  buffer-face-mode: t
  yas-global-mode: t
  yas-minor-mode: t
  global-company-mode: t
  company-mode: t
  pyvenv-mode: t
  shell-dirtrack-mode: t
  nameless-mode: t
  beacon-mode: t
  rainbow-mode: t
  column-enforce-mode: t
  volatile-highlights-mode: t
  region-state-mode: t
  ws-butler-global-mode: t
  ws-butler-mode: t
  show-smartparens-global-mode: t
  show-smartparens-mode: t
  smartparens-global-mode: t
  smartparens-global-strict-mode: t
  smartparens-strict-mode: t
  smartparens-mode: t
  which-key-mode: t
  modalka-mode: t
  recentf-mode: t
  global-auto-revert-mode: t
  winner-mode: t
  display-time-mode: t
  savehist-mode: t
  override-global-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-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
  size-indication-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message rfc822 mml mml-sec epa derived
epg gnus-util rmail rmail-loaddefs mailabbrev gmm-utils mailheader
tabify add-log log-view pcvs-util vc vc-dispatcher debug origami
origami-parsers ielm pp hl-line hideshow imenu-list imenu visual-regexp
highlight-symbol disp-table fill-column-indicator undo-tree diff
dired-aux expand-region text-mode-expansions cc-mode-expansions
python-el-fgallina-expansions er-basic-expansions expand-region-core
expand-region-custom dash-at-point cc-mode cc-fonts cc-guess cc-menus
cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs eieio-opt speedbar
sb-image ezimage dframe tcover-2 testcover edebug comment-dwim-2 vc-git
diff-mode colir flx dired dired-loaddefs counsel esh-util swiper ivy
delsel ffap flycheck find-func rx face-remap guess-style smtpmail
sendmail mail-utils company-capf company-files yasnippet
highlight-indentation flymake company help-fns radix-tree elpy pyvenv
elpy-refactor smartparens-python python tramp-sh tramp tramp-compat
tramp-loaddefs trampver shell pcomplete format-spec json map grep
compile files-x cus-edit virtualenvwrapper gud comint nameless lisp-mnt
ace-window avy beacon smex ido deft debbugs soap-client mm-decode
mm-bodies mm-encode url-http tls gnutls url-auth mail-parse rfc2231
rfc2047 rfc2045 mm-util ietf-drums mail-prsvr url-gw nsm subr-x puny url
url-proxy url-privacy url-expand url-methods url-history url-cookie
url-domsuf url-util mailcap warnings rng-xsd rng-dt rng-util xsd-regexp
xml rainbow-mode ansi-color color s hydra lv column-enforce-mode etags
xref project volatile-highlights region-state ws-butler
smartparens-config smartparens thingatpt dash which-key modalka quail
smart-mode-line-dark-theme smart-mode-line advice rich-minority
whiteboard-theme classic-theme recentf tree-widget wid-edit autorevert
filenotify winner ring time cus-start cus-load savehist cap-words
superword subword use-package diminish bind-key easy-mmode finder-inf
edmacro kmacro info cl package epg-config url-handlers url-parse
auth-source cl-seq eieio eieio-core cl-macs eieio-loaddefs
password-cache url-vars seq byte-opt gv bytecomp byte-compile cl-extra
help-mode easymenu cconv cl-loaddefs pcase cl-lib time-date mule-util
tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type
mwheel term/ns-win ns-win ucs-normalize term/common-win tool-bar dnd
fontset image regexp-opt fringe tabulated-list newcomment elisp-mode
lisp-mode prog-mode register page menu-bar rfn-eshadow timer select
scroll-bar mouse jit-lock font-lock syntax facemenu font-core
term/tty-colors frame cl-generic cham georgian utf-8-lang misc-lang
vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932
hebrew greek romanian slovak czech european ethiopic indian cyrillic
chinese charscript case-table epa-hook jka-cmpr-hook help simple abbrev
obarray 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 kqueue
cocoa ns multi-tty make-network-process emacs)

Memory information:
((conses 16 755982 118671)
 (symbols 48 47054 1)
 (miscs 40 3486 3707)
 (strings 32 120683 149916)
 (string-bytes 1 3559912)
 (vectors 16 77911)
 (vector-slots 8 1922399 95872)
 (floats 8 1077 1577)
 (intervals 56 28644 4185)
 (buffers 976 37))