blob: c2b94c912b5d9a14d7a58a8950f976ad031547d8 [file] [log] [blame]
Lev Walkinb46156d2017-09-05 02:53:05 -07001#ifndef ASN1_COMPILER_NAMING_H
2#define ASN1_COMPILER_NAMING_H
3
Lev Walkin6d692042017-09-29 23:15:30 -07004
5/*
6 * A member or a field name.
7 */
Lev Walkinb46156d2017-09-05 02:53:05 -07008struct c_names {
Lev Walkin6d692042017-09-29 23:15:30 -07009 struct {
10 const char *asn_name; /* "T-Rex" */
11 const char *part_name; /* "T_Rex" */
12 const char *base_name; /* "T_Rex" */
13 const char *c_name; /* "T_Rex_t" */
Lev Walkinb5450702017-10-04 02:52:57 -070014 const char *constrained_c_name; /* "long" */
Lev Walkin6d692042017-09-29 23:15:30 -070015 } type;
16 const char *asn_name; /* "foo" */
17 const char *part_name; /* "foo", "signed" */
18 const char *base_name; /* "foo" if not, "parent_foo" if compound */
Lev Walkinb46156d2017-09-05 02:53:05 -070019 const char *short_name; /* "foo_t", "e_foo" */
20 const char *full_name; /* "struct foo", "enum foo" */
21 const char *as_member; /* "foo" (not compounded) */
22 const char *presence_enum; /* "enum foo_PR" */
23 const char *presence_name; /* "foo_PR" */
24 const char *members_enum; /* "enum foo" */
25 const char *members_name; /* "e_foo" */
Bi-Ruei, Chiudcc822a2017-10-19 01:06:57 +080026 const char *compound_name; /* always contain "parent_foo" */
Lev Walkinb46156d2017-09-05 02:53:05 -070027};
28
29struct c_names c_name(arg_t *);
Lev Walkin6d692042017-09-29 23:15:30 -070030struct c_names c_expr_name(arg_t *, asn1p_expr_t *);
Lev Walkinb46156d2017-09-05 02:53:05 -070031const char *c_member_name(arg_t *, asn1p_expr_t *); /* %s_%s */
32const char *c_presence_name(arg_t *, asn1p_expr_t *); /* %s_PR_%s */
33
Lev Walkin6d692042017-09-29 23:15:30 -070034const char *c_names_format(struct c_names); /* For debugging */
35
Lev Walkin5efafc52017-09-05 03:43:00 -070036/*
37 * Returns 0 if no C name clashes have been encountered.
38 * Returns 1 if C name clashes have been encountered.
39 * Prints out the clashing items and suggests -fcompound-names.
40 */
41int c_name_clash(arg_t *arg);
42
43void c_name_clash_finder_init(void);
44
Lev Walkin47fc74c2017-09-26 18:02:27 -070045void c_name_clash_finder_destroy(void);
46
Lev Walkinb46156d2017-09-05 02:53:05 -070047#endif /* ASN1_COMPILER_NAMING_H */