Subject: bug#11951: closed (Re: bug#11951: 24.1; Define alist saved incorrectly in hide-ifdef-mode)

From: [email-masked] (GNU bug Tracking System)
Date: Wed, 22 Aug 2012 07:19:02 +0000

Your bug report

#11951: 24.1; Define alist saved incorrectly in hide-ifdef-mode

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].

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

Subject: Re: bug#11951: 24.1; Define alist saved incorrectly in hide-ifdef-mode
From: Glenn Morris <[email-masked]>
To: [email-masked]
Date: Wed, 22 Aug 2012 03:18:24 -0400
List-Id: <debbugs-submit.debbugs.gnu.org>

Version: 24.2

Thank you for the very clear report. I've applied your patch to the
emacs-24 branch.

Subject: 24.1; Define alist saved incorrectly in hide-ifdef-mode
From: Jeremy Moore <[email-masked]>
To: [email-masked]
Date: Mon, 16 Jul 2012 11:51:13 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

hide-ifdef-mode stores the list of current defines incorrectly when

function hide-ifdef-set-define-alist is used.

Steps to reproduce:

1. Start up with emacs -q.

2. Create a new buffer named test.c with the following contents:

#include <stdio.h>

int main(void)

{

#ifdef DEFINE1

       printf("Define 1");

#endif

#ifdef DEFINE2

       printf("Define 2");

#endif

#ifdef DEFINE 3

       printf("Define 3");

#endif

            return 0;

}

3. Hide some ifdefs as follows:

M-x c-mode

M-x hide-ifdef-mode

C-c @ d DEFINE2

C-c @ d DEFINE3

C-c @ h

- Result: DEFINE1 block is hidden, DEFINE2 and DEFINE3 blocks are shown.

4. Store and reload the defines as follows:

C-c @ D test-defines

C-c @ U test-defines

- Result: DEFINE1 and DEFINE2 blocks are hidden, DEFINE3 block is shown

- Expected: DEFINE1 block is hidden, DEFINE2 and DEFINE3 blocks are

shown as before.

5. Examine the stored alist:

M-x eval-expression hide-ifdef-define-alist

- Result: ((test-defines (DEFINE3 . 1) (DEFINE3 . 1)))

- Expected: ((test-defines (DEFINE3 . 1) (DEFINE2 . 1)))

Suggested fix:

I believe there is a bug in function hif-compress-define-list.

(defun hif-compress-define-list (env)

  "Compress the define list ENV into a list of defined symbols only."

  (let ((new-defs nil))

    (dolist (def env new-defs)

->    (if (hif-lookup (car def)) (push (car env) new-defs)))))

Here, I think that (push (car env) new-defs) should have been (push (car
def) new-defs)

In GNU Emacs 24.1.1 (i386-mingw-nt6.1.7601)

 of 2012-06-10 on MARVIN

Windowing system distributor `Microsoft Corp.', version 6.1.7601

Configured using:

 `configure --with-gcc (4.6) --cflags

 -ID:/devel/emacs/libs/libXpm-3.5.8/include

 -ID:/devel/emacs/libs/libXpm-3.5.8/src

 -ID:/devel/emacs/libs/libpng-dev_1.4.3-1/include

 -ID:/devel/emacs/libs/zlib-dev_1.2.5-2/include

 -ID:/devel/emacs/libs/giflib-4.1.4-1/include

 -ID:/devel/emacs/libs/jpeg-6b-4/include

 -ID:/devel/emacs/libs/tiff-3.8.2-1/include

 -ID:/devel/emacs/libs/gnutls-3.0.9/include'

Important settings:

  value of $LC_ALL: nil

  value of $LC_COLLATE: nil

  value of $LC_CTYPE: nil

  value of $LC_MESSAGES: nil

  value of $LC_MONETARY: nil

  value of $LC_NUMERIC: nil

  value of $LC_TIME: nil

  value of $LANG: ENG

  value of $XMODIFIERS: nil

  locale-coding-system: cp1252

  default enable-multibyte-characters: t

Major mode: C/l

Minor modes in effect:

  hide-ifdef-mode: t

  tooltip-mode: t

  mouse-wheel-mode: t

  tool-bar-mode: t

  menu-bar-mode: t

  file-name-shadow-mode: t

  global-font-lock-mode: t

  font-lock-mode: t

  blink-cursor-mode: t

  auto-composition-mode: t

  auto-encryption-mode: t

  auto-compression-mode: t

  line-number-mode: t

  transient-mark-mode: t

  abbrev-mode: t

Load-path shadows:

None found.

Features:

(shadow sort gnus-util 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 mm-util

mail-prsvr mail-utils help-fns kmacro help-mode view hideif cc-mode

cc-fonts easymenu cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine

cc-vars cc-defs regexp-opt time-date tooltip ediff-hook vc-hooks

lisp-float-type mwheel dos-w32 disp-table ls-lisp w32-win w32-vars

tool-bar dnd fontset image fringe lisp-mode register page menu-bar

rfn-eshadow timer select scroll-bar 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 loaddefs button faces

cus-face files text-properties overlay sha1 md5 base64 format env

code-pages mule custom widget hashtable-print-readable backquote

make-network-process multi-tty emacs)