upgrade to a new API
diff --git a/libasn1compiler/asn1c_C.c b/libasn1compiler/asn1c_C.c
index 881f3e4..0644954 100644
--- a/libasn1compiler/asn1c_C.c
+++ b/libasn1compiler/asn1c_C.c
@@ -445,7 +445,7 @@
if(!(expr->_type_referenced)) OUT("static ");
OUT("asn_TYPE_member_t asn_MBR_%s_%d[] = {\n",
- MKID(expr), expr->_type_unique_index);
+ c_name(arg).part_name, expr->_type_unique_index);
elements = 0;
roms_count = 0;
@@ -688,7 +688,7 @@
if(!(expr->_type_referenced)) OUT("static ");
OUT("asn_TYPE_member_t asn_MBR_%s_%d[] = {\n",
- MKID(expr), expr->_type_unique_index);
+ c_name(arg).part_name, expr->_type_unique_index);
elements = 0;
INDENTED(TQ_FOR(v, &(expr->members), next) {
@@ -900,7 +900,7 @@
*/
if(!(expr->_type_referenced)) OUT("static ");
OUT("asn_TYPE_member_t asn_MBR_%s_%d[] = {\n",
- MKID(expr), expr->_type_unique_index);
+ c_name(arg).part_name, expr->_type_unique_index);
INDENT(+1);
v = TQ_FIRST(&(expr->members));
if(!v->Identifier) {
@@ -1112,7 +1112,7 @@
if(!(expr->_type_referenced)) OUT("static ");
OUT("asn_TYPE_member_t asn_MBR_%s_%d[] = {\n",
- MKID(expr), expr->_type_unique_index);
+ c_name(arg).part_name, expr->_type_unique_index);
elements = 0;
INDENTED(TQ_FOR(v, &(expr->members), next) {
@@ -1351,11 +1351,7 @@
OUT("\n");
DEBUG("expr constraint checking code for %s", p);
if(asn1c_emit_constraint_checking_code(arg) == 1) {
- OUT("/* Replace with underlying type checker */\n");
- // OUT("td->check_constraints "
- // "= asn_DEF_%s.check_constraints;\n",
- // asn1c_type_name(arg, expr, TNF_SAFE));
- OUT("return td->check_constraints"
+ OUT("return td->encoding_constraints.general_constraints"
"(td, sptr, ctfailcb, app_key);\n");
}
INDENT(-1);
@@ -1392,216 +1388,6 @@
OUT(" * so here we adjust the DEF accordingly.\n");
OUT(" */\n");
-#if 0 /* remove unnecessary functions */
- OUT("static void\n");
- OUT("%s_%d_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {\n",
- MKID(expr), expr->_type_unique_index);
- INDENT(+1);
- {
- asn1p_expr_t *terminal = asn1f_find_terminal_type_ex(arg->asn, asn->ns, expr);
- char *type_name = asn1c_type_name(arg, expr, TNF_SAFE);
- OUT("td->free_struct = asn_DEF_%s.free_struct;\n", type_name);
- OUT("td->print_struct = asn_DEF_%s.print_struct;\n", type_name);
- OUT("td->check_constraints = asn_DEF_%s.check_constraints;\n", type_name);
- OUT("td->ber_decoder = asn_DEF_%s.ber_decoder;\n", type_name);
- OUT("td->der_encoder = asn_DEF_%s.der_encoder;\n", type_name);
- OUT("td->xer_decoder = asn_DEF_%s.xer_decoder;\n", type_name);
- OUT("td->xer_encoder = asn_DEF_%s.xer_encoder;\n", type_name);
- OUT("td->uper_decoder = asn_DEF_%s.uper_decoder;\n", type_name);
- OUT("td->uper_encoder = asn_DEF_%s.uper_encoder;\n", type_name);
- OUT("td->oer_decoder = asn_DEF_%s.oer_decoder;\n", type_name);
- OUT("td->oer_encoder = asn_DEF_%s.oer_encoder;\n", type_name);
- if(!terminal && !tags_count) {
- OUT("/* The next four lines are here because of -fknown-extern-type */\n");
- OUT("td->tags = asn_DEF_%s.tags;\n", type_name);
- OUT("td->tags_count = asn_DEF_%s.tags_count;\n", type_name);
- OUT("td->all_tags = asn_DEF_%s.all_tags;\n", type_name);
- OUT("td->all_tags_count = asn_DEF_%s.all_tags_count;\n",type_name);
- OUT("/* End of these lines */\n");
- }
- OUT("if(!td->oer_constraints)\n");
- OUT("\ttd->oer_constraints = asn_DEF_%s.oer_constraints;\n",
- type_name);
- OUT("if(!td->per_constraints)\n");
- OUT("\ttd->per_constraints = asn_DEF_%s.per_constraints;\n",
- type_name);
- OUT("td->elements = asn_DEF_%s.elements;\n", type_name);
- OUT("td->elements_count = asn_DEF_%s.elements_count;\n", type_name);
- if(etd_spec != ETD_NO_SPECIFICS) {
- INDENT(-1);
- OUT(" /* ");
- }
- OUT("td->specifics = asn_DEF_%s.specifics;", type_name);
- if(etd_spec == ETD_NO_SPECIFICS) {
- INDENT(-1);
- OUT("\n");
- } else {
- OUT("\t// Defined explicitly */\n");
- }
- }
- OUT("}\n");
- OUT("\n");
-
- p = MKID(expr);
- if(HIDE_INNER_DEFS) OUT("static ");
- OUT("void\n");
- OUT("%s", p);
- if(HIDE_INNER_DEFS) OUT("_%d", expr->_type_unique_index);
- OUT("_free(asn_TYPE_descriptor_t *td,\n");
- INDENTED(
- OUT("\tvoid *struct_ptr, int contents_only) {\n");
- OUT("%s_%d_inherit_TYPE_descriptor(td);\n",
- p, expr->_type_unique_index);
- OUT("td->free_struct(td, struct_ptr, contents_only);\n");
- );
- OUT("}\n");
- OUT("\n");
-
- p = MKID(expr);
- if(HIDE_INNER_DEFS) OUT("static ");
- OUT("int\n");
- OUT("%s", p);
- if(HIDE_INNER_DEFS) OUT("_%d", expr->_type_unique_index);
- OUT("_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,\n");
- INDENTED(
- OUT("\tint ilevel, asn_app_consume_bytes_f *cb, void *app_key) {\n");
- OUT("%s_%d_inherit_TYPE_descriptor(td);\n",
- p, expr->_type_unique_index);
- OUT("return td->print_struct(td, struct_ptr, ilevel, cb, app_key);\n");
- );
- OUT("}\n");
- OUT("\n");
-
- p = MKID(expr);
- if(HIDE_INNER_DEFS) OUT("static ");
- OUT("asn_dec_rval_t\n");
- OUT("%s", p);
- if(HIDE_INNER_DEFS) OUT("_%d", expr->_type_unique_index);
- OUT("_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,\n");
- INDENTED(
- OUT("\tvoid **structure, const void *bufptr, size_t size, int tag_mode) {\n");
- OUT("%s_%d_inherit_TYPE_descriptor(td);\n",
- p, expr->_type_unique_index);
- OUT("return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);\n");
- );
- OUT("}\n");
- OUT("\n");
-
- p = MKID(expr);
- if(HIDE_INNER_DEFS) OUT("static ");
- OUT("asn_enc_rval_t\n");
- OUT("%s", p);
- if(HIDE_INNER_DEFS) OUT("_%d", expr->_type_unique_index);
- OUT("_encode_der(asn_TYPE_descriptor_t *td,\n");
- INDENTED(
- OUT("\tvoid *structure, int tag_mode, ber_tlv_tag_t tag,\n");
- OUT("\tasn_app_consume_bytes_f *cb, void *app_key) {\n");
- OUT("%s_%d_inherit_TYPE_descriptor(td);\n",
- p, expr->_type_unique_index);
- OUT("return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);\n");
- );
- OUT("}\n");
- OUT("\n");
-
- p = MKID(expr);
- if(HIDE_INNER_DEFS) OUT("static ");
- OUT("asn_dec_rval_t\n");
- OUT("%s", p);
- if(HIDE_INNER_DEFS) OUT("_%d", expr->_type_unique_index);
- OUT("_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,\n");
- INDENTED(
- OUT("\tvoid **structure, const char *opt_mname, const void *bufptr, size_t size) {\n");
- OUT("%s_%d_inherit_TYPE_descriptor(td);\n",
- p, expr->_type_unique_index);
- OUT("return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);\n");
- );
- OUT("}\n");
- OUT("\n");
-
- p = MKID(expr);
- if(HIDE_INNER_DEFS) OUT("static ");
- OUT("asn_enc_rval_t\n");
- OUT("%s", p);
- if(HIDE_INNER_DEFS) OUT("_%d", expr->_type_unique_index);
- OUT("_encode_xer(asn_TYPE_descriptor_t *td, void *structure,\n");
- INDENTED(
- OUT("\tint ilevel, enum xer_encoder_flags_e flags,\n");
- OUT("\tasn_app_consume_bytes_f *cb, void *app_key) {\n");
- OUT("%s_%d_inherit_TYPE_descriptor(td);\n",
- p, expr->_type_unique_index);
- OUT("return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);\n");
- );
- OUT("}\n");
- OUT("\n");
-
- if(arg->flags & A1C_GEN_OER) {
- p = MKID(expr);
-
- if(HIDE_INNER_DEFS) OUT("static ");
- OUT("asn_dec_rval_t\n");
- OUT("%s", p);
- if(HIDE_INNER_DEFS) OUT("_%d", expr->_type_unique_index);
- OUT("_decode_oer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,\n");
- INDENTED(
- OUT("\tasn_oer_constraints_t *constraints, void **structure, const void *buffer, size_t size) {\n");
- OUT("%s_%d_inherit_TYPE_descriptor(td);\n",
- p, expr->_type_unique_index);
- OUT("return td->oer_decoder(opt_codec_ctx, td, constraints, structure, buffer, size);\n");
- );
- OUT("}\n");
- OUT("\n");
-
- p = MKID(expr);
- if(HIDE_INNER_DEFS) OUT("static ");
- OUT("asn_enc_rval_t\n");
- OUT("%s", p);
- if(HIDE_INNER_DEFS) OUT("_%d", expr->_type_unique_index);
- OUT("_encode_oer(asn_TYPE_descriptor_t *td,\n");
- INDENTED(
- OUT("\tasn_oer_constraints_t *constraints,\n");
- OUT("\tvoid *structure, asn_app_consume_bytes_f *cb, void *app_key) {\n");
- OUT("%s_%d_inherit_TYPE_descriptor(td);\n",
- p, expr->_type_unique_index);
- OUT("return td->uper_encoder(td, constraints, structure, cb, app_key);\n");
- );
- OUT("}\n");
- OUT("\n");
- }
-
- if(arg->flags & A1C_GEN_PER) {
- p = MKID(expr);
-
- if(HIDE_INNER_DEFS) OUT("static ");
- OUT("asn_dec_rval_t\n");
- OUT("%s", p);
- if(HIDE_INNER_DEFS) OUT("_%d", expr->_type_unique_index);
- OUT("_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,\n");
- INDENTED(
- OUT("\tasn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) {\n");
- OUT("%s_%d_inherit_TYPE_descriptor(td);\n",
- p, expr->_type_unique_index);
- OUT("return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data);\n");
- );
- OUT("}\n");
- OUT("\n");
-
- p = MKID(expr);
- if(HIDE_INNER_DEFS) OUT("static ");
- OUT("asn_enc_rval_t\n");
- OUT("%s", p);
- if(HIDE_INNER_DEFS) OUT("_%d", expr->_type_unique_index);
- OUT("_encode_uper(asn_TYPE_descriptor_t *td,\n");
- INDENTED(
- OUT("\tasn_per_constraints_t *constraints,\n");
- OUT("\tvoid *structure, asn_per_outp_t *per_out) {\n");
- OUT("%s_%d_inherit_TYPE_descriptor(td);\n",
- p, expr->_type_unique_index);
- OUT("return td->uper_encoder(td, constraints, structure, per_out);\n");
- );
- OUT("}\n");
- OUT("\n");
- }
-#endif
REDIR(OT_FUNC_DECLS);
p = MKID(expr);
@@ -1616,7 +1402,7 @@
(expr->expr_type == ASN_BASIC_INTEGER)) {
if(expr->_type_referenced) {
OUT("extern const asn_INTEGER_specifics_t "
- "asn_SPC_%s_specs_%d;\n", p, expr->_type_unique_index);
+ "asn_SPC_%s_specs_%d;\n", c_name(arg).base_name, expr->_type_unique_index);
}
} else {
asn1p_expr_t *terminal = WITH_MODULE_NAMESPACE(
@@ -2984,45 +2770,50 @@
}
OUT(",\n");
- if(C99_MODE) OUT(".memb_constraints = ");
+ OUT("{ ");
+ if(C99_MODE) OUT(".oer_constraints = ");
+ if(arg->flags & A1C_GEN_OER) {
+ if(expr->constraints) {
+ OUT("&asn_OER_memb_%s_constr_%d",
+ MKID(expr),
+ expr->_type_unique_index);
+ } else {
+ OUT("0");
+ }
+ } else {
+ OUT("0");
+ }
+ OUT(", ");
+ if(C99_MODE) OUT(".per_constraints = ");
+ if(arg->flags & A1C_GEN_PER) {
+ if(expr->constraints) {
+ OUT("&asn_PER_memb_%s_constr_%d",
+ MKID(expr),
+ expr->_type_unique_index);
+ } else {
+ OUT("0");
+ }
+ } else {
+ OUT("0");
+ }
+ OUT(", ");
+ if(C99_MODE) OUT(".general_constraints = ");
if(expr->constraints) {
if(arg->flags & A1C_NO_CONSTRAINTS) {
- OUT("0,\t/* No check because of -fno-constraints */\n");
+ OUT("0");
} else {
const char *id = MKID(expr);
if(expr->_anonymous_type
&& !strcmp(expr->Identifier, "Member"))
id = asn1c_type_name(arg, expr, TNF_SAFE);
- OUT("memb_%s_constraint_%d,\n", id,
+ OUT(" memb_%s_constraint_%d", id,
arg->expr->_type_unique_index);
}
} else {
- OUT("0,\t/* Defer constraints checking to the member type */\n");
+ OUT("0");
}
- if(C99_MODE) OUT(".oer_constraints = ");
- if(arg->flags & A1C_GEN_OER) {
- if(expr->constraints) {
- OUT("&asn_OER_memb_%s_constr_%d,\n",
- MKID(expr),
- expr->_type_unique_index);
- } else {
- OUT("0,\t/* No OER visible constraints */\n");
- }
- } else {
- OUT("0,\t/* OER is not compiled, use -gen-OER */\n");
- }
- if(C99_MODE) OUT(".per_constraints = ");
- if(arg->flags & A1C_GEN_PER) {
- if(expr->constraints) {
- OUT("&asn_PER_memb_%s_constr_%d,\n",
- MKID(expr),
- expr->_type_unique_index);
- } else {
- OUT("0,\t/* No PER visible constraints */\n");
- }
- } else {
- OUT("0,\t/* PER is not compiled, use -gen-PER */\n");
- }
+ OUT(" },\n");
+
if(C99_MODE) OUT(".default_value = ");
if(try_inline_default(arg, expr, 0)) {
} else {
@@ -3055,7 +2846,7 @@
tmp_arg.expr = expr;
DEBUG("member constraint checking code for %s", p);
if(asn1c_emit_constraint_checking_code(&tmp_arg) == 1) {
- OUT("return td->check_constraints"
+ OUT("return td->encoding_constraints.general_constraints"
"(td, sptr, ctfailcb, app_key);\n");
}
INDENT(-1);
@@ -3080,7 +2871,8 @@
emit_type_DEF(arg_t *arg, asn1p_expr_t *expr, enum tvm_compat tv_mode, int tags_count, int all_tags_count, int elements_count, enum etd_spec spec) {
asn1p_expr_t *terminal;
int using_type_name = 0;
- const char *p = MKID(expr);
+ char *expr_id = strdup(MKID(expr));
+ char *p = expr_id;
char *p2 = (char *)0;
terminal = asn1f_find_terminal_type_ex(arg->asn, arg->ns, expr);
@@ -3100,7 +2892,7 @@
INDENT(+1);
if(expr->_anonymous_type) {
- p = ASN_EXPR_TYPE2STR(expr->expr_type);
+ p = strdup(ASN_EXPR_TYPE2STR(expr->expr_type));
OUT("\"%s\",\n", p?p:"");
OUT("\"%s\",\n",
p ? asn1c_make_identifier(AMI_CHECK_RESERVED,
@@ -3112,51 +2904,27 @@
if(expr->expr_type & ASN_CONSTR_MASK) {
using_type_name = 1;
- p = asn1c_type_name(arg, arg->expr, TNF_SAFE);
+ p = strdup(asn1c_type_name(arg, arg->expr, TNF_SAFE));
} else {
if (expr->expr_type == A1TC_REFERENCE) {
p2 = strdup(asn1c_type_name(arg, terminal, TNF_SAFE));
} else {
p2 = strdup(asn1c_type_name(arg, expr, TNF_SAFE));
}
- p = MKID(expr);
+ p = strdup(expr_id);
}
if (!p2)
p2 = strdup(p);
-#define FUNCREF(foo) do { \
- OUT("%s", p); \
- if(HIDE_INNER_DEFS && !using_type_name) \
- OUT("_%d", expr->_type_unique_index); \
- OUT("_" #foo ",\n"); \
-} while(0)
+ OUT("&asn_OP_%s,\n", p2);
-#define FUNCREF2(foo) \
-do { \
- OUT("%s", p2); \
- OUT("_" #foo ",\n"); \
-} while(0)
-
- OUT("&asn_OP_%s,\n", p2);
- if (arg->flags & A1C_NO_CONSTRAINTS)
- OUT("0,\t/* No check because of -fno-constraints */\n");
- else
- {
- if (!expr->combined_constraints)
- FUNCREF2(constraint);
- else
- FUNCREF(constraint);
- }
- if (p2) free(p2);
-
- p = MKID(expr);
if(tags_count) {
OUT("asn_DEF_%s_tags_%d,\n",
- p, expr->_type_unique_index);
+ expr_id, expr->_type_unique_index);
OUT("sizeof(asn_DEF_%s_tags_%d)\n",
- p, expr->_type_unique_index);
+ expr_id, expr->_type_unique_index);
OUT("\t/sizeof(asn_DEF_%s_tags_%d[0])",
- p, expr->_type_unique_index);
+ expr_id, expr->_type_unique_index);
if(tv_mode == _TVM_SUBSET
&& tags_count != all_tags_count)
OUT(" - %d", all_tags_count - tags_count);
@@ -3168,48 +2936,81 @@
if(all_tags_count && tv_mode == _TVM_DIFFERENT) {
OUT("asn_DEF_%s_all_tags_%d,\n",
- p, expr->_type_unique_index);
+ expr_id, expr->_type_unique_index);
OUT("sizeof(asn_DEF_%s_all_tags_%d)\n",
- p, expr->_type_unique_index);
+ expr_id, expr->_type_unique_index);
OUT("\t/sizeof(asn_DEF_%s_all_tags_%d[0]), /* %d */\n",
- p, expr->_type_unique_index, all_tags_count);
+ expr_id, expr->_type_unique_index, all_tags_count);
} else if(all_tags_count) {
OUT("asn_DEF_%s_tags_%d,\t/* Same as above */\n",
- p, expr->_type_unique_index);
+ expr_id, expr->_type_unique_index);
OUT("sizeof(asn_DEF_%s_tags_%d)\n",
- p, expr->_type_unique_index);
+ expr_id, expr->_type_unique_index);
OUT("\t/sizeof(asn_DEF_%s_tags_%d[0]), /* %d */\n",
- p, expr->_type_unique_index, all_tags_count);
+ expr_id, expr->_type_unique_index, all_tags_count);
} else {
OUT("0,\t/* No tags (pointer) */\n");
OUT("0,\t/* No tags (count) */\n");
}
+ OUT("{ ");
if(arg->flags & A1C_GEN_OER) {
if(expr->combined_constraints
|| expr->expr_type == ASN_BASIC_ENUMERATED
|| expr->expr_type == ASN_CONSTR_CHOICE) {
- OUT("&asn_OER_type_%s_constr_%d,\n",
- p, expr->_type_unique_index);
+ OUT("&asn_OER_type_%s_constr_%d",
+ expr_id, expr->_type_unique_index);
} else {
- OUT("0,\t/* No OER visible constraints */\n");
+ OUT("0");
}
} else {
- OUT("0,\t/* No OER visible constraints */\n");
+ OUT("0");
}
+ OUT(", ");
if(arg->flags & A1C_GEN_PER) {
if(expr->combined_constraints
|| expr->expr_type == ASN_BASIC_ENUMERATED
|| expr->expr_type == ASN_CONSTR_CHOICE) {
- OUT("&asn_PER_type_%s_constr_%d,\n",
- p, expr->_type_unique_index);
+ OUT("&asn_PER_type_%s_constr_%d",
+ expr_id, expr->_type_unique_index);
} else {
- OUT("0,\t/* No PER visible constraints */\n");
+ OUT("0");
}
} else {
- OUT("0,\t/* No PER visible constraints */\n");
+ OUT("0");
}
+ OUT(", ");
+#define FUNCREF(foo) \
+ do { \
+ OUT("%s", p); \
+ if(HIDE_INNER_DEFS && !using_type_name) \
+ OUT("_%d", expr->_type_unique_index); \
+ OUT("_" #foo ""); \
+ } while(0)
+
+#define FUNCREF2(foo) \
+ do { \
+ OUT("%s", p2); \
+ OUT("_" #foo); \
+ } while(0)
+
+ if (arg->flags & A1C_NO_CONSTRAINTS) {
+ OUT("0");
+ } else {
+ if (!expr->combined_constraints)
+ FUNCREF2(constraint);
+ else
+ FUNCREF(constraint);
+ }
+ OUT(" },\n");
+
+ free(p);
+ p = NULL;
+ free(p2);
+ p2 = NULL;
+ free(expr_id);
+ expr_id = NULL;
if(elements_count ||
((expr->expr_type == A1TC_REFERENCE) &&
@@ -3229,9 +3030,10 @@
expr_elements_count(arg, terminal));
}
} else {
- OUT("asn_MBR_%s_%d,\n", p, expr->_type_unique_index);
+ OUT("asn_MBR_%s_%d,\n", c_name(arg).part_name,
+ expr->_type_unique_index);
- if(expr->expr_type == ASN_CONSTR_SEQUENCE_OF
+ if(expr->expr_type == ASN_CONSTR_SEQUENCE_OF
|| expr->expr_type == ASN_CONSTR_SET_OF) {
OUT("%d,\t/* Single element */\n",
elements_count);
@@ -3255,27 +3057,31 @@
(terminal->expr_type == ASN_BASIC_ENUMERATED) ||
((terminal->expr_type == ASN_BASIC_INTEGER) &&
(asn1c_type_fits_long(arg, terminal) == FL_FITS_UNSIGN)))) {
- OUT("&asn_SPC_%s_specs_%d\t/* Additional specs */\n", MKID(terminal), terminal->_type_unique_index);
- } else if ((expr->expr_type == ASN_TYPE_ANY) ||
+ OUT("&asn_SPC_%s_specs_%d\t/* Additional specs */\n",
+ c_expr_name(arg, terminal).part_name,
+ terminal->_type_unique_index);
+ } else if ((expr->expr_type == ASN_TYPE_ANY) ||
(expr->expr_type == ASN_BASIC_BIT_STRING) ||
(expr->expr_type == ASN_STRING_BMPString) ||
(expr->expr_type == ASN_BASIC_OCTET_STRING) ||
(expr->expr_type == ASN_STRING_UniversalString)) {
- OUT("&asn_SPC_%s_specs\t/* Additional specs */\n", asn1c_type_name(arg, expr, TNF_SAFE));
- } else if ((expr->expr_type == A1TC_REFERENCE) &&
+ OUT("&asn_SPC_%s_specs\t/* Additional specs */\n",
+ c_name(arg).type.part_name);
+ } else if ((expr->expr_type == A1TC_REFERENCE) &&
((terminal->expr_type == ASN_TYPE_ANY) ||
(terminal->expr_type == ASN_BASIC_BIT_STRING) ||
(terminal->expr_type == ASN_STRING_BMPString) ||
(terminal->expr_type == ASN_BASIC_OCTET_STRING) ||
(terminal->expr_type == ASN_STRING_UniversalString))) {
- OUT("&asn_SPC_%s_specs\t/* Additional specs */\n", asn1c_type_name(arg, terminal, TNF_SAFE));
- } else {
+ OUT("&asn_SPC_%s_specs\t/* Additional specs */\n",
+ c_expr_name(arg, terminal).type.part_name);
+ } else {
OUT("0\t/* No specifics */\n");
}
break;
case ETD_HAS_SPECIFICS:
OUT("&asn_SPC_%s_specs_%d\t/* Additional specs */\n",
- p, expr->_type_unique_index);
+ c_name(arg).part_name, expr->_type_unique_index);
}
INDENT(-1);
OUT("};\n");