OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [include/] [demangle.h] - Blame information for rev 726

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 726 jeremybenn
/* Defs for interface to demanglers.
2
   Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002,
3
   2003, 2004, 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
4
 
5
   This program is free software; you can redistribute it and/or
6
   modify it under the terms of the GNU Library General Public License
7
   as published by the Free Software Foundation; either version 2, or
8
   (at your option) any later version.
9
 
10
   In addition to the permissions in the GNU Library General Public
11
   License, the Free Software Foundation gives you unlimited
12
   permission to link the compiled version of this file into
13
   combinations with other programs, and to distribute those
14
   combinations without any restriction coming from the use of this
15
   file.  (The Library Public License restrictions do apply in other
16
   respects; for example, they cover modification of the file, and
17
   distribution when not linked into a combined executable.)
18
 
19
   This program is distributed in the hope that it will be useful, but
20
   WITHOUT ANY WARRANTY; without even the implied warranty of
21
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
22
   Library General Public License for more details.
23
 
24
   You should have received a copy of the GNU Library General Public
25
   License along with this program; if not, write to the Free Software
26
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
27
   02110-1301, USA.  */
28
 
29
 
30
#if !defined (DEMANGLE_H)
31
#define DEMANGLE_H
32
 
33
#include "libiberty.h"
34
 
35
#ifdef __cplusplus
36
extern "C" {
37
#endif /* __cplusplus */
38
 
39
/* Options passed to cplus_demangle (in 2nd parameter). */
40
 
41
#define DMGL_NO_OPTS     0              /* For readability... */
42
#define DMGL_PARAMS      (1 << 0)       /* Include function args */
43
#define DMGL_ANSI        (1 << 1)       /* Include const, volatile, etc */
44
#define DMGL_JAVA        (1 << 2)       /* Demangle as Java rather than C++. */
45
#define DMGL_VERBOSE     (1 << 3)       /* Include implementation details.  */
46
#define DMGL_TYPES       (1 << 4)       /* Also try to demangle type encodings.  */
47
#define DMGL_RET_POSTFIX (1 << 5)       /* Print function return types (when
48
                                           present) after function signature.
49
                                           It applies only to the toplevel
50
                                           function type.  */
51
#define DMGL_RET_DROP    (1 << 6)       /* Suppress printing function return
52
                                           types, even if present.  It applies
53
                                           only to the toplevel function type.
54
                                           */
55
 
56
#define DMGL_AUTO        (1 << 8)
57
#define DMGL_GNU         (1 << 9)
58
#define DMGL_LUCID       (1 << 10)
59
#define DMGL_ARM         (1 << 11)
60
#define DMGL_HP          (1 << 12)       /* For the HP aCC compiler;
61
                                            same as ARM except for
62
                                            template arguments, etc. */
63
#define DMGL_EDG         (1 << 13)
64
#define DMGL_GNU_V3      (1 << 14)
65
#define DMGL_GNAT        (1 << 15)
66
 
67
/* If none of these are set, use 'current_demangling_style' as the default. */
68
#define DMGL_STYLE_MASK (DMGL_AUTO|DMGL_GNU|DMGL_LUCID|DMGL_ARM|DMGL_HP|DMGL_EDG|DMGL_GNU_V3|DMGL_JAVA|DMGL_GNAT)
69
 
70
/* Enumeration of possible demangling styles.
71
 
72
   Lucid and ARM styles are still kept logically distinct, even though
73
   they now both behave identically.  The resulting style is actual the
74
   union of both.  I.E. either style recognizes both "__pt__" and "__rf__"
75
   for operator "->", even though the first is lucid style and the second
76
   is ARM style. (FIXME?) */
77
 
78
extern enum demangling_styles
79
{
80
  no_demangling = -1,
81
  unknown_demangling = 0,
82
  auto_demangling = DMGL_AUTO,
83
  gnu_demangling = DMGL_GNU,
84
  lucid_demangling = DMGL_LUCID,
85
  arm_demangling = DMGL_ARM,
86
  hp_demangling = DMGL_HP,
87
  edg_demangling = DMGL_EDG,
88
  gnu_v3_demangling = DMGL_GNU_V3,
89
  java_demangling = DMGL_JAVA,
90
  gnat_demangling = DMGL_GNAT
91
} current_demangling_style;
92
 
