aboutsummaryrefslogtreecommitdiffstats
path: root/lib-src
diff options
context:
space:
mode:
authorFrancesco Potortì2007-11-20 16:17:40 +0000
committerFrancesco Potortì2007-11-20 16:17:40 +0000
commit37dddac63c5ce29a85c74387c0f959b960e05c9d (patch)
tree4a09e4ad49ee2e78f165f290d20e93673b724de3 /lib-src
parent61ec9e85144dfb30deb0bc23e1bb825c8f387b58 (diff)
downloademacs-37dddac63c5ce29a85c74387c0f959b960e05c9d.tar.gz
emacs-37dddac63c5ce29a85c74387c0f959b960e05c9d.zip
Backporting bug corrections from trunk.
2007-11-15 Francesco Potort�<pot@gnu.org> * etags.c: (C_entries): In case '}' decrement bracelev before testing it. 2007-11-15 Masatake YAMATO <jet@gyve.org> * etags.c (C_entries): In case '}', set fvdef to fvnone unconditioned to (!ignoreindent && lp == newlb.buffer + 1). 2007-11-15 Francesco Potort�<pot@gnu.org> * etags.c: (C_entries): Reset the fvdef machine when out of function. (C_entries): Parse start of C comment as a space == end of token. This is not necessary for C++ comment, already parsed as newline.
Diffstat (limited to 'lib-src')
-rw-r--r--lib-src/etags.c36
1 files changed, 17 insertions, 19 deletions
diff --git a/lib-src/etags.c b/lib-src/etags.c
index 5da144c46b0..47db26a5dd7 100644
--- a/lib-src/etags.c
+++ b/lib-src/etags.c
@@ -61,10 +61,10 @@ University of California, as described above. */
61 61
62/* 62/*
63 * Authors: 63 * Authors:
64 * Ctags originally by Ken Arnold. 64 * 1983 Ctags originally by Ken Arnold.
65 * Fortran added by Jim Kleckner. 65 * 1984 Fortran added by Jim Kleckner.
66 * Ed Pelegri-Llopart added C typedefs. 66 * 1984 Ed Pelegri-Llopart added C typedefs.
67 * Gnu Emacs TAGS format and modifications by RMS? 67 * 1985 Emacs TAGS format by Richard Stallman.
68 * 1989 Sam Kendall added C++. 68 * 1989 Sam Kendall added C++.
69 * 1992 Joseph B. Wells improved C and C++ parsing. 69 * 1992 Joseph B. Wells improved C and C++ parsing.
70 * 1993 Francesco Potortì reorganised C and C++. 70 * 1993 Francesco Potortì reorganised C and C++.
@@ -876,7 +876,7 @@ etags --help --lang=ada.");
876# define EMACS_NAME "standalone" 876# define EMACS_NAME "standalone"
877#endif 877#endif
878#ifndef VERSION 878#ifndef VERSION
879# define VERSION "version" 879# define VERSION "17.26"
880#endif 880#endif
881static void 881static void
882print_version () 882print_version ()
@@ -1468,6 +1468,7 @@ main (argc, argv)
1468 exit (EXIT_SUCCESS); 1468 exit (EXIT_SUCCESS);
1469 } 1469 }
1470 1470
1471 /* From here on, we are in (CTAGS && !cxref_style) */
1471 if (update) 1472 if (update)
1472 { 1473 {
1473 char cmd[BUFSIZ]; 1474 char cmd[BUFSIZ];
@@ -2976,11 +2977,6 @@ consider_token (str, len, c, c_extp, bracelev, parlev, is_func_or_var)
2976 return TRUE; 2977 return TRUE;
2977 } 2978 }
2978 2979
2979 /*
2980 * This structdef business is NOT invoked when we are ctags and the
2981 * file is plain C. This is because a struct tag may have the same
2982 * name as another tag, and this loses with ctags.
2983 */
2984 switch (toktype) 2980 switch (toktype)
2985 { 2981 {
2986 case st_C_javastruct: 2982 case st_C_javastruct:
@@ -3398,16 +3394,14 @@ C_entries (c_ext, inf)
3398 case '/': 3394 case '/':
3399 if (*lp == '*') 3395 if (*lp == '*')
3400 { 3396 {
3401 lp++;
3402 incomm = TRUE; 3397 incomm = TRUE;
3403 continue; 3398 lp++;
3399 c = ' ';
3404 } 3400 }
3405 else if (/* cplpl && */ *lp == '/') 3401 else if (/* cplpl && */ *lp == '/')
3406 { 3402 {
3407 c = '\0'; 3403 c = '\0';
3408 break;
3409 } 3404 }
3410 else
3411 break; 3405 break;
3412 case '%': 3406 case '%':
3413 if ((c_ext & YACC) && *lp == '%') 3407 if ((c_ext & YACC) && *lp == '%')
@@ -3950,7 +3944,7 @@ C_entries (c_ext, inf)
3950 make_C_tag (FALSE); /* a struct or enum */ 3944 make_C_tag (FALSE); /* a struct or enum */
3951 break; 3945 break;
3952 } 3946 }
3953 bracelev++; 3947 bracelev += 1;
3954 break; 3948 break;
3955 case '*': 3949 case '*':
3956 if (definedef != dnone) 3950 if (definedef != dnone)
@@ -3964,17 +3958,21 @@ C_entries (c_ext, inf)
3964 case '}': 3958 case '}':
3965 if (definedef != dnone) 3959 if (definedef != dnone)
3966 break; 3960 break;
3961 bracelev -= 1;
3967 if (!ignoreindent && lp == newlb.buffer + 1) 3962 if (!ignoreindent && lp == newlb.buffer + 1)
3968 { 3963 {
3969 if (bracelev != 0) 3964 if (bracelev != 0)
3970 token.valid = FALSE; 3965 token.valid = FALSE; /* unexpected value, token unreliable */
3971 bracelev = 0; /* reset brace level if first column */ 3966 bracelev = 0; /* reset brace level if first column */
3972 parlev = 0; /* also reset paren level, just in case... */ 3967 parlev = 0; /* also reset paren level, just in case... */
3973 } 3968 }
3974 else if (bracelev > 0) 3969 else if (bracelev < 0)
3975 bracelev--; 3970 {
3976 else
3977 token.valid = FALSE; /* something gone amiss, token unreliable */ 3971 token.valid = FALSE; /* something gone amiss, token unreliable */
3972 bracelev = 0;
3973 }
3974 if (bracelev == 0 && fvdef == vignore)
3975 fvdef = fvnone; /* end of function */
3978 popclass_above (bracelev); 3976 popclass_above (bracelev);
3979 structdef = snone; 3977 structdef = snone;
3980 /* Only if typdef == tinbody is typdefbracelev significant. */ 3978 /* Only if typdef == tinbody is typdefbracelev significant. */