diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-06 18:41:27 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-06 18:41:27 -0800 |
commit | dede6faac448db4251f8996d7dec6afb5a43726a (patch) | |
tree | dcf34d731bc4626b9e232151acee3673da84adaf /scripts/genksyms/parse.y | |
parent | 21404b772a1c65f7b935b8c0fddc388a949f4e31 (diff) | |
parent | 5f7efb4c6da9f90cb306923ced2a6494d065a595 (diff) |
Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
* 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild:
Kbuild: append missing-syscalls to the default target list
genksyms: Regenerate lexer and parser
genksyms: Do not expand internal types
genksyms: Minor parser cleanup
Makefile: remove a duplicated line
fixdep: fix extraneous dependencies
scripts/Makefile.build: do not reference EXTRA_CFLAGS as CFLAGS replacement
kbuild: prevent make from deleting _shipped files
kbuild: Do not delete empty files in make distclean
Diffstat (limited to 'scripts/genksyms/parse.y')
-rw-r--r-- | scripts/genksyms/parse.y | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/scripts/genksyms/parse.y b/scripts/genksyms/parse.y index ba5c242866c..23c39998ad8 100644 --- a/scripts/genksyms/parse.y +++ b/scripts/genksyms/parse.y @@ -51,6 +51,25 @@ remove_list(struct string_list **pb, struct string_list **pe) free_list(b, e); } +/* Record definition of a struct/union/enum */ +static void record_compound(struct string_list **keyw, + struct string_list **ident, + struct string_list **body, + enum symbol_type type) +{ + struct string_list *b = *body, *i = *ident, *r; + + if (i->in_source_file) { + remove_node(keyw); + (*ident)->tag = type; + remove_list(body, ident); + return; + } + r = copy_node(i); r->tag = type; + r->next = (*keyw)->next; *body = r; (*keyw)->next = NULL; + add_symbol(i->string, type, b, is_extern); +} + %} %token ASM_KEYW @@ -215,26 +234,11 @@ type_specifier: /* Full definitions of an s/u/e. Record it. */ | STRUCT_KEYW IDENT class_body - { struct string_list *s = *$3, *i = *$2, *r; - r = copy_node(i); r->tag = SYM_STRUCT; - r->next = (*$1)->next; *$3 = r; (*$1)->next = NULL; - add_symbol(i->string, SYM_STRUCT, s, is_extern); - $$ = $3; - } + { record_compound($1, $2, $3, SYM_STRUCT); $$ = $3; } | UNION_KEYW IDENT class_body - { struct string_list *s = *$3, *i = *$2, *r; - r = copy_node(i); r->tag = SYM_UNION; - r->next = (*$1)->next; *$3 = r; (*$1)->next = NULL; - add_symbol(i->string, SYM_UNION, s, is_extern); - $$ = $3; - } + { record_compound($1, $2, $3, SYM_UNION); $$ = $3; } | ENUM_KEYW IDENT enum_body - { struct string_list *s = *$3, *i = *$2, *r; - r = copy_node(i); r->tag = SYM_ENUM; - r->next = (*$1)->next; *$3 = r; (*$1)->next = NULL; - add_symbol(i->string, SYM_ENUM, s, is_extern); - $$ = $3; - } + { record_compound($1, $2, $3, SYM_ENUM); $$ = $3; } /* * Anonymous enum definition. Tell add_symbol() to restart its counter. */ |