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