93
/* Define string names for the various demangling styles. */
94
 
95
#define NO_DEMANGLING_STYLE_STRING            "none"
96
#define AUTO_DEMANGLING_STYLE_STRING          "auto"
97
#define GNU_DEMANGLING_STYLE_STRING           "gnu"
98
#define LUCID_DEMANGLING_STYLE_STRING         "lucid"
99
#define ARM_DEMANGLING_STYLE_STRING           "arm"
100
#define HP_DEMANGLING_STYLE_STRING            "hp"
101
#define EDG_DEMANGLING_STYLE_STRING           "edg"
102
#define GNU_V3_DEMANGLING_STYLE_STRING        "gnu-v3"
103
#define JAVA_DEMANGLING_STYLE_STRING          "java"
104
#define GNAT_DEMANGLING_STYLE_STRING          "gnat"
105
 
106
/* Some macros to test what demangling style is active. */
107
 
108
#define CURRENT_DEMANGLING_STYLE current_demangling_style
109
#define AUTO_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_AUTO)
110
#define GNU_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNU)
111
#define LUCID_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_LUCID)
112
#define ARM_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_ARM)
113
#define HP_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_HP)
114
#define EDG_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_EDG)
115
#define GNU_V3_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNU_V3)
116
#define JAVA_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_JAVA)
117
#define GNAT_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNAT)
118
 
119
/* Provide information about the available demangle styles. This code is
120
   pulled from gdb into libiberty because it is useful to binutils also.  */
121
 
122
extern const struct demangler_engine
123
{
124
  const char *const demangling_style_name;
125
  const enum demangling_styles demangling_style;
126
  const char *const demangling_style_doc;
127
} libiberty_demanglers[];
128
 
129
extern char *
130
cplus_demangle (const char *mangled, int options);
131
 
132
extern int
133
cplus_demangle_opname (const char *opname, char *result, int options);
134
 
135
extern const char *
136
cplus_mangle_opname (const char *opname, int options);
137
 
138
/* Note: This sets global state.  FIXME if you care about multi-threading. */
139
 
140
extern void
141
set_cplus_marker_for_demangling (int ch);
142
 
143
extern enum demangling_styles
144
cplus_demangle_set_style (enum demangling_styles style);
145
 
146
extern enum demangling_styles
147
cplus_demangle_name_to_style (const char *name);
148
 
149
/* Callback typedef for allocation-less demangler interfaces. */
150
typedef void (*demangle_callbackref) (const char *, size_t, void *);
151
 
152
/* V3 ABI demangling entry points, defined in cp-demangle.c.  Callback
153
   variants return non-zero on success, zero on error.  char* variants
154
   return a string allocated by malloc on success, NULL on error.  */
155
extern int
156
cplus_demangle_v3_callback (const char *mangled, int options,
157
                            demangle_callbackref callback, void *opaque);
158
 
159
extern char*
160
cplus_demangle_v3 (const char *mangled, int options);
161
 
162
extern int
163
java_demangle_v3_callback (const char *mangled,
164
                           demangle_callbackref callback, void *opaque);
165
 
166
extern char*
167
java_demangle_v3 (const char *mangled);
168
 
169
char *
170
ada_demangle (const char *mangled, int options);
171
 
172
enum gnu_v3_ctor_kinds {
173
  gnu_v3_complete_object_ctor = 1,
174
  gnu_v3_base_object_ctor,
175
  gnu_v3_complete_object_allocating_ctor,
176
  gnu_v3_object_ctor_group
177
};
178
 
179
/* Return non-zero iff NAME is the mangled form of a constructor name
180
   in the G++ V3 ABI demangling style.  Specifically, return an `enum
181
   gnu_v3_ctor_kinds' value indicating what kind of constructor
182
   it is.  */
183
extern enum gnu_v3_ctor_kinds
184
        is_gnu_v3_mangled_ctor (const char *name);
185
 
186
 
187
enum gnu_v3_dtor_kinds {
188
  gnu_v3_deleting_dtor = 1,
189
  gnu_v3_complete_object_dtor,
190
  gnu_v3_base_object_dtor,
191
  gnu_v3_object_dtor_group
192
};
193
 
194
/* Return non-zero iff NAME is the mangled form of a destructor name
195
   in the G++ V3 ABI demangling style.  Specifically, return an `enum
196
   gnu_v3_dtor_kinds' value, indicating what kind of destructor
197
   it is.  */
