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