all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: "Herbert Euler" <herberteuler@hotmail.com>
Cc: bug-cc-mode@gnu.org, rms@gnu.org, emacs-devel@gnu.org
Subject: Re: On the behavior of `c-beginning-of-defun'
Date: Sun, 21 Jan 2007 09:19:44 +0800	[thread overview]
Message-ID: <BAY112-F26EF15811F1B3516118311DAAF0@phx.gbl> (raw)

[-- Attachment #1: Type: text/plain, Size: 1745 bytes --]

>Please try out the amended version and let me know if anything's not
>right.

I did not test all cases but only the case that function
`c-beginning-of-defun' fails.  I think it is almost Ok.  However,
please try the following case, it might be a bug.

Suppose `-!-' indicates the position of point.  If point is, for
example, in the body of function `main1':

    /* 1. K&R C.  */

    /* This will not get correct result until the bug in CC mode is fixed.
       See
       http://lists.gnu.org/archive/html/emacs-devel/2006-12/msg01341.html  
*/
    int
    main1 (argc, argv)
         int argc;
         char *argv[];
    {
      -!-/* ...  */
    }

Then `c-beginning-of-defun' moves point to before ``int'':

    /* 1. K&R C.  */

    /* This will not get correct result until the bug in CC mode is fixed.
       See
       http://lists.gnu.org/archive/html/emacs-devel/2006-12/msg01341.html  
*/
    -!-int
    main1 (argc, argv)
         int argc;
         char *argv[];
    {
      /* ...  */
    }

Which is a desired behavior.  But if point is just after ``[]'':

    /* 1. K&R C.  */

    /* This will not get correct result until the bug in CC mode is fixed.
       See
       http://lists.gnu.org/archive/html/emacs-devel/2006-12/msg01341.html  
*/
    int
    main1 (argc, argv)
         int argc;
         char *argv[]-!-;
    {
      /* ...  */
    }

`c-beginning-of-defun' moves point to the start of the file, rather
than the desired position.

This is the only problem I can see until now.  Thank you very much.

Regards,
Guanpeng Xu

_________________________________________________________________
FREE pop-up blocking with the new MSN Toolbar - get it now! 
http://toolbar.msn.click-url.com/go/onm00200415ave/direct/01/