198
extern enum gnu_v3_dtor_kinds
199
        is_gnu_v3_mangled_dtor (const char *name);
200
 
201
/* The V3 demangler works in two passes.  The first pass builds a tree
202
   representation of the mangled name, and the second pass turns the
203
   tree representation into a demangled string.  Here we define an
204
   interface to permit a caller to build their own tree
205
   representation, which they can pass to the demangler to get a
206
   demangled string.  This can be used to canonicalize user input into
207
   something which the demangler might output.  It could also be used
208
   by other demanglers in the future.  */
209
 
210
/* These are the component types which may be found in the tree.  Many
211
   component types have one or two subtrees, referred to as left and
212
   right (a component type with only one subtree puts it in the left
213
   subtree).  */
214
 
215
enum demangle_component_type
216
{
217
  /* A name, with a length and a pointer to a string.  */
218
  DEMANGLE_COMPONENT_NAME,
219
  /* A qualified name.  The left subtree is a class or namespace or
220
     some such thing, and the right subtree is a name qualified by
221
     that class.  */
222
  DEMANGLE_COMPONENT_QUAL_NAME,
223
  /* A local name.  The left subtree describes a function, and the
224
     right subtree is a name which is local to that function.  */
225
  DEMANGLE_COMPONENT_LOCAL_NAME,
226
  /* A typed name.  The left subtree is a name, and the right subtree
227
     describes that name as a function.  */
228
  DEMANGLE_COMPONENT_TYPED_NAME,
229
  /* A template.  The left subtree is a template name, and the right
230
     subtree is a template argument list.  */
231
  DEMANGLE_COMPONENT_TEMPLATE,
232
  /* A template parameter.  This holds a number, which is the template
233
     parameter index.  */
234
  DEMANGLE_COMPONENT_TEMPLATE_PARAM,
235
  /* A function parameter.  This holds a number, which is the index.  */
236
  DEMANGLE_COMPONENT_FUNCTION_PARAM,
237
  /* A constructor.  This holds a name and the kind of
238
     constructor.  */
239
  DEMANGLE_COMPONENT_CTOR,
240
  /* A destructor.  This holds a name and the kind of destructor.  */
241
  DEMANGLE_COMPONENT_DTOR,
242
  /* A vtable.  This has one subtree, the type for which this is a
243
     vtable.  */
244
  DEMANGLE_COMPONENT_VTABLE,
245
  /* A VTT structure.  This has one subtree, the type for which this
246
     is a VTT.  */
247
  DEMANGLE_COMPONENT_VTT,
248
  /* A construction vtable.  The left subtree is the type for which
249
     this is a vtable, and the right subtree is the derived type for
250
     which this vtable is built.  */
251
  DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE,
252
  /* A typeinfo structure.  This has one subtree, the type for which
253
     this is the tpeinfo structure.  */
254
  DEMANGLE_COMPONENT_TYPEINFO,
255
  /* A typeinfo name.  This has one subtree, the type for which this
256
     is the typeinfo name.  */
257
  DEMANGLE_COMPONENT_TYPEINFO_NAME,
258
  /* A typeinfo function.  This has one subtree, the type for which
259
     this is the tpyeinfo function.  */
260
  DEMANGLE_COMPONENT_TYPEINFO_FN,
261
  /* A thunk.  This has one subtree, the name for which this is a
262
     thunk.  */
263
  DEMANGLE_COMPONENT_THUNK,
264
  /* A virtual thunk.  This has one subtree, the name for which this
265
     is a virtual thunk.  */
266
  DEMANGLE_COMPONENT_VIRTUAL_THUNK,
267
  /* A covariant thunk.  This has one subtree, the name for which this
268
     is a covariant thunk.  */
269
  DEMANGLE_COMPONENT_COVARIANT_THUNK,
270
  /* A Java class.  This has one subtree, the type.  */
271
  DEMANGLE_COMPONENT_JAVA_CLASS,
272
  /* A guard variable.  This has one subtree, the name for which this
273
     is a guard variable.  */
274
  DEMANGLE_COMPONENT_GUARD,
275
  /* A reference temporary.  This has one subtree, the name for which
276
     this is a temporary.  */
277
  DEMANGLE_COMPONENT_REFTEMP,
278
  /* A hidden alias.  This has one subtree, the encoding for which it
279
     is providing alternative linkage.  */
280
  DEMANGLE_COMPONENT_HIDDEN_ALIAS,
281
  /* A standard substitution.  This holds the name of the
282
     substitution.  */
283
  DEMANGLE_COMPONENT_SUB_STD,
284
  /* The restrict qualifier.  The one subtree is the type which is
285
     being qualified.  */
286
  DEMANGLE_COMPONENT_RESTRICT,
287
  /* The volatile qualifier.  The one subtree is the type which is
288
     being qualified.  */
289
  DEMANGLE_COMPONENT_VOLATILE,
290
  /* The const qualifier.  The one subtree is the type which is being
291
     qualified.  */
292
  DEMANGLE_COMPONENT_CONST,
293
  /* The restrict qualifier modifying a member function.  The one
294
     subtree is the type which is being qualified.  */
295
  DEMANGLE_COMPONENT_RESTRICT_THIS,
296
  /* The volatile qualifier modifying a member function.  The one
297
     subtree is the type which is being qualified.  */
298
  DEMANGLE_COMPONENT_VOLATILE_THIS,
299
  /* The const qualifier modifying a member function.  The one subtree
300
     is the type which is being qualified.  */
301
  DEMANGLE_COMPONENT_CONST_THIS,
302
  /* A vendor qualifier.  The left subtree is the type which is being
303
     qualified, and the right subtree is the name of the
304
     qualifier.  */
305
  DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL,
306
  /* A pointer.  The one subtree is the type which is being pointed
307
     to.  */
308
  DEMANGLE_COMPONENT_POINTER,
309
  /* A reference.  The one subtree is the type which is being
310
     referenced.  */
311
  DEMANGLE_COMPONENT_REFERENCE,
312
  /* C++0x: An rvalue reference.  The one subtree is the type which is
313
     being referenced.  */
314
  DEMANGLE_COMPONENT_RVALUE_REFERENCE,
315
  /* A complex type.  The one subtree is the base type.  */
316
  DEMANGLE_COMPONENT_COMPLEX,
317
  /* An imaginary type.  The one subtree is the base type.  */
318
  DEMANGLE_COMPONENT_IMAGINARY,
319
  /* A builtin type.  This holds the builtin type information.  */
320
  DEMANGLE_COMPONENT_BUILTIN_TYPE,
321
  /* A vendor's builtin type.  This holds the name of the type.  */
322
  DEMANGLE_COMPONENT_VENDOR_TYPE,
323
  /* A function type.  The left subtree is the return type.  The right
324
     subtree is a list of ARGLIST nodes.  Either or both may be
325
     NULL.  */
326
  DEMANGLE_COMPONENT_FUNCTION_TYPE,
327
  /* An array type.  The left subtree is the dimension, which may be
328
     NULL, or a string (represented as DEMANGLE_COMPONENT_NAME), or an
329
     expression.  The right subtree is the element type.  */
330
  DEMANGLE_COMPONENT_ARRAY_TYPE,
331
  /* A pointer to member type.  The left subtree is the class type,
332
     and the right subtree is the member type.  CV-qualifiers appear
333
     on the latter.  */
334
  DEMANGLE_COMPONENT_PTRMEM_TYPE,
335
  /* A fixed-point type.  */
336
  DEMANGLE_COMPONENT_FIXED_TYPE,
337
  /* A vector type.  The left subtree is the number of elements,
338
     the right subtree is the element type.  */
339
  DEMANGLE_COMPONENT_VECTOR_TYPE,
340
  /* An argument list.  The left subtree is the current argument, and
341
     the right subtree is either NULL or another ARGLIST node.  */
342
  DEMANGLE_COMPONENT_ARGLIST,
343
  /* A template argument list.  The left subtree is the current
344
     template argument, and the right subtree is either NULL or
345
     another TEMPLATE_ARGLIST node.  */
346
  DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,
347
  /* An initializer list.  The left subtree is either an explicit type or
348
     NULL, and the right subtree is a DEMANGLE_COMPONENT_ARGLIST.  */
349
  DEMANGLE_COMPONENT_INITIALIZER_LIST,
350
  /* An operator.  This holds information about a standard
351
     operator.  */
352
  DEMANGLE_COMPONENT_OPERATOR,
353
  /* An extended operator.  This holds the number of arguments, and
354
     the name of the extended operator.  */
355
  DEMANGLE_COMPONENT_EXTENDED_OPERATOR,
356
  /* A typecast, represented as a unary operator.  The one subtree is
357
     the type to which the argument should be cast.  */
358
  DEMANGLE_COMPONENT_CAST,
359
  /* A nullary expression.  The left subtree is the operator.  */
360
  DEMANGLE_COMPONENT_NULLARY,
361
  /* A unary expression.  The left subtree is the operator, and the
362
     right subtree is the single argument.  */
363
  DEMANGLE_COMPONENT_UNARY,
364
  /* A binary expression.  The left subtree is the operator, and the
365
     right subtree is a BINARY_ARGS.  */
366
  DEMANGLE_COMPONENT_BINARY,
367
  /* Arguments to a binary expression.  The left subtree is the first
368
     argument, and the right subtree is the second argument.  */
369
  DEMANGLE_COMPONENT_BINARY_ARGS,
370
  /* A trinary expression.  The left subtree is the operator, and the
371
     right subtree is a TRINARY_ARG1.  */
372
  DEMANGLE_COMPONENT_TRINARY,
373
  /* Arguments to a trinary expression.  The left subtree is the first
374
     argument, and the right subtree is a TRINARY_ARG2.  */
375
  DEMANGLE_COMPONENT_TRINARY_ARG1,
376
  /* More arguments to a trinary expression.  The left subtree is the
377
     second argument, and the right subtree is the third argument.  */
378
  DEMANGLE_COMPONENT_TRINARY_ARG2,
379
  /* A literal.  The left subtree is the type, and the right subtree
380
     is the value, represented as a DEMANGLE_COMPONENT_NAME.  */
381
  DEMANGLE_COMPONENT_LITERAL,
382
  /* A negative literal.  Like LITERAL, but the value is negated.
383
     This is a minor hack: the NAME used for LITERAL points directly
384
     to the mangled string, but since negative numbers are mangled
385
     using 'n' instead of '-', we want a way to indicate a negative
386
     number which involves neither modifying the mangled string nor
387
     allocating a new copy of the literal in memory.  */
388
  DEMANGLE_COMPONENT_LITERAL_NEG,
389
  /* A libgcj compiled resource.  The left subtree is the name of the
390
     resource.  */
391
  DEMANGLE_COMPONENT_JAVA_RESOURCE,
392
  /* A name formed by the concatenation of two parts.  The left
393
     subtree is the first part and the right subtree the second.  */
394
  DEMANGLE_COMPONENT_COMPOUND_NAME,
395
  /* A name formed by a single character.  */
396
  DEMANGLE_COMPONENT_CHARACTER,
397
  /* A number.  */
398
  DEMANGLE_COMPONENT_NUMBER,
399
  /* A decltype type.  */
400
  DEMANGLE_COMPONENT_DECLTYPE,
401
  /* Global constructors keyed to name.  */
402
  DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS,
403
  /* Global destructors keyed to name.  */
404
  DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS,
405
  /* A lambda closure type.  */
406
  DEMANGLE_COMPONENT_LAMBDA,
407
  /* A default argument scope.  */
408
  DEMANGLE_COMPONENT_DEFAULT_ARG,
409
  /* An unnamed type.  */
410
  DEMANGLE_COMPONENT_UNNAMED_TYPE,
411
  /* A transactional clone.  This has one subtree, the encoding for
412
     which it is providing alternative linkage.  */
413
  DEMANGLE_COMPONENT_TRANSACTION_CLONE,
414
  /* A non-transactional clone entry point.  In the i386/x86_64 abi,
415
     the unmangled symbol of a tm_callable becomes a thunk and the
416
     non-transactional function version is mangled thus.  */
417
  DEMANGLE_COMPONENT_NONTRANSACTION_CLONE,
418
  /* A pack expansion.  */
419
  DEMANGLE_COMPONENT_PACK_EXPANSION,
420
  /* A cloned function.  */
421
  DEMANGLE_COMPONENT_CLONE
422
};
423
 
