aboutsummaryrefslogtreecommitdiff
path: root/gdb/jv-exp.y
diff options
context:
space:
mode:
authorStu Grossman <grossman@cygnus>1998-06-10 23:29:59 +0000
committerStu Grossman <grossman@cygnus>1998-06-10 23:29:59 +0000
commitf6d23b6f3bc8e82684fc24b2d4d06ffeac38f509 (patch)
treefac622536d092e1dc9558550cf799fa8c784324f /gdb/jv-exp.y
parenta27a2a8de49c4bb4fb9cc9cbe911370feb344d18 (diff)
downloadgdb-f6d23b6f3bc8e82684fc24b2d4d06ffeac38f509.zip
gdb-f6d23b6f3bc8e82684fc24b2d4d06ffeac38f509.tar.gz
gdb-f6d23b6f3bc8e82684fc24b2d4d06ffeac38f509.tar.bz2
* c-exp.y: Fix problems with parsing "'foo.bar'::func". Some languages
allow symbols with dots. * gdbtypes.c (check_stub_method): Cosmetic. Use more descriptive names for parameters. start-sanitize-java * jv-exp.y: Parser now accepts primitive types. * (parse_number): Use correct ifdef for scanf long double support. * jv-lang.c (java_array_type): Initial cut at array support. end-sanitize-java * language.c language.h (set_language): Now returns previous language. * symtab.c (find_methods): Make static. Cosmetic changes, including indentation, and adding descriptive comments. Move local variable defs into the block they are used in. * Don't call check_stub_method any more. Use gdb_mangle_name to generate the full method name. find_method doesn't need all the other goobldegook that check_stub_method does. * (gdb_mangle_name): Use more descriptive names for parameters. Fix comment. start-sanitize-java * (lookup_partial_symbol lookup_block_symbol): Check for java to ensure we can find mangled names. end-sanitize-java * (decode_line_1): Move local variable defs into the block they are used in. (Improves code readability.)
Diffstat (limited to 'gdb/jv-exp.y')
-rw-r--r--gdb/jv-exp.y37
1 files changed, 24 insertions, 13 deletions
diff --git a/gdb/jv-exp.y b/gdb/jv-exp.y
index 828a557..672991b 100644
--- a/gdb/jv-exp.y
+++ b/gdb/jv-exp.y
@@ -151,7 +151,7 @@ parse_number PARAMS ((char *, int, int, YYSTYPE *));
%type <lval> rcurly Dims Dims_opt
%type <tval> ClassOrInterfaceType ClassType /* ReferenceType Type ArrayType */
-%type <tval> IntegralType FloatingPointType NumericType PrimitiveType
+%type <tval> IntegralType FloatingPointType NumericType PrimitiveType ArrayType PrimitiveOrArrayType
%token <typed_val_int> INTEGER_LITERAL
%token <typed_val_float> FLOATING_POINT_LITERAL
@@ -201,7 +201,20 @@ parse_number PARAMS ((char *, int, int, YYSTYPE *));
%%
start : exp1
-/* | type_exp FIXME */
+ | type_exp
+ ;
+
+type_exp: PrimitiveOrArrayType
+ {
+ write_exp_elt_opcode(OP_TYPE);
+ write_exp_elt_type($1);
+ write_exp_elt_opcode(OP_TYPE);
+ }
+ ;
+
+PrimitiveOrArrayType:
+ PrimitiveType
+ | ArrayType
;
StringLiteral:
@@ -294,14 +307,12 @@ ClassType:
ClassOrInterfaceType
;
-/* UNUSED:
ArrayType:
PrimitiveType Dims
{ $$ = java_array_type ($1, $2); }
| Name Dims
{ $$ = java_array_type (java_type_from_name ($1), $2); }
;
-*/
Name:
IDENTIFIER
@@ -697,7 +708,7 @@ parse_number (p, len, parsed_float, putithere)
num = sscanf (p, "%lg%c", (double *) &putithere->typed_val_float.dval, &c);
else
{
-#ifdef PRINTF_HAS_LONG_DOUBLE
+#ifdef SCANF_HAS_LONG_DOUBLE
num = sscanf (p, "%Lg%c", &putithere->typed_val_float.dval, &c);
#else
/* Scan it into a double, then assign it to the long double.
@@ -723,7 +734,7 @@ parse_number (p, len, parsed_float, putithere)
return ERROR;
return FLOATING_POINT_LITERAL;
-}
+ }
/* Handle base-switching prefixes 0x, 0t, 0d, 0 */
if (p[0] == '0')
@@ -1080,13 +1091,13 @@ yylex ()
(c == '_' || c == '$' || (c >= '0' && c <= '9')
|| (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '<');)
{
- if (c == '<')
- {
- int i = namelen;
- while (tokstart[++i] && tokstart[i] != '>');
- if (tokstart[i] == '>')
- namelen = i;
- }
+ if (c == '<')
+ {
+ int i = namelen;
+ while (tokstart[++i] && tokstart[i] != '>');
+ if (tokstart[i] == '>')
+ namelen = i;
+ }
c = tokstart[++namelen];
}