*** empty log message ***
[deliverable/binutils-gdb.git] / gdb / jv-lang.c
CommitLineData
c906108c 1/* Java language support routines for GDB, the GNU debugger.
dfa52d88 2
4c38e0a4 3 Copyright (C) 1997, 1998, 1999, 2000, 2003, 2004, 2005, 2007, 2008, 2009,
7b6bb8da 4 2010, 2011 Free Software Foundation, Inc.
c906108c 5
c5aa993b 6 This file is part of GDB.
c906108c 7
c5aa993b
JM
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
a9762ec7 10 the Free Software Foundation; either version 3 of the License, or
c5aa993b 11 (at your option) any later version.
c906108c 12
c5aa993b
JM
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
c906108c 17
c5aa993b 18 You should have received a copy of the GNU General Public License
a9762ec7 19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
20
21#include "defs.h"
22#include "symtab.h"
23#include "gdbtypes.h"
24#include "expression.h"
25#include "parser-defs.h"
26#include "language.h"
27#include "gdbtypes.h"
28#include "symtab.h"
29#include "symfile.h"
30#include "objfiles.h"
31#include "gdb_string.h"
32#include "value.h"
33#include "c-lang.h"
34#include "jv-lang.h"
35#include "gdbcore.h"
fe898f56 36#include "block.h"
9a3d7dfd 37#include "demangle.h"
de4f826b 38#include "dictionary.h"
c906108c 39#include <ctype.h>
03b4bca2 40#include "gdb_assert.h"
c906108c 41
392a587b
JM
42/* Local functions */
43
a14ed312 44extern void _initialize_java_language (void);
392a587b 45
a14ed312
KB
46static int java_demangled_signature_length (char *);
47static void java_demangled_signature_copy (char *, char *);
c906108c 48
20781792 49static struct symtab *get_java_class_symtab (struct gdbarch *gdbarch);
75c9979e
AC
50static char *get_java_utf8_name (struct obstack *obstack, struct value *name);
51static int java_class_is_primitive (struct value *clas);
75c9979e 52static struct value *java_value_string (char *ptr, int len);
392a587b 53
6c7a06a3
TT
54static void java_emit_char (int c, struct type *type,
55 struct ui_file * stream, int quoter);
c906108c 56
31c27f77
JJ
57static char *java_class_name_from_physname (const char *physname);
58
20781792
TT
59static const struct objfile_data *jv_dynamics_objfile_data_key;
60static const struct objfile_data *jv_type_objfile_data_key;
61
c906108c
SS
62/* This objfile contains symtabs that have been dynamically created
63 to record dynamically loaded Java classes and dynamically
1777feb0 64 compiled java methods. */
c906108c
SS
65
66static struct objfile *dynamics_objfile = NULL;
67
1777feb0 68/* symtab contains classes read from the inferior. */
20781792
TT
69
70static struct symtab *class_symtab = NULL;
71
0daa2b63
UW
72static struct type *java_link_class_type (struct gdbarch *,
73 struct type *, struct value *);
c906108c 74
30cc903e
TT
75/* An instance of this structure is used to store some data that must
76 be freed. */
77
78struct jv_per_objfile_data
79{
80 /* The expandable dictionary we use. */
81 struct dictionary *dict;
82};
83
20781792
TT
84/* A function called when the dynamics_objfile is freed. We use this
85 to clean up some internal state. */
86static void
30cc903e 87jv_per_objfile_free (struct objfile *objfile, void *data)
20781792 88{
30cc903e
TT
89 struct jv_per_objfile_data *jv_data = data;
90
20781792 91 gdb_assert (objfile == dynamics_objfile);
30cc903e 92 /* Clean up all our cached state. */
20781792
TT
93 dynamics_objfile = NULL;
94 class_symtab = NULL;
30cc903e
TT
95
96 if (jv_data->dict)
97 dict_free (jv_data->dict);
98 xfree (jv_data);
20781792
TT
99}
100
eb9a305d
DC
101/* FIXME: carlton/2003-02-04: This is the main or only caller of
102 allocate_objfile with first argument NULL; as a result, this code
103 breaks every so often. Somebody should write a test case that
104 exercises GDB in various ways (e.g. something involving loading a
105 dynamic library) after this code has been called. */
106
c906108c 107static struct objfile *
20781792 108get_dynamics_objfile (struct gdbarch *gdbarch)
c906108c
SS
109{
110 if (dynamics_objfile == NULL)
111 {
30cc903e
TT
112 struct jv_per_objfile_data *data;
113
20781792
TT
114 /* Mark it as shared so that it is cleared when the inferior is
115 re-run. */
116 dynamics_objfile = allocate_objfile (NULL, OBJF_SHARED);
117 dynamics_objfile->gdbarch = gdbarch;
30cc903e
TT
118
119 data = XCNEW (struct jv_per_objfile_data);
120 set_objfile_data (dynamics_objfile, jv_dynamics_objfile_data_key, data);
c906108c
SS
121 }
122 return dynamics_objfile;
123}
124
392a587b 125static struct symtab *
20781792 126get_java_class_symtab (struct gdbarch *gdbarch)
c906108c
SS
127{
128 if (class_symtab == NULL)
129 {
20781792 130 struct objfile *objfile = get_dynamics_objfile (gdbarch);
c906108c
SS
131 struct blockvector *bv;
132 struct block *bl;
30cc903e 133 struct jv_per_objfile_data *jv_data;
e0881a8e 134
c906108c
SS
135 class_symtab = allocate_symtab ("<java-classes>", objfile);
136 class_symtab->language = language_java;
137 bv = (struct blockvector *)
4a146b47 138 obstack_alloc (&objfile->objfile_obstack,
de4f826b 139 sizeof (struct blockvector) + sizeof (struct block *));
c906108c
SS
140 BLOCKVECTOR_NBLOCKS (bv) = 1;
141 BLOCKVECTOR (class_symtab) = bv;
142
1777feb0 143 /* Allocate dummy STATIC_BLOCK. */
4a146b47
EZ
144 bl = allocate_block (&objfile->objfile_obstack);
145 BLOCK_DICT (bl) = dict_create_linear (&objfile->objfile_obstack,
de4f826b 146 NULL);
c906108c
SS
147 BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK) = bl;
148
5c4e30ca 149 /* Allocate GLOBAL_BLOCK. */
4a146b47 150 bl = allocate_block (&objfile->objfile_obstack);
de4f826b 151 BLOCK_DICT (bl) = dict_create_hashed_expandable ();
c906108c 152 BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK) = bl;
30cc903e
TT
153
154 /* Arrange to free the dict. */
155 jv_data = objfile_data (objfile, jv_dynamics_objfile_data_key);
156 jv_data->dict = BLOCK_DICT (bl);
c906108c
SS
157 }
158 return class_symtab;
159}
160
161static void
fba45db2 162add_class_symtab_symbol (struct symbol *sym)
c906108c 163{
20781792
TT
164 struct symtab *symtab
165 = get_java_class_symtab (get_objfile_arch (SYMBOL_SYMTAB (sym)->objfile));
c906108c 166 struct blockvector *bv = BLOCKVECTOR (symtab);
e0881a8e 167
de4f826b 168 dict_add_symbol (BLOCK_DICT (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)), sym);
c906108c
SS
169}
170
c906108c 171static struct symbol *
fba45db2 172add_class_symbol (struct type *type, CORE_ADDR addr)
c906108c
SS
173{
174 struct symbol *sym;
e0881a8e 175
c906108c 176 sym = (struct symbol *)
4a146b47 177 obstack_alloc (&dynamics_objfile->objfile_obstack, sizeof (struct symbol));
c906108c 178 memset (sym, 0, sizeof (struct symbol));
33e5013e 179 SYMBOL_SET_LANGUAGE (sym, language_java);
3567439c 180 SYMBOL_SET_LINKAGE_NAME (sym, TYPE_TAG_NAME (type));
c906108c 181 SYMBOL_CLASS (sym) = LOC_TYPEDEF;
c5aa993b 182 /* SYMBOL_VALUE (sym) = valu; */
c906108c 183 SYMBOL_TYPE (sym) = type;
176620f1 184 SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN;
c906108c
SS
185 SYMBOL_VALUE_ADDRESS (sym) = addr;
186 return sym;
187}
de4f826b 188
c906108c 189struct type *
fba45db2 190java_lookup_class (char *name)
c906108c
SS
191{
192 struct symbol *sym;
e0881a8e 193
2570f2b7 194 sym = lookup_symbol (name, expression_context_block, STRUCT_DOMAIN, NULL);
c906108c
SS
195 if (sym != NULL)
196 return SYMBOL_TYPE (sym);
1777feb0 197 /* FIXME - should search inferior's symbol table. */
c906108c 198 return NULL;
c906108c
SS
199}
200
201/* Return a nul-terminated string (allocated on OBSTACK) for
1777feb0 202 a name given by NAME (which has type Utf8Const*). */
c906108c
SS
203
204char *
75c9979e 205get_java_utf8_name (struct obstack *obstack, struct value *name)
c906108c
SS
206{
207 char *chrs;
75c9979e 208 struct value *temp = name;
c906108c
SS
209 int name_length;
210 CORE_ADDR data_addr;
e0881a8e 211
c906108c
SS
212 temp = value_struct_elt (&temp, NULL, "length", NULL, "structure");
213 name_length = (int) value_as_long (temp);
42ae5230 214 data_addr = value_address (temp) + TYPE_LENGTH (value_type (temp));
c5aa993b
JM
215 chrs = obstack_alloc (obstack, name_length + 1);
216 chrs[name_length] = '\0';
c68a6671 217 read_memory (data_addr, (gdb_byte *) chrs, name_length);
c906108c
SS
218 return chrs;
219}
220
75c9979e
AC
221struct value *
222java_class_from_object (struct value *obj_val)
c906108c
SS
223{
224 /* This is all rather inefficient, since the offsets of vtable and
225 class are fixed. FIXME */
75c9979e 226 struct value *vtable_val;
c906108c 227
df407dfe
AC
228 if (TYPE_CODE (value_type (obj_val)) == TYPE_CODE_PTR
229 && TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (obj_val))) == 0)
c906108c 230 obj_val = value_at (get_java_object_type (),
00a4c844 231 value_as_address (obj_val));
c906108c
SS
232
233 vtable_val = value_struct_elt (&obj_val, NULL, "vtable", NULL, "structure");
234 return value_struct_elt (&vtable_val, NULL, "class", NULL, "structure");
235}
236
237/* Check if CLASS_IS_PRIMITIVE(value of clas): */
392a587b 238static int
75c9979e 239java_class_is_primitive (struct value *clas)
c906108c 240{
1777feb0
MS
241 struct value *vtable = value_struct_elt (&clas, NULL, "vtable",
242 NULL, "struct");
1aa20aa8 243 CORE_ADDR i = value_as_address (vtable);
e0881a8e 244
c906108c
SS
245 return (int) (i & 0x7fffffff) == (int) 0x7fffffff;
246}
247
1777feb0 248/* Read a GCJ Class object, and generated a gdb (TYPE_CODE_STRUCT) type. */
c906108c
SS
249
250struct type *
0daa2b63 251type_from_class (struct gdbarch *gdbarch, struct value *clas)
c906108c
SS
252{
253 struct type *type;
254 char *name;
75c9979e 255 struct value *temp;
c906108c 256 struct objfile *objfile;
75c9979e 257 struct value *utf8_name;
c906108c
SS
258 char *nptr;
259 CORE_ADDR addr;
c906108c
SS
260 int is_array = 0;
261
df407dfe 262 type = check_typedef (value_type (clas));
c906108c
SS
263 if (TYPE_CODE (type) == TYPE_CODE_PTR)
264 {
265 if (value_logical_not (clas))
266 return NULL;
267 clas = value_ind (clas);
268 }
42ae5230 269 addr = value_address (clas);
c906108c 270
20781792 271 objfile = get_dynamics_objfile (gdbarch);
c906108c
SS
272 if (java_class_is_primitive (clas))
273 {
75c9979e 274 struct value *sig;
e0881a8e 275
c906108c
SS
276 temp = clas;
277 sig = value_struct_elt (&temp, NULL, "method_count", NULL, "structure");
0daa2b63 278 return java_primitive_type (gdbarch, value_as_long (sig));
c906108c
SS
279 }
280
1777feb0
MS
281 /* Get Class name. */
282 /* If clasloader non-null, prepend loader address. FIXME */
c906108c
SS
283 temp = clas;
284 utf8_name = value_struct_elt (&temp, NULL, "name", NULL, "structure");
b99607ea 285 name = get_java_utf8_name (&objfile->objfile_obstack, utf8_name);
c5aa993b 286 for (nptr = name; *nptr != 0; nptr++)
c906108c
SS
287 {
288 if (*nptr == '/')
289 *nptr = '.';
290 }
291
292 type = java_lookup_class (name);
293 if (type != NULL)
294 return type;
295
20781792 296 type = alloc_type (objfile);
c906108c
SS
297 TYPE_CODE (type) = TYPE_CODE_STRUCT;
298 INIT_CPLUS_SPECIFIC (type);
299
300 if (name[0] == '[')
301 {
302 char *signature = name;
303 int namelen = java_demangled_signature_length (signature);
e0881a8e 304
c906108c 305 if (namelen > strlen (name))
b99607ea 306 name = obstack_alloc (&objfile->objfile_obstack, namelen + 1);
c906108c
SS
307 java_demangled_signature_copy (name, signature);
308 name[namelen] = '\0';
309 is_array = 1;
310 temp = clas;
1777feb0 311 /* Set array element type. */
c906108c 312 temp = value_struct_elt (&temp, NULL, "methods", NULL, "structure");
1777feb0
MS
313 deprecated_set_value_type (temp,
314 lookup_pointer_type (value_type (clas)));
0daa2b63 315 TYPE_TARGET_TYPE (type) = type_from_class (gdbarch, temp);
c906108c
SS
316 }
317
318 ALLOCATE_CPLUS_STRUCT_TYPE (type);
319 TYPE_TAG_NAME (type) = name;
320
321 add_class_symtab_symbol (add_class_symbol (type, addr));
0daa2b63 322 return java_link_class_type (gdbarch, type, clas);
c906108c
SS
323}
324
1777feb0 325/* Fill in class TYPE with data from the CLAS value. */
c906108c 326
20781792 327static struct type *
0daa2b63
UW
328java_link_class_type (struct gdbarch *gdbarch,
329 struct type *type, struct value *clas)
c906108c 330{
75c9979e 331 struct value *temp;
c906108c
SS
332 char *unqualified_name;
333 char *name = TYPE_TAG_NAME (type);
334 int ninterfaces, nfields, nmethods;
335 int type_is_object = 0;
336 struct fn_field *fn_fields;
337 struct fn_fieldlist *fn_fieldlists;
75c9979e
AC
338 struct value *fields;
339 struct value *methods;
c65ecaf3
AC
340 struct value *method = NULL;
341 struct value *field = NULL;
c906108c 342 int i, j;
20781792 343 struct objfile *objfile = get_dynamics_objfile (gdbarch);
c906108c
SS
344 struct type *tsuper;
345
03b4bca2 346 gdb_assert (name != NULL);
c906108c
SS
347 unqualified_name = strrchr (name, '.');
348 if (unqualified_name == NULL)
349 unqualified_name = name;
350
351 temp = clas;
352 temp = value_struct_elt (&temp, NULL, "superclass", NULL, "structure");
03b4bca2 353 if (strcmp (name, "java.lang.Object") == 0)
c906108c
SS
354 {
355 tsuper = get_java_object_type ();
356 if (tsuper && TYPE_CODE (tsuper) == TYPE_CODE_PTR)
357 tsuper = TYPE_TARGET_TYPE (tsuper);
358 type_is_object = 1;
359 }
360 else
0daa2b63 361 tsuper = type_from_class (gdbarch, temp);
c906108c
SS
362
363#if 1
364 ninterfaces = 0;
365#else
366 temp = clas;
1777feb0
MS
367 ninterfaces = value_as_long (value_struct_elt (&temp, NULL, "interface_len",
368 NULL, "structure"));
c906108c
SS
369#endif
370 TYPE_N_BASECLASSES (type) = (tsuper == NULL ? 0 : 1) + ninterfaces;
371 temp = clas;
1777feb0
MS
372 nfields = value_as_long (value_struct_elt (&temp, NULL, "field_count",
373 NULL, "structure"));
c906108c 374 nfields += TYPE_N_BASECLASSES (type);
1777feb0 375 nfields++; /* Add one for dummy "class" field. */
c906108c
SS
376 TYPE_NFIELDS (type) = nfields;
377 TYPE_FIELDS (type) = (struct field *)
378 TYPE_ALLOC (type, sizeof (struct field) * nfields);
379
380 memset (TYPE_FIELDS (type), 0, sizeof (struct field) * nfields);
381
382 TYPE_FIELD_PRIVATE_BITS (type) =
383 (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
384 B_CLRALL (TYPE_FIELD_PRIVATE_BITS (type), nfields);
385
386 TYPE_FIELD_PROTECTED_BITS (type) =
387 (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
388 B_CLRALL (TYPE_FIELD_PROTECTED_BITS (type), nfields);
389
390 TYPE_FIELD_IGNORE_BITS (type) =
391 (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
392 B_CLRALL (TYPE_FIELD_IGNORE_BITS (type), nfields);
393
394 TYPE_FIELD_VIRTUAL_BITS (type) = (B_TYPE *)
395 TYPE_ALLOC (type, B_BYTES (TYPE_N_BASECLASSES (type)));
396 B_CLRALL (TYPE_FIELD_VIRTUAL_BITS (type), TYPE_N_BASECLASSES (type));
397
398 if (tsuper != NULL)
399 {
400 TYPE_BASECLASS (type, 0) = tsuper;
401 if (type_is_object)
402 SET_TYPE_FIELD_PRIVATE (type, 0);
403 }
404
405 i = strlen (name);
c5aa993b 406 if (i > 2 && name[i - 1] == ']' && tsuper != NULL)
c906108c
SS
407 {
408 /* FIXME */
1777feb0 409 TYPE_LENGTH (type) = TYPE_LENGTH (tsuper) + 4; /* size with "length" */
c906108c
SS
410 }
411 else
412 {
413 temp = clas;
1777feb0
MS
414 temp = value_struct_elt (&temp, NULL, "size_in_bytes",
415 NULL, "structure");
c906108c
SS
416 TYPE_LENGTH (type) = value_as_long (temp);
417 }
418
419 fields = NULL;
1777feb0 420 nfields--; /* First set up dummy "class" field. */
42ae5230 421 SET_FIELD_PHYSADDR (TYPE_FIELD (type, nfields), value_address (clas));
c906108c 422 TYPE_FIELD_NAME (type, nfields) = "class";
df407dfe 423 TYPE_FIELD_TYPE (type, nfields) = value_type (clas);
c906108c 424 SET_TYPE_FIELD_PRIVATE (type, nfields);
c5aa993b
JM
425
426 for (i = TYPE_N_BASECLASSES (type); i < nfields; i++)
c906108c
SS
427 {
428 int accflags;
429 int boffset;
e0881a8e 430
c906108c
SS
431 if (fields == NULL)
432 {
433 temp = clas;
434 fields = value_struct_elt (&temp, NULL, "fields", NULL, "structure");
435 field = value_ind (fields);
436 }
437 else
1777feb0 438 { /* Re-use field value for next field. */
42ae5230
TT
439 CORE_ADDR addr
440 = value_address (field) + TYPE_LENGTH (value_type (field));
e0881a8e 441
42ae5230 442 set_value_address (field, addr);
dfa52d88 443 set_value_lazy (field, 1);
c906108c
SS
444 }
445 temp = field;
446 temp = value_struct_elt (&temp, NULL, "name", NULL, "structure");
447 TYPE_FIELD_NAME (type, i) =
b99607ea 448 get_java_utf8_name (&objfile->objfile_obstack, temp);
c906108c
SS
449 temp = field;
450 accflags = value_as_long (value_struct_elt (&temp, NULL, "accflags",
451 NULL, "structure"));
452 temp = field;
453 temp = value_struct_elt (&temp, NULL, "info", NULL, "structure");
454 boffset = value_as_long (value_struct_elt (&temp, NULL, "boffset",
c5aa993b
JM
455 NULL, "structure"));
456 if (accflags & 0x0001) /* public access */
c906108c
SS
457 {
458 /* ??? */
459 }
c5aa993b 460 if (accflags & 0x0002) /* private access */
c906108c
SS
461 {
462 SET_TYPE_FIELD_PRIVATE (type, i);
463 }
c5aa993b 464 if (accflags & 0x0004) /* protected access */
c906108c
SS
465 {
466 SET_TYPE_FIELD_PROTECTED (type, i);
467 }
c5aa993b
JM
468 if (accflags & 0x0008) /* ACC_STATIC */
469 SET_FIELD_PHYSADDR (TYPE_FIELD (type, i), boffset);
c906108c
SS
470 else
471 TYPE_FIELD_BITPOS (type, i) = 8 * boffset;
c5aa993b 472 if (accflags & 0x8000) /* FIELD_UNRESOLVED_FLAG */
c906108c 473 {
c5aa993b 474 TYPE_FIELD_TYPE (type, i) = get_java_object_type (); /* FIXME */
c906108c
SS
475 }
476 else
477 {
478 struct type *ftype;
e0881a8e 479
c906108c
SS
480 temp = field;
481 temp = value_struct_elt (&temp, NULL, "type", NULL, "structure");
0daa2b63 482 ftype = type_from_class (gdbarch, temp);
c906108c
SS
483 if (TYPE_CODE (ftype) == TYPE_CODE_STRUCT)
484 ftype = lookup_pointer_type (ftype);
485 TYPE_FIELD_TYPE (type, i) = ftype;
486 }
487 }
488
489 temp = clas;
490 nmethods = value_as_long (value_struct_elt (&temp, NULL, "method_count",
491 NULL, "structure"));
492 TYPE_NFN_FIELDS_TOTAL (type) = nmethods;
493 j = nmethods * sizeof (struct fn_field);
c5aa993b 494 fn_fields = (struct fn_field *)
4a146b47 495 obstack_alloc (&dynamics_objfile->objfile_obstack, j);
c906108c 496 memset (fn_fields, 0, j);
c5aa993b 497 fn_fieldlists = (struct fn_fieldlist *)
c906108c
SS
498 alloca (nmethods * sizeof (struct fn_fieldlist));
499
500 methods = NULL;
c5aa993b 501 for (i = 0; i < nmethods; i++)
c906108c
SS
502 {
503 char *mname;
504 int k;
e0881a8e 505
c906108c
SS
506 if (methods == NULL)
507 {
508 temp = clas;
1777feb0
MS
509 methods = value_struct_elt (&temp, NULL, "methods",
510 NULL, "structure");
c906108c
SS
511 method = value_ind (methods);
512 }
513 else
1777feb0 514 { /* Re-use method value for next method. */
42ae5230
TT
515 CORE_ADDR addr
516 = value_address (method) + TYPE_LENGTH (value_type (method));
e0881a8e 517
42ae5230 518 set_value_address (method, addr);
dfa52d88 519 set_value_lazy (method, 1);
c906108c
SS
520 }
521
1777feb0 522 /* Get method name. */
c906108c
SS
523 temp = method;
524 temp = value_struct_elt (&temp, NULL, "name", NULL, "structure");
b99607ea 525 mname = get_java_utf8_name (&objfile->objfile_obstack, temp);
c906108c
SS
526 if (strcmp (mname, "<init>") == 0)
527 mname = unqualified_name;
528
529 /* Check for an existing method with the same name.
530 * This makes building the fn_fieldslists an O(nmethods**2)
531 * operation. That could be using hashing, but I doubt it
532 * is worth it. Note that we do maintain the order of methods
533 * in the inferior's Method table (as long as that is grouped
534 * by method name), which I think is desirable. --PB */
c5aa993b 535 for (k = 0, j = TYPE_NFN_FIELDS (type);;)
c906108c
SS
536 {
537 if (--j < 0)
1777feb0 538 { /* No match - new method name. */
c5aa993b 539 j = TYPE_NFN_FIELDS (type)++;
c906108c
SS
540 fn_fieldlists[j].name = mname;
541 fn_fieldlists[j].length = 1;
542 fn_fieldlists[j].fn_fields = &fn_fields[i];
543 k = i;
544 break;
545 }
546 if (strcmp (mname, fn_fieldlists[j].name) == 0)
1777feb0 547 { /* Found an existing method with the same name. */
c906108c 548 int l;
e0881a8e 549
c906108c 550 if (mname != unqualified_name)
b99607ea 551 obstack_free (&objfile->objfile_obstack, mname);
c906108c
SS
552 mname = fn_fieldlists[j].name;
553 fn_fieldlists[j].length++;
1777feb0
MS
554 k = i - k; /* Index of new slot. */
555 /* Shift intervening fn_fields (between k and i) down. */
c5aa993b
JM
556 for (l = i; l > k; l--)
557 fn_fields[l] = fn_fields[l - 1];
558 for (l = TYPE_NFN_FIELDS (type); --l > j;)
c906108c
SS
559 fn_fieldlists[l].fn_fields++;
560 break;
561 }
562 k += fn_fieldlists[j].length;
563 }
564 fn_fields[k].physname = "";
565 fn_fields[k].is_stub = 1;
323427d1 566 /* FIXME */
0daa2b63
UW
567 fn_fields[k].type = lookup_function_type
568 (builtin_java_type (gdbarch)->builtin_void);
c906108c
SS
569 TYPE_CODE (fn_fields[k].type) = TYPE_CODE_METHOD;
570 }
571
c5aa993b
JM
572 j = TYPE_NFN_FIELDS (type) * sizeof (struct fn_fieldlist);
573 TYPE_FN_FIELDLISTS (type) = (struct fn_fieldlist *)
4a146b47 574 obstack_alloc (&dynamics_objfile->objfile_obstack, j);
c906108c 575 memcpy (TYPE_FN_FIELDLISTS (type), fn_fieldlists, j);
c5aa993b 576
c906108c
SS
577 return type;
578}
579
580static struct type *java_object_type;
581
20781792
TT
582/* A free function that is attached to the objfile defining
583 java_object_type. This is used to clear the cached type whenever
584 its owning objfile is destroyed. */
585static void
586jv_clear_object_type (struct objfile *objfile, void *ignore)
587{
588 java_object_type = NULL;
589}
590
591static void
592set_java_object_type (struct type *type)
593{
594 struct objfile *owner;
595
596 gdb_assert (java_object_type == NULL);
597
598 owner = TYPE_OBJFILE (type);
599 if (owner)
600 set_objfile_data (owner, jv_type_objfile_data_key, &java_object_type);
601 java_object_type = type;
602}
603
c906108c 604struct type *
fba45db2 605get_java_object_type (void)
c906108c
SS
606{
607 if (java_object_type == NULL)
608 {
609 struct symbol *sym;
e0881a8e 610
2570f2b7 611 sym = lookup_symbol ("java.lang.Object", NULL, STRUCT_DOMAIN, NULL);
c906108c 612 if (sym == NULL)
8a3fe4f8 613 error (_("cannot find java.lang.Object"));
20781792 614 set_java_object_type (SYMBOL_TYPE (sym));
c906108c
SS
615 }
616 return java_object_type;
617}
618
619int
45d5d5ca 620get_java_object_header_size (struct gdbarch *gdbarch)
c906108c
SS
621{
622 struct type *objtype = get_java_object_type ();
e0881a8e 623
c906108c 624 if (objtype == NULL)
45d5d5ca 625 return (2 * gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT);
c906108c
SS
626 else
627 return TYPE_LENGTH (objtype);
628}
629
630int
fba45db2 631is_object_type (struct type *type)
c906108c
SS
632{
633 CHECK_TYPEDEF (type);
634 if (TYPE_CODE (type) == TYPE_CODE_PTR)
635 {
636 struct type *ttype = check_typedef (TYPE_TARGET_TYPE (type));
637 char *name;
638 if (TYPE_CODE (ttype) != TYPE_CODE_STRUCT)
639 return 0;
640 while (TYPE_N_BASECLASSES (ttype) > 0)
641 ttype = TYPE_BASECLASS (ttype, 0);
642 name = TYPE_TAG_NAME (ttype);
643 if (name != NULL && strcmp (name, "java.lang.Object") == 0)
644 return 1;
1777feb0
MS
645 name
646 = TYPE_NFIELDS (ttype) > 0 ? TYPE_FIELD_NAME (ttype, 0) : (char *) 0;
c906108c
SS
647 if (name != NULL && strcmp (name, "vtable") == 0)
648 {
649 if (java_object_type == NULL)
20781792 650 set_java_object_type (type);
c906108c
SS
651 return 1;
652 }
653 }
654 return 0;
655}
656
657struct type *
0daa2b63 658java_primitive_type (struct gdbarch *gdbarch, int signature)
c906108c 659{
0daa2b63
UW
660 const struct builtin_java_type *builtin = builtin_java_type (gdbarch);
661
c906108c
SS
662 switch (signature)
663 {
c5aa993b 664 case 'B':
0daa2b63 665 return builtin->builtin_byte;
c5aa993b 666 case 'S':
0daa2b63 667 return builtin->builtin_short;
c5aa993b 668 case 'I':
0daa2b63 669 return builtin->builtin_int;
c5aa993b 670 case 'J':
0daa2b63 671 return builtin->builtin_long;
c5aa993b 672 case 'Z':
0daa2b63 673 return builtin->builtin_boolean;
c5aa993b 674 case 'C':
0daa2b63 675 return builtin->builtin_char;
c5aa993b 676 case 'F':
0daa2b63 677 return builtin->builtin_float;
c5aa993b 678 case 'D':
0daa2b63 679 return builtin->builtin_double;
c5aa993b 680 case 'V':
0daa2b63 681 return builtin->builtin_void;
c906108c 682 }
8a3fe4f8 683 error (_("unknown signature '%c' for primitive type"), (char) signature);
c906108c
SS
684}
685
686/* If name[0 .. namelen-1] is the name of a primitive Java type,
1777feb0 687 return that type. Otherwise, return NULL. */
c906108c
SS
688
689struct type *
0daa2b63
UW
690java_primitive_type_from_name (struct gdbarch *gdbarch,
691 char *name, int namelen)
c906108c 692{
0daa2b63
UW
693 const struct builtin_java_type *builtin = builtin_java_type (gdbarch);
694
c906108c
SS
695 switch (name[0])
696 {
697 case 'b':
698 if (namelen == 4 && memcmp (name, "byte", 4) == 0)
0daa2b63 699 return builtin->builtin_byte;
c906108c 700 if (namelen == 7 && memcmp (name, "boolean", 7) == 0)
0daa2b63 701 return builtin->builtin_boolean;
c906108c
SS
702 break;
703 case 'c':
704 if (namelen == 4 && memcmp (name, "char", 4) == 0)
0daa2b63 705 return builtin->builtin_char;
3ef09ab5 706 break;
c906108c
SS
707 case 'd':
708 if (namelen == 6 && memcmp (name, "double", 6) == 0)
0daa2b63 709 return builtin->builtin_double;
c906108c
SS
710 break;
711 case 'f':
712 if (namelen == 5 && memcmp (name, "float", 5) == 0)
0daa2b63 713 return builtin->builtin_float;
c906108c
SS
714 break;
715 case 'i':
716 if (namelen == 3 && memcmp (name, "int", 3) == 0)
0daa2b63 717 return builtin->builtin_int;
c906108c
SS
718 break;
719 case 'l':
720 if (namelen == 4 && memcmp (name, "long", 4) == 0)
0daa2b63 721 return builtin->builtin_long;
c906108c
SS
722 break;
723 case 's':
724 if (namelen == 5 && memcmp (name, "short", 5) == 0)
0daa2b63 725 return builtin->builtin_short;
c906108c
SS
726 break;
727 case 'v':
728 if (namelen == 4 && memcmp (name, "void", 4) == 0)
0daa2b63 729 return builtin->builtin_void;
c906108c
SS
730 break;
731 }
732 return NULL;
733}
734
0daa2b63
UW
735static char *
736java_primitive_type_name (int signature)
737{
738 switch (signature)
739 {
740 case 'B':
741 return "byte";
742 case 'S':
743 return "short";
744 case 'I':
745 return "int";
746 case 'J':
747 return "long";
748 case 'Z':
749 return "boolean";
750 case 'C':
751 return "char";
752 case 'F':
753 return "float";
754 case 'D':
755 return "double";
756 case 'V':
757 return "void";
758 }
759 error (_("unknown signature '%c' for primitive type"), (char) signature);
760}
761
c906108c 762/* Return the length (in bytes) of demangled name of the Java type
1777feb0 763 signature string SIGNATURE. */
c906108c
SS
764
765static int
fba45db2 766java_demangled_signature_length (char *signature)
c906108c
SS
767{
768 int array = 0;
e0881a8e 769
c5aa993b 770 for (; *signature == '['; signature++)
1777feb0 771 array += 2; /* Two chars for "[]". */
c906108c
SS
772 switch (signature[0])
773 {
774 case 'L':
1777feb0 775 /* Subtract 2 for 'L' and ';'. */
c906108c
SS
776 return strlen (signature) - 2 + array;
777 default:
0daa2b63 778 return strlen (java_primitive_type_name (signature[0])) + array;
c906108c
SS
779 }
780}
781
1777feb0
MS
782/* Demangle the Java type signature SIGNATURE, leaving the result in
783 RESULT. */
c906108c
SS
784
785static void
fba45db2 786java_demangled_signature_copy (char *result, char *signature)
c906108c
SS
787{
788 int array = 0;
789 char *ptr;
790 int i;
e0881a8e 791
c906108c
SS
792 while (*signature == '[')
793 {
794 array++;
795 signature++;
796 }
797 switch (signature[0])
798 {
799 case 'L':
1777feb0 800 /* Subtract 2 for 'L' and ';', but add 1 for final nul. */
c906108c
SS
801 signature++;
802 ptr = result;
c5aa993b 803 for (; *signature != ';' && *signature != '\0'; signature++)
c906108c
SS
804 {
805 if (*signature == '/')
806 *ptr++ = '.';
807 else
808 *ptr++ = *signature;
809 }
810 break;
811 default:
0daa2b63 812 ptr = java_primitive_type_name (signature[0]);
c906108c
SS
813 i = strlen (ptr);
814 strcpy (result, ptr);
815 ptr = result + i;
816 break;
817 }
818 while (--array >= 0)
819 {
820 *ptr++ = '[';
821 *ptr++ = ']';
822 }
823}
824
825/* Return the demangled name of the Java type signature string SIGNATURE,
1777feb0 826 as a freshly allocated copy. */
c906108c
SS
827
828char *
fba45db2 829java_demangle_type_signature (char *signature)
c906108c
SS
830{
831 int length = java_demangled_signature_length (signature);
832 char *result = xmalloc (length + 1);
e0881a8e 833
c906108c
SS
834 java_demangled_signature_copy (result, signature);
835 result[length] = '\0';
836 return result;
837}
838
c906108c 839/* Return the type of TYPE followed by DIMS pairs of [ ].
1777feb0 840 If DIMS == 0, TYPE is returned. */
c906108c
SS
841
842struct type *
fba45db2 843java_array_type (struct type *type, int dims)
c906108c 844{
c906108c
SS
845 while (dims-- > 0)
846 {
1777feb0 847 /* FIXME This is bogus! Java arrays are not gdb arrays! */
e3506a9f 848 type = lookup_array_range_type (type, 0, 0);
c906108c
SS
849 }
850
851 return type;
852}
853
1777feb0 854/* Create a Java string in the inferior from a (Utf8) literal. */
c906108c 855
75c9979e 856static struct value *
fba45db2 857java_value_string (char *ptr, int len)
c906108c 858{
8a3fe4f8 859 error (_("not implemented - java_value_string")); /* FIXME */
c906108c
SS
860}
861
862/* Print the character C on STREAM as part of the contents of a literal
863 string whose delimiter is QUOTER. Note that that format for printing
1777feb0 864 characters and strings is language specific. */
c906108c
SS
865
866static void
6c7a06a3 867java_emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
c906108c
SS
868{
869 switch (c)
870 {
871 case '\\':
872 case '\'':
873 fprintf_filtered (stream, "\\%c", c);
874 break;
875 case '\b':
876 fputs_filtered ("\\b", stream);
877 break;
878 case '\t':
879 fputs_filtered ("\\t", stream);
880 break;
881 case '\n':
882 fputs_filtered ("\\n", stream);
883 break;
884 case '\f':
885 fputs_filtered ("\\f", stream);
886 break;
887 case '\r':
888 fputs_filtered ("\\r", stream);
889 break;
890 default:
891 if (isprint (c))
892 fputc_filtered (c, stream);
893 else
894 fprintf_filtered (stream, "\\u%.4x", (unsigned int) c);
895 break;
896 }
897}
898
75c9979e 899static struct value *
f86f5ca3
PH
900evaluate_subexp_java (struct type *expect_type, struct expression *exp,
901 int *pos, enum noside noside)
c906108c
SS
902{
903 int pc = *pos;
904 int i;
905 char *name;
906 enum exp_opcode op = exp->elts[*pos].opcode;
75c9979e
AC
907 struct value *arg1;
908 struct value *arg2;
c906108c 909 struct type *type;
e0881a8e 910
c906108c
SS
911 switch (op)
912 {
913 case UNOP_IND:
914 if (noside == EVAL_SKIP)
915 goto standard;
916 (*pos)++;
917 arg1 = evaluate_subexp_java (NULL_TYPE, exp, pos, EVAL_NORMAL);
df407dfe 918 if (is_object_type (value_type (arg1)))
c906108c
SS
919 {
920 struct type *type;
921
0daa2b63 922 type = type_from_class (exp->gdbarch, java_class_from_object (arg1));
c906108c
SS
923 arg1 = value_cast (lookup_pointer_type (type), arg1);
924 }
c906108c
SS
925 return value_ind (arg1);
926
927 case BINOP_SUBSCRIPT:
928 (*pos)++;
929 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
930 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
931 if (noside == EVAL_SKIP)
932 goto nosideret;
933 /* If the user attempts to subscript something that is not an
c5aa993b 934 array or pointer type (like a plain int variable for example),
1777feb0 935 then report this as an error. */
c5aa993b 936
994b9211 937 arg1 = coerce_ref (arg1);
df407dfe 938 type = check_typedef (value_type (arg1));
c906108c
SS
939 if (TYPE_CODE (type) == TYPE_CODE_PTR)
940 type = check_typedef (TYPE_TARGET_TYPE (type));
941 name = TYPE_NAME (type);
942 if (name == NULL)
943 name = TYPE_TAG_NAME (type);
944 i = name == NULL ? 0 : strlen (name);
945 if (TYPE_CODE (type) == TYPE_CODE_STRUCT
c5aa993b 946 && i > 2 && name[i - 1] == ']')
c906108c 947 {
e17a4113 948 enum bfd_endian byte_order = gdbarch_byte_order (exp->gdbarch);
c906108c
SS
949 CORE_ADDR address;
950 long length, index;
951 struct type *el_type;
c68a6671 952 gdb_byte buf4[4];
c906108c 953
75c9979e
AC
954 struct value *clas = java_class_from_object (arg1);
955 struct value *temp = clas;
1777feb0 956 /* Get CLASS_ELEMENT_TYPE of the array type. */
c906108c 957 temp = value_struct_elt (&temp, NULL, "methods",
c5aa993b 958 NULL, "structure");
04624583 959 deprecated_set_value_type (temp, value_type (clas));
0daa2b63 960 el_type = type_from_class (exp->gdbarch, temp);
c906108c
SS
961 if (TYPE_CODE (el_type) == TYPE_CODE_STRUCT)
962 el_type = lookup_pointer_type (el_type);
963
964 if (noside == EVAL_AVOID_SIDE_EFFECTS)
965 return value_zero (el_type, VALUE_LVAL (arg1));
1aa20aa8 966 address = value_as_address (arg1);
45d5d5ca 967 address += get_java_object_header_size (exp->gdbarch);
c906108c 968 read_memory (address, buf4, 4);
e17a4113 969 length = (long) extract_signed_integer (buf4, 4, byte_order);
c906108c
SS
970 index = (long) value_as_long (arg2);
971 if (index >= length || index < 0)
8a3fe4f8 972 error (_("array index (%ld) out of bounds (length: %ld)"),
c906108c
SS
973 index, length);
974 address = (address + 4) + index * TYPE_LENGTH (el_type);
00a4c844 975 return value_at (el_type, address);
c906108c
SS
976 }
977 else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
978 {
979 if (noside == EVAL_AVOID_SIDE_EFFECTS)
980 return value_zero (TYPE_TARGET_TYPE (type), VALUE_LVAL (arg1));
981 else
2497b498 982 return value_subscript (arg1, value_as_long (arg2));
c906108c
SS
983 }
984 if (name)
8a3fe4f8 985 error (_("cannot subscript something of type `%s'"), name);
c906108c 986 else
8a3fe4f8 987 error (_("cannot subscript requested type"));
c906108c
SS
988
989 case OP_STRING:
990 (*pos)++;
991 i = longest_to_int (exp->elts[pc + 1].longconst);
992 (*pos) += 3 + BYTES_TO_EXP_ELEM (i + 1);
993 if (noside == EVAL_SKIP)
994 goto nosideret;
995 return java_value_string (&exp->elts[pc + 2].string, i);
996
dc5000e7 997 case STRUCTOP_PTR:
c906108c 998 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
1777feb0 999 /* Convert object field (such as TYPE.class) to reference. */
df407dfe 1000 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_STRUCT)
c906108c
SS
1001 arg1 = value_addr (arg1);
1002 return arg1;
1003 default:
1004 break;
1005 }
1006standard:
1007 return evaluate_subexp_standard (expect_type, exp, pos, noside);
c5aa993b 1008nosideret:
22601c15 1009 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
c906108c
SS
1010}
1011
9a3d7dfd
AF
1012static char *java_demangle (const char *mangled, int options)
1013{
1014 return cplus_demangle (mangled, options | DMGL_JAVA);
1015}
1016
31c27f77
JJ
1017/* Find the member function name of the demangled name NAME. NAME
1018 must be a method name including arguments, in order to correctly
1019 locate the last component.
1020
1021 This function return a pointer to the first dot before the
1022 member function name, or NULL if the name was not of the
1023 expected form. */
1024
1025static const char *
1026java_find_last_component (const char *name)
1027{
1028 const char *p;
1029
1030 /* Find argument list. */
1031 p = strchr (name, '(');
1032
1033 if (p == NULL)
1034 return NULL;
1035
1036 /* Back up and find first dot prior to argument list. */
1037 while (p > name && *p != '.')
1038 p--;
1039
1040 if (p == name)
1041 return NULL;
1042
1043 return p;
1044}
1045
1046/* Return the name of the class containing method PHYSNAME. */
1047
1048static char *
1049java_class_name_from_physname (const char *physname)
1050{
1051 char *ret = NULL;
1052 const char *end;
31c27f77
JJ
1053 char *demangled_name = java_demangle (physname, DMGL_PARAMS | DMGL_ANSI);
1054
1055 if (demangled_name == NULL)
1056 return NULL;
1057
1058 end = java_find_last_component (demangled_name);
1059 if (end != NULL)
1060 {
1061 ret = xmalloc (end - demangled_name + 1);
1062 memcpy (ret, demangled_name, end - demangled_name);
1063 ret[end - demangled_name] = '\0';
1064 }
1065
1066 xfree (demangled_name);
1067 return ret;
1068}
9a3d7dfd 1069
c906108c
SS
1070/* Table mapping opcodes into strings for printing operators
1071 and precedences of the operators. */
1072
1073const struct op_print java_op_print_tab[] =
c5aa993b
JM
1074{
1075 {",", BINOP_COMMA, PREC_COMMA, 0},
1076 {"=", BINOP_ASSIGN, PREC_ASSIGN, 1},
1077 {"||", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
1078 {"&&", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
1079 {"|", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
1080 {"^", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
1081 {"&", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
1082 {"==", BINOP_EQUAL, PREC_EQUAL, 0},
1083 {"!=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
1084 {"<=", BINOP_LEQ, PREC_ORDER, 0},
1085 {">=", BINOP_GEQ, PREC_ORDER, 0},
1086 {">", BINOP_GTR, PREC_ORDER, 0},
1087 {"<", BINOP_LESS, PREC_ORDER, 0},
1088 {">>", BINOP_RSH, PREC_SHIFT, 0},
1089 {"<<", BINOP_LSH, PREC_SHIFT, 0},
c5aa993b
JM
1090 {"+", BINOP_ADD, PREC_ADD, 0},
1091 {"-", BINOP_SUB, PREC_ADD, 0},
1092 {"*", BINOP_MUL, PREC_MUL, 0},
1093 {"/", BINOP_DIV, PREC_MUL, 0},
1094 {"%", BINOP_REM, PREC_MUL, 0},
1095 {"-", UNOP_NEG, PREC_PREFIX, 0},
1096 {"!", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
1097 {"~", UNOP_COMPLEMENT, PREC_PREFIX, 0},
1098 {"*", UNOP_IND, PREC_PREFIX, 0},
c5aa993b
JM
1099 {"++", UNOP_PREINCREMENT, PREC_PREFIX, 0},
1100 {"--", UNOP_PREDECREMENT, PREC_PREFIX, 0},
1101 {NULL, 0, 0, 0}
c906108c
SS
1102};
1103
de7b6b47
UW
1104enum java_primitive_types
1105{
1106 java_primitive_type_int,
1107 java_primitive_type_short,
1108 java_primitive_type_long,
1109 java_primitive_type_byte,
1110 java_primitive_type_boolean,
1111 java_primitive_type_char,
1112 java_primitive_type_float,
1113 java_primitive_type_double,
1114 java_primitive_type_void,
1115 nr_java_primitive_types
1116};
1117
2c0b251b 1118static void
de7b6b47
UW
1119java_language_arch_info (struct gdbarch *gdbarch,
1120 struct language_arch_info *lai)
1121{
0daa2b63
UW
1122 const struct builtin_java_type *builtin = builtin_java_type (gdbarch);
1123
1124 lai->string_char_type = builtin->builtin_char;
de7b6b47
UW
1125 lai->primitive_type_vector
1126 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_java_primitive_types + 1,
1127 struct type *);
1128 lai->primitive_type_vector [java_primitive_type_int]
0daa2b63 1129 = builtin->builtin_int;
de7b6b47 1130 lai->primitive_type_vector [java_primitive_type_short]
0daa2b63 1131 = builtin->builtin_short;
de7b6b47 1132 lai->primitive_type_vector [java_primitive_type_long]
0daa2b63 1133 = builtin->builtin_long;
de7b6b47 1134 lai->primitive_type_vector [java_primitive_type_byte]
0daa2b63 1135 = builtin->builtin_byte;
de7b6b47 1136 lai->primitive_type_vector [java_primitive_type_boolean]
0daa2b63 1137 = builtin->builtin_boolean;
de7b6b47 1138 lai->primitive_type_vector [java_primitive_type_char]
0daa2b63 1139 = builtin->builtin_char;
de7b6b47 1140 lai->primitive_type_vector [java_primitive_type_float]
0daa2b63 1141 = builtin->builtin_float;
de7b6b47 1142 lai->primitive_type_vector [java_primitive_type_double]
0daa2b63 1143 = builtin->builtin_double;
de7b6b47 1144 lai->primitive_type_vector [java_primitive_type_void]
0daa2b63 1145 = builtin->builtin_void;
fbb06eb1
UW
1146
1147 lai->bool_type_symbol = "boolean";
0daa2b63 1148 lai->bool_type_default = builtin->builtin_boolean;
de7b6b47
UW
1149}
1150
5f9769d1
PH
1151const struct exp_descriptor exp_descriptor_java =
1152{
1153 print_subexp_standard,
1154 operator_length_standard,
c0201579 1155 operator_check_standard,
5f9769d1
PH
1156 op_name_standard,
1157 dump_subexp_body_standard,
1158 evaluate_subexp_java
1159};
1160
c5aa993b
JM
1161const struct language_defn java_language_defn =
1162{
1163 "java", /* Language name */
c906108c 1164 language_java,
c906108c
SS
1165 range_check_off,
1166 type_check_off,
63872f9d 1167 case_sensitive_on,
7ca2d3a3 1168 array_row_major,
9a044a89 1169 macro_expansion_no,
5f9769d1 1170 &exp_descriptor_java,
c906108c
SS
1171 java_parse,
1172 java_error,
e85c3284 1173 null_post_parser,
c906108c
SS
1174 c_printchar, /* Print a character constant */
1175 c_printstr, /* Function to print string constant */
1176 java_emit_char, /* Function to print a single character */
c906108c 1177 java_print_type, /* Print a type using appropriate syntax */
5c6ce71d 1178 default_print_typedef, /* Print a typedef using appropriate syntax */
c906108c
SS
1179 java_val_print, /* Print a value using appropriate syntax */
1180 java_value_print, /* Print a top-level value */
f636b87d 1181 NULL, /* Language specific skip_trampoline */
2b2d9e11 1182 "this", /* name_of_this */
5f9a71c3 1183 basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
b368761e 1184 basic_lookup_transparent_type,/* lookup_transparent_type */
9a3d7dfd 1185 java_demangle, /* Language specific symbol demangler */
31c27f77 1186 java_class_name_from_physname,/* Language specific class name */
c906108c
SS
1187 java_op_print_tab, /* expression operators for printing */
1188 0, /* not c-style arrays */
1189 0, /* String lower bound */
6084f43a 1190 default_word_break_characters,
41d27058 1191 default_make_symbol_completion_list,
de7b6b47 1192 java_language_arch_info,
e79af960 1193 default_print_array_index,
41f1b697 1194 default_pass_by_reference,
ae6a3a4c 1195 default_get_string,
c906108c
SS
1196 LANG_MAGIC
1197};
1198
0daa2b63
UW
1199static void *
1200build_java_types (struct gdbarch *gdbarch)
1201{
1202 struct builtin_java_type *builtin_java_type
1203 = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct builtin_java_type);
1204
1205 builtin_java_type->builtin_int
e9bb382b 1206 = arch_integer_type (gdbarch, 32, 0, "int");
0daa2b63 1207 builtin_java_type->builtin_short
e9bb382b 1208 = arch_integer_type (gdbarch, 16, 0, "short");
0daa2b63 1209 builtin_java_type->builtin_long
e9bb382b 1210 = arch_integer_type (gdbarch, 64, 0, "long");
0daa2b63 1211 builtin_java_type->builtin_byte
e9bb382b 1212 = arch_integer_type (gdbarch, 8, 0, "byte");
0daa2b63 1213 builtin_java_type->builtin_boolean
e9bb382b 1214 = arch_boolean_type (gdbarch, 8, 0, "boolean");
0daa2b63 1215 builtin_java_type->builtin_char
e9bb382b 1216 = arch_character_type (gdbarch, 16, 1, "char");
0daa2b63 1217 builtin_java_type->builtin_float
e9bb382b 1218 = arch_float_type (gdbarch, 32, "float", NULL);
0daa2b63 1219 builtin_java_type->builtin_double
e9bb382b 1220 = arch_float_type (gdbarch, 64, "double", NULL);
0daa2b63 1221 builtin_java_type->builtin_void
e9bb382b 1222 = arch_type (gdbarch, TYPE_CODE_VOID, 1, "void");
0daa2b63
UW
1223
1224 return builtin_java_type;
1225}
1226
1227static struct gdbarch_data *java_type_data;
1228
1229const struct builtin_java_type *
1230builtin_java_type (struct gdbarch *gdbarch)
1231{
1232 return gdbarch_data (gdbarch, java_type_data);
1233}
1234
c906108c 1235void
fba45db2 1236_initialize_java_language (void)
c906108c 1237{
20781792
TT
1238 jv_dynamics_objfile_data_key
1239 = register_objfile_data_with_cleanup (NULL, jv_per_objfile_free);
1240 jv_type_objfile_data_key
1241 = register_objfile_data_with_cleanup (NULL, jv_clear_object_type);
1242
0daa2b63 1243 java_type_data = gdbarch_data_register_post_init (build_java_types);
c906108c
SS
1244
1245 add_language (&java_language_defn);
1246}
This page took 0.955628 seconds and 4 git commands to generate.