424
/* Types which are only used internally.  */
425
 
426
struct demangle_operator_info;
427
struct demangle_builtin_type_info;
428
 
429
/* A node in the tree representation is an instance of a struct
430
   demangle_component.  Note that the field names of the struct are
431
   not well protected against macros defined by the file including
432
   this one.  We can fix this if it ever becomes a problem.  */
433
 
434
struct demangle_component
435
{
436
  /* The type of this component.  */
437
  enum demangle_component_type type;
438
 
439
  union
440
  {
441
    /* For DEMANGLE_COMPONENT_NAME.  */
442
    struct
443
    {
444
      /* A pointer to the name (which need not NULL terminated) and
445
         its length.  */
446
      const char *s;
447
      int len;
448
    } s_name;
449
 
450
    /* For DEMANGLE_COMPONENT_OPERATOR.  */
451
    struct
452
    {
453
      /* Operator.  */
454
      const struct demangle_operator_info *op;
455
    } s_operator;
456
 
457
    /* For DEMANGLE_COMPONENT_EXTENDED_OPERATOR.  */
458
    struct
459
    {
460
      /* Number of arguments.  */
461
      int args;
462
      /* Name.  */
463
      struct demangle_component *name;
464
    } s_extended_operator;
465
 
466
    /* For DEMANGLE_COMPONENT_FIXED_TYPE.  */
467
    struct
468
    {
469
      /* The length, indicated by a C integer type name.  */
470
      struct demangle_component *length;
471
      /* _Accum or _Fract?  */
472
      short accum;
473
      /* Saturating or not?  */
474
      short sat;
475
    } s_fixed;
476
 
477
    /* For DEMANGLE_COMPONENT_CTOR.  */
478
    struct
479
    {
480
      /* Kind of constructor.  */
481
      enum gnu_v3_ctor_kinds kind;
482
      /* Name.  */
483
      struct demangle_component *name;
484
    } s_ctor;
485
 
486
    /* For DEMANGLE_COMPONENT_DTOR.  */
487
    struct
488
    {
489
      /* Kind of destructor.  */
490
      enum gnu_v3_dtor_kinds kind;
491
      /* Name.  */
492
      struct demangle_component *name;
493
    } s_dtor;
494
 
495
    /* For DEMANGLE_COMPONENT_BUILTIN_TYPE.  */
496
    struct
497
    {
498
      /* Builtin type.  */
499
      const struct demangle_builtin_type_info *type;
500
    } s_builtin;
501
 
502
    /* For DEMANGLE_COMPONENT_SUB_STD.  */
503
    struct
504
    {
505
      /* Standard substitution string.  */
506
      const char* string;
507
      /* Length of string.  */
508
      int len;
509
    } s_string;
510
 
511
    /* For DEMANGLE_COMPONENT_*_PARAM.  */
512
    struct
513
    {
514
      /* Parameter index.  */
515
      long number;
516
    } s_number;
517
 
518
    /* For DEMANGLE_COMPONENT_CHARACTER.  */
519
    struct
520
    {
521
      int character;
522
    } s_character;
523
 
524
    /* For other types.  */
525
    struct
526
    {
527
      /* Left (or only) subtree.  */
528
      struct demangle_component *left;
529
      /* Right subtree.  */
530
      struct demangle_component *right;
531
    } s_binary;
532
 
533
    struct
534
    {
535
      /* subtree, same place as d_left.  */
536
      struct demangle_component *sub;
537
      /* integer.  */
538
      int num;
539
    } s_unary_num;
540
 
541
  } u;
542
};
543
 
544
/* People building mangled trees are expected to allocate instances of
545
   struct demangle_component themselves.  They can then call one of
546
   the following functions to fill them in.  */
547
 
548
/* Fill in most component types with a left subtree and a right
549
   subtree.  Returns non-zero on success, zero on failure, such as an
550
   unrecognized or inappropriate component type.  */
551
 
552
extern int
553
cplus_demangle_fill_component (struct demangle_component *fill,
554
                               enum demangle_component_type,
555
                               struct demangle_component *left,
556
                               struct demangle_component *right);
557
 
558
/* Fill in a DEMANGLE_COMPONENT_NAME.  Returns non-zero on success,
559
   zero for bad arguments.  */
560
 
561
extern int
562
cplus_demangle_fill_name (struct demangle_component *fill,
563
                          const char *, int);
564
 
565
/* Fill in a DEMANGLE_COMPONENT_BUILTIN_TYPE, using the name of the
566
   builtin type (e.g., "int", etc.).  Returns non-zero on success,
567
   zero if the type is not recognized.  */
568
 
569
extern int
570
cplus_demangle_fill_builtin_type (struct demangle_component *fill,
571
                                  const char *type_name);
572
 
573
/* Fill in a DEMANGLE_COMPONENT_OPERATOR, using the name of the
574
   operator and the number of arguments which it takes (the latter is
575
   used to disambiguate operators which can be both binary and unary,
576
   such as '-').  Returns non-zero on success, zero if the operator is
577
   not recognized.  */
