From 124215ffb5ba8ae28028588e1f12d2a586d21e20 Mon Sep 17 00:00:00 2001
From: Mathias Hasselmann <mathias.hasselmann@gmx.de>
Date: Tue, 4 Sep 2007 22:30:14 +0200
Subject: [PATCH] Extract init_keyword_table from init_parser for usage in c2xml.

Signed-off-by: Mathias Hasselmann <mathias.hasselmann@gmx.de>
---
 parse.c |   20 +++++++++++---------
 parse.h |    8 ++++++++
 2 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/parse.c b/parse.c
index 2219e86..6aa48ec 100644
--- a/parse.c
+++ b/parse.c
@@ -196,12 +196,7 @@ static struct symbol_op mode_spec_op = {
 	.type = KW_MODE,
 };
 
-static struct init_keyword {
-	const char *name;
-	enum namespace ns;
-	unsigned long modifiers;
-	struct symbol_op *op;
-} keyword_table[] = {
+static struct init_keyword keyword_table[] = {
 	/* Type qualifiers */
 	{ "const",	NS_TYPEDEF, MOD_CONST, .op = &qualifier_op },
 	{ "__const",	NS_TYPEDEF, MOD_CONST, .op = &qualifier_op },
@@ -344,18 +339,25 @@ static struct init_keyword {
 	{ "__destructor__",	NS_KEYWORD,	.op = &ignore_attr_op },
 };
 
-void init_parser(int stream)
+void init_keyword_table (int stream, struct init_keyword *table, size_t length)
 {
 	int i;
-	for (i = 0; i < sizeof keyword_table/sizeof keyword_table[0]; i++) {
-		struct init_keyword *ptr = keyword_table + i;
+
+	for (i = 0; i < length; i++) {
+		struct init_keyword *ptr = table + i;
 		struct symbol *sym = create_symbol(stream, ptr->name, SYM_KEYWORD, ptr->ns);
+
 		sym->ident->keyword = 1;
 		sym->ctype.modifiers = ptr->modifiers;
 		sym->op = ptr->op;
 	}
 }
 
+void init_parser(int stream)
+{
+	init_keyword_table (stream, keyword_table, sizeof keyword_table/sizeof keyword_table[0]);
+}
+
 // Add a symbol to the list of function-local symbols
 static void fn_local_symbol(struct symbol *sym)
 {
diff --git a/parse.h b/parse.h
index 609910f..b1b0ae9 100644
--- a/parse.h
+++ b/parse.h
@@ -115,6 +115,13 @@ struct statement {
 	};
 };
 
+struct init_keyword {
+	const char *name;
+	enum namespace ns;
+	unsigned long modifiers;
+	struct symbol_op *op;
+};
+
 extern struct symbol_list *function_computed_target_list;
 extern struct statement_list *function_computed_goto_list;
 
@@ -133,6 +140,7 @@ extern struct symbol *ctype_fp(unsigned long spec);
 extern void copy_statement(struct statement *src, struct statement *dst);
 extern int inline_function(struct expression *expr, struct symbol *sym);
 extern void uninline(struct symbol *sym);
+extern void init_keyword_table (int stream, struct init_keyword *table, size_t length);
 extern void init_parser(int);
 
 #endif /* PARSE_H */
-- 
1.5.2.3

