X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fjava%2Fjv-scan.c;h=a283328847e5a660786c0f11c4b27f9ae2ccab1a;hb=3c905014c0a13bea5e94c6d41593e991fc22ccea;hp=661ca85b793b2bd4b9721c05dbb3a04c2ae45dfb;hpb=65c439ebf8ab926453ed0118d263f14271f64719;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/java/jv-scan.c b/gcc/java/jv-scan.c index 661ca85b793..a283328847e 100644 --- a/gcc/java/jv-scan.c +++ b/gcc/java/jv-scan.c @@ -1,124 +1,228 @@ /* Main for jv-scan - Copyright (C) 1998 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 + Free Software Foundation, Inc. Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com) -This file is part of GNU CC. +This file is part of GCC. -GNU CC is free software; you can redistribute it and/or modify +GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. -GNU CC is distributed in the hope that it will be useful, +GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with GNU CC; see the file COPYING. If not, write to +along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" +#include "coretypes.h" +#include "tm.h" +#include "intl.h" #include "obstack.h" /* We use obstacks in lex.c */ -void fatal VPROTO((const char *s, ...)) ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN; -void warning VPROTO((const char *s, ...)) ATTRIBUTE_PRINTF_1; -void gcc_obstack_init PROTO ((struct obstack *obstack)); -extern void reset_report PROTO ((void)); +#include "version.h" + +#ifdef HAVE_LOCALE_H +#include +#endif + +#ifdef HAVE_LANGINFO_CODESET +#include +#endif + +#include + +extern void fatal_error (const char *msgid, ...) + ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN; +void warning (int opt, const char *msgid, ...) ATTRIBUTE_PRINTF_2; +void warning0 (const char *msgid, ...) ATTRIBUTE_PRINTF_1; +void report (void); + +static void usage (void) ATTRIBUTE_NORETURN; +static void help (void) ATTRIBUTE_NORETURN; +static void version (void) ATTRIBUTE_NORETURN; #define JC1_LITE +#include "jcf.h" #include "parse.h" /* Current input file and output file IO streams. */ FILE *finput, *out; -/* Current input filename. */ -char *input_filename; - /* Executable name. */ char *exec_name; +struct line_maps line_table; + /* Flags matching command line options. */ int flag_find_main = 0; int flag_dump_class = 0; int flag_list_filename = 0; +int flag_complexity = 0; +int flag_assert = 1; + +int pedantic = 0; + + + +/* This is used to mark options with no short value. */ +#define LONG_OPT(Num) ((Num) + 128) + +#define OPT_HELP LONG_OPT (0) +#define OPT_VERSION LONG_OPT (1) +#define OPT_ENCODING LONG_OPT (2) + +static const struct option options[] = +{ + { "help", no_argument, NULL, OPT_HELP }, + { "version", no_argument, NULL, OPT_VERSION }, + { "print-main", no_argument, &flag_find_main, 1 }, + { "list-filename", no_argument, &flag_list_filename, 1 }, + { "list-class", no_argument, &flag_dump_class, 1 }, + { "encoding", required_argument, NULL, OPT_ENCODING }, + { "complexity", no_argument, &flag_complexity, 1 }, + { "no-assert", no_argument, &flag_assert, 0 }, + { "assert", no_argument, &flag_assert, 1 }, + { NULL, no_argument, NULL, 0 } +}; + +static void +usage (void) +{ + fprintf (stderr, _("Try 'jv-scan --help' for more information.\n")); + exit (1); +} + +static void +help (void) +{ + printf (_("Usage: jv-scan [OPTION]... FILE...\n\n")); + printf (_("Print useful information read from Java source files.\n\n")); + printf (_(" --no-assert Don't recognize the assert keyword\n")); + printf (_(" --complexity Print cyclomatic complexity of input file\n")); + printf (_(" --encoding NAME Specify encoding of input file\n")); + printf (_(" --print-main Print name of class containing 'main'\n")); + printf (_(" --list-class List all classes defined in file\n")); + printf (_(" --list-filename Print input filename when listing class names\n")); + printf (_(" -o FILE Set output file name\n")); + printf ("\n"); + printf (_(" --help Print this help, then exit\n")); + printf (_(" --version Print version number, then exit\n")); + printf ("\n"); + printf (_("For bug reporting instructions, please see:\n" + "%s.\n"), bug_report_url); + exit (0); +} + +static void +version (void) +{ + printf ("jv-scan (GCC) %s\n\n", version_string); + printf ("Copyright %s 2004 Free Software Foundation, Inc.\n", _("(C)")); + printf (_("This is free software; see the source for copying conditions. There is NO\n" + "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n")); + exit (0); +} /* jc1-lite main entry point */ int -main (argc, argv) - int argc; - char **argv; +main (int argc, char **argv) { int i = 1; - char *output_file = NULL; + const char *output_file = NULL; + const char *encoding = NULL; long ft; + int opt; exec_name = argv[0]; /* Default for output */ out = stdout; - /* Process options first */ - while (argv [i]) + /* Unlock the stdio streams. */ + unlock_std_streams (); + + gcc_init_libintl (); + + /* Process options first. We use getopt_long and not + getopt_long_only because we only support `--' long options here. */ + while ((opt = getopt_long (argc, argv, "o:", options, NULL)) != -1) { - if (argv [i][0] == '-') + switch (opt) { - /* Dump result into a file */ - if (!strcmp (argv [i], "-o") && i+1 < argc) - { - argv [i] = NULL; - output_file = argv [++i]; - argv [i] = NULL; - } - - /* Print the name of the class that contains main */ - else if (!strcmp (argv [i], "--print-main")) - flag_find_main = 1; - - else if (!strcmp (argv [i], "--list-filename")) - flag_list_filename = 1; - - /* List all the classes found in a source file */ - else if (!strcmp (argv [i], "--list-class")) - flag_dump_class = 1; - - else - warning ("Unrecognized argument `%s'", argv[i]); - - /* non recognized argument ignored silently */ - argv [i] = NULL; /* Nullify so it's not considered a file */ + case 0: + /* Already handled. */ + break; + + case 'o': + output_file = optarg; + break; + + case OPT_HELP: + help (); + break; + + case OPT_VERSION: + version (); + break; + + case OPT_ENCODING: + encoding = optarg; + break; + + default: + usage (); + break; } - i++; } /* No flags? Do nothing */ - if (!flag_find_main && !flag_dump_class) - exit (0); + if (! flag_find_main && ! flag_dump_class && ! flag_complexity) + return 0; /* Check on bad usage */ - if (flag_find_main && flag_dump_class) - fatal ("Options `--print-main' and `--list-class' can't be turned on " - "at the same time"); + if (flag_find_main + flag_dump_class + flag_complexity > 1) + fatal_error + ("only one of '--print-main', '--list-class', and '--complexity' allowed"); if (output_file && !(out = fopen (output_file, "w"))) - fatal ("Can't open output file `%s'", output_file); + fatal_error ("can't open output file '%s'", output_file); ft = ftell (out); gcc_obstack_init (&temporary_obstack); java_push_parser_context (); - for ( i = 1; i < argc; i++ ) + for ( i = optind; i < argc; i++ ) if (argv [i]) { - input_filename = argv [i]; - if ( (finput = fopen (argv [i], "r")) ) + char *filename = argv[i]; + if ( (finput = fopen (filename, "r")) ) { - java_init_lex (); + /* There's no point in trying to find the current encoding + unless we are going to do something intelligent with it + -- hence the test for iconv. */ +#if defined (HAVE_LOCALE_H) && defined (HAVE_ICONV) && defined (HAVE_LANGINFO_CODESET) + setlocale (LC_CTYPE, ""); + if (encoding == NULL) + encoding = nl_langinfo (CODESET); +#endif + if (encoding == NULL || *encoding == '\0') + encoding = DEFAULT_ENCODING; + + main_input_filename = filename; + java_init_lex (finput, encoding); + ctxp->filename = filename; yyparse (); + report (); if (ftell (out) != ft) fputc ('\n', out); ft = ftell (out); @@ -126,7 +230,7 @@ main (argc, argv) reset_report (); } else - fatal ("File not found `%s'", argv [i]); + fatal_error ("file not found '%s'", argv [i]); } /* Flush and close */ @@ -135,80 +239,50 @@ main (argc, argv) if (!output_file) fclose (out); - exit (0); + return 0; } + + /* Error report, memory, obstack initialization and other utility functions */ void -fatal VPROTO((const char *s, ...)) +fatal_error (const char *msgid, ...) { -#ifndef ANSI_PROTOTYPES - const char *s; -#endif va_list ap; - - VA_START (ap, s); - -#ifndef ANSI_PROTOTYPES - s = va_arg (ap, const char *); -#endif - - fprintf (stderr, "%s: error: ", exec_name); - vfprintf (stderr, s, ap); + va_start (ap, msgid); + fprintf (stderr, _("%s: error: "), exec_name); + vfprintf (stderr, _(msgid), ap); fputc ('\n', stderr); va_end (ap); exit (1); } void -warning VPROTO((const char *s, ...)) +warning (int opt ATTRIBUTE_UNUSED, const char *msgid, ...) { -#ifndef ANSI_PROTOTYPES - const char *s; -#endif va_list ap; - - VA_START (ap, s); - -#ifndef ANSI_PROTOTYPES - s = va_arg (ap, const char *); -#endif - - fprintf (stderr, "%s: warning: ", exec_name); - vfprintf (stderr, s, ap); + va_start (ap, msgid); + fprintf (stderr, _("%s: warning: "), exec_name); + vfprintf (stderr, _(msgid), ap); fputc ('\n', stderr); va_end (ap); } void -gcc_obstack_init (obstack) - struct obstack *obstack; +warning0 (const char *msgid, ...) { - /* Let particular systems override the size of a chunk. */ -#ifndef OBSTACK_CHUNK_SIZE -#define OBSTACK_CHUNK_SIZE 0 -#endif - /* Let them override the alloc and free routines too. */ -#ifndef OBSTACK_CHUNK_ALLOC -#define OBSTACK_CHUNK_ALLOC xmalloc -#endif -#ifndef OBSTACK_CHUNK_FREE -#define OBSTACK_CHUNK_FREE free -#endif - _obstack_begin (obstack, OBSTACK_CHUNK_SIZE, 0, - (void *(*) ()) OBSTACK_CHUNK_ALLOC, - (void (*) ()) OBSTACK_CHUNK_FREE); + va_list ap; + va_start (ap, msgid); + fprintf (stderr, _("%s: warning: "), exec_name); + vfprintf (stderr, _(msgid), ap); + fputc ('\n', stderr); + va_end (ap); } -PTR -xmalloc (size) - size_t size; +void +fancy_abort (const char *file, int line, const char *func) { - register PTR val = (PTR) malloc (size); - - if (val == 0) - fatal ("virtual memory exhausted"); - return val; + fatal_error ("abort in %s, at %s:%d", func, file, line); }