[-- Attachment #2: x.c --]
[-- Type: application/octet-stream, Size: 4754 bytes --]


/* 1. K&R C.  */

/* This will not get correct result until the bug in CC mode is fixed.
   See
   http://lists.gnu.org/archive/html/emacs-devel/2006-12/msg01341.html  */
int
main1 (argc, argv)
     int argc;
     char *argv[];
{
  /* ...  */
}

int
f1 (arg)
     Lisp_Object arg;
{
}

int
f2 (arg)
     Lisp_Object arg;
     /* The `arg' is a Lisp_Object.  */
{
}

DEFUN ("catch", Fcatch1, Scatch, 1, UNEVALLED, 0,
       doc: /* Eval BODY allowing nonlocal exits using `throw'.
TAG is evalled to get the tag to use; it must not be nil.

Then the BODY is executed.
Within BODY, a call to `throw' with the same TAG exits BODY and this `catch'.
If no throw happens, `catch' returns the value of the last BODY form.
If a throw happens, it specifies the value to return from `catch'.
usage: (catch TAG BODY...)  */)
     (args)
     Lisp_Object args;
{
  register Lisp_Object tag;
  struct gcpro gcpro1;

  GCPRO1 (args);
  tag = Feval (Fcar (args));
  UNGCPRO;
  return internal_catch (tag, Fprogn, Fcdr (args));
}

/* Now, some badly formatted code.  */

   int
 main2 (argc, argv)
      int argc;
      char *argv[];
   {
                 /* ...  */
 }

                        int
                                          f3
         (arg)
                  Lisp_Object

           arg


;
     {
}

int                            f4
                (arg)
               Lisp_Object arg;
     /* The `arg' is a Lisp_Object.  */
  {
          }

                      DEFUN ("catch", Fcatch2, Scatch, 1, UNEVALLED, 0,
         doc: /* Eval BODY allowing nonlocal exits using `throw'.
       TAG is evalled to get the tag to use; it must not be nil.

Then the BODY is executed.
Within BODY, a call to `throw' with the same TAG exits BODY and this `catch'.
If no throw happens, `catch' returns the value of the last BODY form.
If a throw happens, it specifies the value to return from `catch'.
usage: (catch TAG BODY...)  */)
     (args)
     Lisp_Object args;
{
  register Lisp_Object tag;
  struct gcpro gcpro1;

  GCPRO1 (args);
                               tag = Feval (Fcar (args));
  UNGCPRO;
           return internal_catch (tag, Fprogn, Fcdr (args));
     }

/* 2. ANSI/ISO C.  */

int
main3 (int argc, char *argv[])
{
}

int
f5 (Lisp_Object arg)
{
}

int
f6 (Lisp_Object arg)
/* The `arg' is a Lisp_Object.  */
{
}

DEFUN ("catch", Fcatch3, Scatch, 1, UNEVALLED, 0,
       doc: /* Eval BODY allowing nonlocal exits using `throw'.
TAG is evalled to get the tag to use; it must not be nil.

Then the BODY is executed.
Within BODY, a call to `throw' with the same TAG exits BODY and this `catch'.
If no throw happens, `catch' returns the value of the last BODY form.
If a throw happens, it specifies the value to return from `catch'.
usage: (catch TAG BODY...)  */)
     (Lisp_Object args)
{
  register Lisp_Object tag;
  struct gcpro gcpro1;

  GCPRO1 (args);
  tag = Feval (Fcar (args));
  UNGCPRO;
  return internal_catch (tag, Fprogn, Fcdr (args));
}

/* Now, some badly formatted code.  */

        int

             main4

 (int
argc,
char *
argv[])
   {
       }

                  int
f7
 (
Lisp_Object
                            arg)
         {
                       }

                        int

        f8

(Lisp_Object
arg)
/* The `arg' is a Lisp_Object.  */
{
}

                        DEFUN ("catch", Fcatch4, Scatch, 1, UNEVALLED, 0,
       doc: /* Eval BODY allowing nonlocal exits using `throw'.
TAG is evalled to get the tag to use; it must not be nil.

Then the BODY is executed.
Within BODY, a call to `throw' with the same TAG exits BODY and this `catch'.
If no throw happens, `catch' returns the value of the last BODY form.
If a throw happens, it specifies the value to return from `catch'.
usage: (catch TAG BODY...)  */)
     (Lisp_Object args)
{
  register Lisp_Object tag;
  struct gcpro gcpro1;

  GCPRO1 (args);
  tag = Feval (Fcar (args));
  UNGCPRO;
  return internal_catch (tag, Fprogn, Fcdr (args));
}

/* 3. C++ functions.  */

int
a_b::c_d::e_f1 ()
{
}

int
a_b
::
c_d::e_f2 ()
{
}

int
  a_b
    ::
      c_d
        ::
          e_f3
            ()
{
}

/* 4. struct, enum, class, union; private, protected, public.  */

/* The cases of `struct' can represent all `struct', `enum', `class',
   and `union'.  */

struct struct1
{
};

struct
struct2
{
};

   struct struct3
{
};

   struct
struct4
{
};

class a_b1 : public c_d
{
};

class a_b2
: public c_d
{
};

class a_b3:
public c_d
{
};

class a_b4
:
public c_d
{
};

    class
a_b5 : public c_d
{
};

 class a_b6
    : public
                   c_d
{
};

 class
 a_b7           :
      public c_d
{
};

   class
a_b8
 :
          public
c_d
{
};

class a_b::c_d1 : public e_f, public g_h 
{
};

class a_b
::
c_d2 
: public
 e_f
,
 public
 g_h 
{
};

[-- Attachment #3: Type: text/plain, Size: 347 bytes --]

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

             reply	other threads:[~2007-01-21  1:19 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-01-21  1:19 Herbert Euler [this message]
2007-01-21  1:22 ` On the behavior of `c-beginning-of-defun' Herbert Euler
2007-01-21 19:33 ` Alan Mackenzie
2007-01-22  2:06   ` Herbert Euler
     [not found] <200612301209.55371.xugp@alibaba-inc.com>
2006-12-30 20:15 ` Alan Mackenzie
2006-12-31  9:40   ` Herbert Euler
2006-12-31 22:13     ` Richard Stallman
2007-01-01 22:30     ` Alan Mackenzie
2007-01-02  1:19       ` Herbert Euler
2007-01-20 19:37 ` Alan Mackenzie

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

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

  git send-email \
    --in-reply-to=BAY112-F26EF15811F1B3516118311DAAF0@phx.gbl \
    --to=herberteuler@hotmail.com \
    --cc=bug-cc-mode@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=rms@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 external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.