mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-03 22:20:52 -08:00
(add_declarator, skip_initializer): New functions.
(declaration): Use them.
This commit is contained in:
parent
9e76ae0559
commit
fa8bc89d0d
2 changed files with 86 additions and 38 deletions
|
|
@ -1,3 +1,8 @@
|
|||
2002-03-29 Gerd Moellmann <gerd@gnu.org>
|
||||
|
||||
* ebrowse.c (add_declarator, skip_initializer): New functions.
|
||||
(declaration): Use them.
|
||||
|
||||
2002-03-28 Jason Rumney <jasonr@gnu.org>
|
||||
|
||||
* makefile.w32-in (lisp): Move backquote.elc into emacs-lisp.
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/* ebrowse.c --- parsing files for the ebrowse C++ browser
|
||||
|
||||
Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 99,
|
||||
2000, 2001 Free Software Foundation Inc.
|
||||
2000, 2001, 2002 Free Software Foundation Inc.
|
||||
|
||||
This file is part of GNU Emacs.
|
||||
|
||||
|
|
@ -2423,6 +2423,30 @@ skip_matching ()
|
|||
}
|
||||
}
|
||||
|
||||
int
|
||||
skip_initializer ()
|
||||
{
|
||||
for (;;)
|
||||
{
|
||||
switch (LA1)
|
||||
{
|
||||
case ';':
|
||||
case ',':
|
||||
case YYEOF:
|
||||
return;
|
||||
|
||||
case '{':
|
||||
case '[':
|
||||
case '(':
|
||||
skip_matching ();
|
||||
break;
|
||||
|
||||
default:
|
||||
MATCH ();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Build qualified namespace alias (A::B::c) and return it. */
|
||||
|
||||
|
|
@ -3205,6 +3229,54 @@ class_definition (containing, tag, flags, nested)
|
|||
}
|
||||
}
|
||||
|
||||
/* Add to class *CLS information for the declaration of variable or
|
||||
type *ID. If *CLS is null, this means a global declaration. SC is
|
||||
the storage class of *ID. FLAGS is a bit set giving additional
|
||||
information about the member (see the F_* defines). */
|
||||
|
||||
void
|
||||
add_declarator (cls, id, flags, sc)
|
||||
struct sym **cls;
|
||||
char **id;
|
||||
int flags, sc;
|
||||
{
|
||||
if (LOOKING_AT2 (';', ','))
|
||||
{
|
||||
/* The end of a member variable or of an access declaration
|
||||
`X::f'. To distinguish between them we have to know whether
|
||||
type information has been seen. */
|
||||
if (*id)
|
||||
{
|
||||
char *regexp = matching_regexp ();
|
||||
int pos = BUFFER_POS ();
|
||||
|
||||
if (cls)
|
||||
add_member_defn (cls, *id, regexp, pos, 0, 1, SC_UNKNOWN, flags);
|
||||
else
|
||||
add_global_defn (*id, regexp, pos, 0, 1, sc, flags);
|
||||
}
|
||||
|
||||
MATCH ();
|
||||
print_info ();
|
||||
}
|
||||
else if (LOOKING_AT ('{'))
|
||||
{
|
||||
if (sc == SC_TYPE && *id)
|
||||
{
|
||||
/* A named enumeration. */
|
||||
char *regexp = matching_regexp ();
|
||||
int pos = BUFFER_POS ();
|
||||
add_global_defn (*id, regexp, pos, 0, 1, sc, flags);
|
||||
}
|
||||
|
||||
skip_matching ();
|
||||
print_info ();
|
||||
}
|
||||
|
||||
xfree (*id);
|
||||
*id = NULL;
|
||||
*cls = NULL;
|
||||
}
|
||||
|
||||
/* Parse a declaration. */
|
||||
|
||||
|
|
@ -3259,11 +3331,15 @@ declaration (flags)
|
|||
}
|
||||
|
||||
case '=':
|
||||
/* Assumed to be the start of an initialization in this context.
|
||||
Skip over everything up to ';'. */
|
||||
skip_to (';');
|
||||
/* Assumed to be the start of an initialization in this
|
||||
context. */
|
||||
skip_initializer ();
|
||||
break;
|
||||
|
||||
case ',':
|
||||
add_declarator (&cls, &id, flags, sc);
|
||||
break;
|
||||
|
||||
case OPERATOR:
|
||||
{
|
||||
char *s = operator_name (&sc);
|
||||
|
|
@ -3350,40 +3426,7 @@ declaration (flags)
|
|||
}
|
||||
}
|
||||
|
||||
if (LOOKING_AT (';'))
|
||||
{
|
||||
/* The end of a member variable or of an access declaration
|
||||
`X::f'. To distinguish between them we have to know whether
|
||||
type information has been seen. */
|
||||
if (id)
|
||||
{
|
||||
char *regexp = matching_regexp ();
|
||||
int pos = BUFFER_POS ();
|
||||
|
||||
if (cls)
|
||||
add_member_defn (cls, id, regexp, pos, 0, 1, SC_UNKNOWN, flags);
|
||||
else
|
||||
add_global_defn (id, regexp, pos, 0, 1, sc, flags);
|
||||
}
|
||||
|
||||
MATCH ();
|
||||
print_info ();
|
||||
}
|
||||
else if (LOOKING_AT ('{'))
|
||||
{
|
||||
if (sc == SC_TYPE && id)
|
||||
{
|
||||
/* A named enumeration. */
|
||||
regexp = matching_regexp ();
|
||||
pos = BUFFER_POS ();
|
||||
add_global_defn (id, regexp, pos, 0, 1, sc, flags);
|
||||
}
|
||||
|
||||
skip_matching ();
|
||||
print_info ();
|
||||
}
|
||||
|
||||
xfree (id);
|
||||
add_declarator (&cls, &id, flags, sc);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue