diff options
| author | Francesco Potortì | 2007-11-20 16:17:40 +0000 |
|---|---|---|
| committer | Francesco Potortì | 2007-11-20 16:17:40 +0000 |
| commit | 37dddac63c5ce29a85c74387c0f959b960e05c9d (patch) | |
| tree | 4a09e4ad49ee2e78f165f290d20e93673b724de3 /lib-src | |
| parent | 61ec9e85144dfb30deb0bc23e1bb825c8f387b58 (diff) | |
| download | emacs-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.c | 36 |
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 |
| 881 | static void | 881 | static void |
| 882 | print_version () | 882 | print_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. */ |