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

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

buffer.c: overlays_at, overlays_in


From: Janek Bogucki
Subject: buffer.c: overlays_at, overlays_in
Date: Wed, 14 Aug 2002 21:30:18 +0100
User-agent: Microsoft-Outlook-Express-Macintosh-Edition/5.0.3

Hi,

I noticed a discrepency between the functions overlays_at and overlays_in in
buffer.c rev 1.399.

Here the effect would be for overlays_in to not extend the vector if it was
zero length initially.

Fragment A: overlays_at
-----------------------

 if (idx == len)
  {
    /* The supplied vector is full.
       Either make it bigger, or don't store any more in it.  */
    if (extend)
      {
        /* Make it work with an initial len == 0.  */
        len *= 2;
        if (len == 0)
          len = 4;
        *len_ptr = len;
        vec = (Lisp_Object *) xrealloc (vec, len * sizeof (Lisp_Object));
        *vec_ptr = vec;
      }
    else
      inhibit_storing = 1;
  }

Fragment B: overlays_in
-----------------------


 if (idx == len)
  {
    /* The supplied vector is full.
       Either make it bigger, or don't store any more in it.  */
    if (extend)
      {
        *len_ptr = len *= 2;
        vec = (Lisp_Object *) xrealloc (vec, len * sizeof (Lisp_Object));
        *vec_ptr = vec;
      }
    else
      inhibit_storing = 1;
  }

Then later in the final for block for each fuction we have a similar
situation.

Fragment C: overlays_at
-----------------------

    if (extend)
      {
        *len_ptr = len *= 2;
        if (len == 0)
          len = *len_ptr = 4;
        vec = (Lisp_Object *) xrealloc (vec, len * sizeof (Lisp_Object));
        *vec_ptr = vec;
      }
    else
      inhibit_storing = 1;

Fragment D: overlays_in
-----------------------

    if (extend)
      {
        *len_ptr = len *= 2;
        vec = (Lisp_Object *) xrealloc (vec, len * sizeof (Lisp_Object));
        *vec_ptr = vec;
      }
    else
      inhibit_storing = 1;

There is also a possibly unwanted stylistic variation between fragment A &
C. In fragment C *len_ptr is assigned to before and in the if statement. In
fragment A *len_ptr is assigned to once, after the if statement.

As someone might say: Happy Hacking!
-Janek Bogucki





reply via email to

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