578
 
579
extern int
580
cplus_demangle_fill_operator (struct demangle_component *fill,
581
                              const char *opname, int args);
582
 
583
/* Fill in a DEMANGLE_COMPONENT_EXTENDED_OPERATOR, providing the
584
   number of arguments and the name.  Returns non-zero on success,
585
   zero for bad arguments.  */
586
 
587
extern int
588
cplus_demangle_fill_extended_operator (struct demangle_component *fill,
589
                                       int numargs,
590
                                       struct demangle_component *nm);
591
 
592
/* Fill in a DEMANGLE_COMPONENT_CTOR.  Returns non-zero on success,
593
   zero for bad arguments.  */
594
 
595
extern int
596
cplus_demangle_fill_ctor (struct demangle_component *fill,
597
                          enum gnu_v3_ctor_kinds kind,
598
                          struct demangle_component *name);
599
 
600
/* Fill in a DEMANGLE_COMPONENT_DTOR.  Returns non-zero on success,
601
   zero for bad arguments.  */
602
 
603
extern int
604
cplus_demangle_fill_dtor (struct demangle_component *fill,
605
                          enum gnu_v3_dtor_kinds kind,
606
                          struct demangle_component *name);
607
 
608
/* This function translates a mangled name into a struct
609
   demangle_component tree.  The first argument is the mangled name.
610
   The second argument is DMGL_* options.  This returns a pointer to a
611
   tree on success, or NULL on failure.  On success, the third
612
   argument is set to a block of memory allocated by malloc.  This
613
   block should be passed to free when the tree is no longer
614
   needed.  */
