re PR java/2369 (--main should check the following symbol)
Fix for PR java/2369: * jvspec.c (verify_class_name): New function. (lang_specific_driver): Call it. (JAVA_START_CHAR_P): New macro. (JAVA_PART_CHAR_P): Likewise. From-SVN: r49981
This commit is contained in:
parent
9abe2e29b4
commit
d2fb532900
|
@ -1,3 +1,11 @@
|
|||
2002-02-22 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
Fix for PR java/2369:
|
||||
* jvspec.c (verify_class_name): New function.
|
||||
(lang_specific_driver): Call it.
|
||||
(JAVA_START_CHAR_P): New macro.
|
||||
(JAVA_PART_CHAR_P): Likewise.
|
||||
|
||||
2002-02-22 Per Bothner <per@bothner.com>
|
||||
|
||||
* class.c: Change vtable to be more compatible with g++ v3 abi.
|
||||
|
|
|
@ -46,6 +46,7 @@ The Free Software Foundation is independent of Sun Microsystems, Inc. */
|
|||
#define RESOURCE_FILE_ARG (1<<7)
|
||||
|
||||
static char *find_spec_file PARAMS ((const char *));
|
||||
static int verify_class_name PARAMS ((const char *));
|
||||
|
||||
static const char *main_class_name = NULL;
|
||||
int lang_specific_extra_outfiles = 0;
|
||||
|
@ -98,6 +99,45 @@ find_spec_file (dir)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/* FIXME: these should come from lex.h. */
|
||||
#define JAVA_START_CHAR_P(c) (c < 128 && (ISIDST (c) || c == '$'))
|
||||
#define JAVA_PART_CHAR_P(c) (c < 128 \
|
||||
&& (ISIDNUM (c) \
|
||||
|| c == '$' \
|
||||
|| (c >= 0x00 && c <= 0x08) \
|
||||
|| (c >= 0x0e && c <= 0x1b) \
|
||||
|| c == 0x7f))
|
||||
|
||||
/* Verify that NAME is a valid Java class name that might contain
|
||||
`main'. Return 0 on failure. */
|
||||
static int
|
||||
verify_class_name (name)
|
||||
const char *name;
|
||||
{
|
||||
/* FIXME: what encoding do we use for command-line arguments? For
|
||||
now we assume plain ASCII, which of course is wrong. */
|
||||
while (*name)
|
||||
{
|
||||
int ch = *name++;
|
||||
if (ch < 0 || ! JAVA_START_CHAR_P (ch))
|
||||
return 0;
|
||||
while (*name)
|
||||
{
|
||||
ch = *name++;
|
||||
if (ch < 0)
|
||||
return 0;
|
||||
/* We found a break between class names. Next character
|
||||
must be an identifier start again. */
|
||||
if (ch == '.')
|
||||
break;
|
||||
if (! JAVA_PART_CHAR_P (ch))
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void
|
||||
lang_specific_driver (in_argc, in_argv, in_added_libraries)
|
||||
int *in_argc;
|
||||
|
@ -383,6 +423,9 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries)
|
|||
if (saw_D && ! main_class_name)
|
||||
fatal ("can't specify `-D' without `--main'\n");
|
||||
|
||||
if (main_class_name && ! verify_class_name (main_class_name))
|
||||
fatal ("`%s' is not a valid class name", main_class_name);
|
||||
|
||||
num_args = argc + added;
|
||||
if (saw_R)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue