[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Main] Concentrate options.
From: |
Pascal Bart |
Subject: |
[Main] Concentrate options. |
Date: |
Thu, 30 Aug 2001 08:32:45 +0000 (GMT) |
Hello,
Here a patch to concentrate all options in one point, in fact I've
create two files, options.{c,h}, which work only about options stuff.
I've got any little problems with `getopt.h', so I need to convert my
table in another table (a little stupid, but I've not the choice for the
moment). So tell me, what do you think about it ?
(Notice : Patch wasn't synchronise with latest CVS version.)
? src/options.c
? src/options.h
cvs server: Diffing .
Index: ChangeLog
===================================================================
RCS file: /cvsroot/bison/bison/ChangeLog,v
retrieving revision 1.194
diff -u -r1.194 ChangeLog
--- ChangeLog 2001/08/29 14:17:00 1.194
+++ ChangeLog 2001/08/29 23:10:03
@@ -1,3 +1,37 @@
+2001-08-30 Pascal Bart <address@hidden>
+
+ * src/options.h (struct percent_table_struct): Delete.
+ (percent_table): Delete.
+
+ * src/options.c (option_table): "Unstatic" option_table.
+ * src/lex.c (parse_percent_token): Change type of variable `tx', which
+ is now an option_table_struct*.
+
+ * src/getargs.c (xalloc.h): Include it.
+ (getargs): Call create_long_option_table.
+ (getargs): Free longopts at the end of the function.
+
+ * src/options.c (create_long_option_table): New function. Convert
+ information from option_table to option structure.
+
+ * src/reader.c (options.h): Include it.
+ * src/lex.c (options.h): Include it.
+
+ * src/Makefile.am: Adjust.
+
+ * src/options.c (option_table): Create from longopts and percent_table.
+ * src/getargs.c (longopts); Delete.
+ * src/lex.c (percent_table): Delete.
+ Delete struct percent_table_struct declarations.
+
+ * src/options.h: Declare enum opt_access_e.
+ Define struct option_table_struct.
+ Copy declarations of struct percent_table_struct from `lex.c'.
+
+ * src/options.h: Create.
+ Copy enum token_e from `lex.h'.
+ * src/lex.h: Delete enum token_e.
+
2001-08-29 Marc Autret <address@hidden>
* src/bison.simple: Add %%user_code directive at the end.
cvs server: Diffing config
cvs server: Diffing doc
cvs server: Diffing etc
cvs server: Diffing intl
cvs server: Diffing lib
cvs server: Diffing m4
cvs server: Diffing po
cvs server: Diffing src
Index: src/Makefile.am
===================================================================
RCS file: /cvsroot/bison/bison/src/Makefile.am,v
retrieving revision 1.28
diff -u -r1.28 Makefile.am
--- src/Makefile.am 2001/08/25 14:21:46 1.28
+++ src/Makefile.am 2001/08/29 23:10:03
@@ -14,7 +14,7 @@
derives.c \
files.c getargs.c gram.c lalr.c lex.c main.c nullable.c \
output.c \
- macrotab.c \
+ macrotab.c options.c \
print.c reader.c reduce.c symtab.c warshall.c vcg.c print_graph.c
EXTRA_bison_SOURCES = vmsgetargs.c
@@ -23,7 +23,7 @@
derives.h \
files.h getargs.h gram.h lalr.h lex.h nullable.h \
output.h state.h \
- macrotab.h \
+ macrotab.h options.h \
print.h reader.h reduce.h symtab.h warshall.h system.h types.h \
vcg.h vcg_defaults.h print_graph.h
Index: src/getargs.c
===================================================================
RCS file: /cvsroot/bison/bison/src/getargs.c,v
retrieving revision 1.24
diff -u -r1.24 getargs.c
--- src/getargs.c 2001/08/06 09:22:33 1.24
+++ src/getargs.c 2001/08/29 23:10:03
@@ -20,10 +20,12 @@
#include <stdio.h>
#include "getopt.h"
+#include "xalloc.h"
#include "system.h"
#include "files.h"
#include "complain.h"
#include "getargs.h"
+#include "options.h"
int debug_flag = 0;
int defines_flag = 0;
@@ -39,37 +41,6 @@
const char *skeleton = NULL;
extern char *program_name;
-const char *shortopts = "yvgdhrltknVo:b:p:S:";
-static struct option longopts[] =
-{
- /* Operation modes. */
- {"help", no_argument, 0, 'h'},
- {"version", no_argument, 0, 'V'},
- {"yacc", no_argument, 0, 'y'},
- {"fixed-output-files",no_argument, 0, 'y'},
-
- /* Parser. */
- {"skeleton", required_argument, 0, 'S'},
- {"debug", no_argument, 0, 'd'},
- {"locations", no_argument, &locations_flag, 1},
- /* was 'a'; apparently unused -wjh */
- {"name-prefix", required_argument, 0, 'p'},
- {"no-lines", no_argument, 0, 'l'},
- {"no-parser", no_argument, 0, 'n'},
- {"raw", no_argument, 0, 'r'},
- {"token-table", no_argument, 0, 'k'},
-
- /* Output. */
- {"defines", no_argument, 0, 'd'},
- {"verbose", no_argument, 0, 'v'},
- {"file-prefix", required_argument, 0, 'b'},
- {"output-file", required_argument, 0, 'o'},
- {"graph", no_argument, 0, 'g'},
-
- /* Hidden. */
- {"statistics", no_argument, &statistics_flag, 1},
- {0, 0, 0, 0}
-};
/*---------------------------.
| Display the help message. |
@@ -161,6 +132,7 @@
{
int c;
+ create_long_option_table ();
while ((c = getopt_long (argc, argv, shortopts, longopts, NULL)) != EOF)
switch (c)
{
@@ -234,6 +206,7 @@
exit (1);
}
+ XFREE (longopts);
if (optind == argc)
{
fprintf (stderr, _("%s: no grammar file given\n"), program_name);
Index: src/lex.c
===================================================================
RCS file: /cvsroot/bison/bison/src/lex.c,v
retrieving revision 1.36
diff -u -r1.36 lex.c
--- src/lex.c 2001/08/25 14:27:57 1.36
+++ src/lex.c 2001/08/29 23:10:03
@@ -23,6 +23,7 @@
#include "files.h"
#include "getopt.h" /* for optarg */
#include "symtab.h"
+#include "options.h"
#include "lex.h"
#include "xalloc.h"
#include "complain.h"
@@ -509,60 +510,6 @@
}
}
-/* the following table dictates the action taken for the various %
- directives. A set_flag value causes the named flag to be set. A
- retval action returns the code. */
-struct percent_table_struct
-{
- const char *name;
- void *set_flag;
- int retval;
-};
-
-struct percent_table_struct percent_table[] =
-{
- { "token", NULL, tok_token },
- { "term", NULL, tok_token },
- { "nterm", NULL, tok_nterm },
- { "type", NULL, tok_type },
- { "guard", NULL, tok_guard },
- { "union", NULL, tok_union },
- { "expect", NULL, tok_expect },
- { "thong", NULL, tok_thong },
- { "start", NULL, tok_start },
- { "left", NULL, tok_left },
- { "right", NULL, tok_right },
- { "nonassoc", NULL, tok_nonassoc },
- { "binary", NULL, tok_nonassoc },
- { "prec", NULL, tok_prec },
- { "locations", &locations_flag, tok_noop }, /* -l */
- { "no_lines", &no_lines_flag, tok_noop }, /* -l */
- { "raw", NULL, tok_obsolete }, /* -r */
- { "token_table", &token_table_flag, tok_noop }, /* -k */
- { "yacc", &yacc_flag, tok_noop }, /* -y */
- { "fixed_output_files",&yacc_flag, tok_noop }, /* -y */
- { "defines", &defines_flag, tok_noop }, /* -d */
- { "no_parser", &no_parser_flag, tok_noop }, /* -n */
-#if 0
- /* For the time being, this is not enabled yet, while it's possible
- though, since we use obstacks. The only risk is with semantic
- parsers which will output an `include' of an output file: be sure
- that the naem included is indeed the name of the output file. */
- { "output_file", &spec_outfile, tok_setopt }, /* -o */
- { "file_prefix", &spec_file_prefix, tok_setopt }, /* -b */
- { "name_prefix", &spec_name_prefix, tok_setopt }, /* -p */
-#endif
- { "header_extension", NULL, tok_hdrext},
- { "source_extension", NULL, tok_srcext},
- { "define", NULL, tok_define },
- { "verbose", &verbose_flag, tok_noop }, /* -v */
- { "debug", &debug_flag, tok_noop }, /* -t */
- { "semantic_parser", &semantic_parser, tok_noop },
- { "pure_parser", &pure_parser, tok_noop },
-
- { NULL, NULL, tok_illegal}
-};
-
/* Parse a token which starts with %.
Assumes the % has already been read and discarded. */
@@ -570,7 +517,7 @@
parse_percent_token (void)
{
int c;
- struct percent_table_struct *tx;
+ struct option_table_struct *tx;
c = getc (finput);
@@ -615,8 +562,9 @@
token_buffer = obstack_finish (&token_obstack);
/* table lookup % directive */
- for (tx = percent_table; tx->name; tx++)
- if (strcmp (token_buffer + 1, tx->name) == 0)
+ for (tx = option_table; tx->name; tx++)
+ if ((tx->access == opt_percent || tx->access == opt_both)
+ && strcmp (token_buffer + 1, tx->name) == 0)
break;
if (tx->set_flag)
@@ -625,7 +573,7 @@
return tok_noop;
}
- switch (tx->retval)
+ switch (tx->ret_val)
{
case tok_setopt:
*((char **) (tx->set_flag)) = optarg;
@@ -637,5 +585,5 @@
break;
}
- return tx->retval;
+ return tx->ret_val;
}
Index: src/lex.h
===================================================================
RCS file: /cvsroot/bison/bison/src/lex.h,v
retrieving revision 1.16
diff -u -r1.16 lex.h
--- src/lex.h 2001/08/25 14:27:57 1.16
+++ src/lex.h 2001/08/29 23:10:03
@@ -21,41 +21,6 @@
#ifndef LEX_H_
# define LEX_H_
-/* Token-type codes. */
-typedef enum token_e
- {
- tok_eof,
- tok_identifier,
- tok_comma,
- tok_colon,
- tok_semicolon,
- tok_bar,
- tok_left_curly,
- tok_two_percents,
- tok_percent_left_curly,
- tok_token,
- tok_nterm,
- tok_guard,
- tok_type,
- tok_union,
- tok_start,
- tok_left,
- tok_right,
- tok_nonassoc,
- tok_prec,
- tok_typename,
- tok_number,
- tok_expect,
- tok_thong,
- tok_hdrext,
- tok_srcext,
- tok_define,
- tok_noop,
- tok_setopt,
- tok_illegal,
- tok_obsolete
- } token_t;
-
extern const char *token_buffer;
extern bucket *symval;
extern int numval;
Index: src/reader.c
===================================================================
RCS file: /cvsroot/bison/bison/src/reader.c,v
retrieving revision 1.78
diff -u -r1.78 reader.c
--- src/reader.c 2001/08/29 14:17:00 1.78
+++ src/reader.c 2001/08/29 23:10:04
@@ -28,6 +28,7 @@
#include "files.h"
#include "xalloc.h"
#include "symtab.h"
+#include "options.h"
#include "lex.h"
#include "gram.h"
#include "complain.h"
cvs server: Diffing tests
Pascal Bart (address@hidden)
options.c
Description: options.c
options.h
Description: options.h
- [Main] Concentrate options.,
Pascal Bart <=