615
 
616
extern struct demangle_component *
617
cplus_demangle_v3_components (const char *mangled, int options, void **mem);
618
 
619
/* This function takes a struct demangle_component tree and returns
620
   the corresponding demangled string.  The first argument is DMGL_*
621
   options.  The second is the tree to demangle.  The third is a guess
622
   at the length of the demangled string, used to initially allocate
623
   the return buffer.  The fourth is a pointer to a size_t.  On
624
   success, this function returns a buffer allocated by malloc(), and
625
   sets the size_t pointed to by the fourth argument to the size of
626
   the allocated buffer (not the length of the returned string).  On
627
   failure, this function returns NULL, and sets the size_t pointed to
628
   by the fourth argument to 0 for an invalid tree, or to 1 for a
629
   memory allocation error.  */
630
 
631
extern char *
632
cplus_demangle_print (int options,
633
                      const struct demangle_component *tree,
634
                      int estimated_length,
635
                      size_t *p_allocated_size);
636
 
637
/* This function takes a struct demangle_component tree and passes back
638
   a demangled string in one or more calls to a callback function.
639
   The first argument is DMGL_* options.  The second is the tree to
640
   demangle.  The third is a pointer to a callback function; on each call
641
   this receives an element of the demangled string, its length, and an
642
   opaque value.  The fourth is the opaque value passed to the callback.
643
   The callback is called once or more to return the full demangled
644
   string.  The demangled element string is always nul-terminated, though
645
   its length is also provided for convenience.  In contrast to
646
   cplus_demangle_print(), this function does not allocate heap memory
647
   to grow output strings (except perhaps where alloca() is implemented
648
   by malloc()), and so is normally safe for use where the heap has been
649
   corrupted.  On success, this function returns 1; on failure, 0.  */
650
 
651
extern int
652
cplus_demangle_print_callback (int options,
653
                               const struct demangle_component *tree,
654
                               demangle_callbackref callback, void *opaque);
655
 
656
#ifdef __cplusplus
657
}
658
#endif /* __cplusplus */
659
 
660
#endif  /* DEMANGLE_H */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.