diff --git a/JNI/jninativelib.cc b/JNI/jninativelib.cc index 6d552e413f83d1dc0ced78a3cdc20cb345794748..b68d272aaf3dab9b4b5e05a2c29b3f9d28e0e6a9 100644 --- a/JNI/jninativelib.cc +++ b/JNI/jninativelib.cc @@ -280,7 +280,7 @@ JNIEXPORT void JNICALL Java_org_eclipse_titan_executor_jni_JNIMiddleWare_execute * * NOTE: Function comment is here, because function declaration is in org_eclipse_titan_executor_jni_JNIMiddleWare.h, which is generated. */ -JNIEXPORT jint JNICALL Java_org_eclipse_titan_executor_jni_JNIMiddleWare_get_1execute_1cfg_1len(JNIEnv *env, jobject) +JNIEXPORT jint JNICALL Java_org_eclipse_titan_executor_jni_JNIMiddleWare_get_1execute_1cfg_1len(JNIEnv *, jobject) { return (jint)Jnimw::mycfg.execute_list_len; } @@ -295,7 +295,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_titan_executor_jni_JNIMiddleWare_get_1ex * * NOTE: Function comment is here, because function declaration is in org_eclipse_titan_executor_jni_JNIMiddleWare.h, which is generated. */ -JNIEXPORT void JNICALL Java_org_eclipse_titan_executor_jni_JNIMiddleWare_execute_1cfg(JNIEnv *env, jobject, jint index) +JNIEXPORT void JNICALL Java_org_eclipse_titan_executor_jni_JNIMiddleWare_execute_1cfg(JNIEnv *, jobject, jint index) { if (!Jnimw::userInterface) return; diff --git a/compiler2/CodeGenHelper.cc b/compiler2/CodeGenHelper.cc index a71fa94f9370aed5fbdc420ef1c31eacb0ff9f94..6ba921798fec5063aeba310b0b6049458d2e9c57 100644 --- a/compiler2/CodeGenHelper.cc +++ b/compiler2/CodeGenHelper.cc @@ -488,7 +488,7 @@ void CodeGenHelper::write_output() { // If we need to split if (num_of_chars >= chunk_size) { size_t base_pos = 0; - for (unsigned int i = 0; i < slice_num; i++) { + for (i = 0; i < slice_num; i++) { if (i == 0) { // The first slice has the module's name fname = output->module_dispname; } else { diff --git a/compiler2/PredefFunc.cc b/compiler2/PredefFunc.cc index d756b57a542f5a129253ddd15990096556ea855e..de4ca2c7019bccafbcb52937a13db9bd20e37078 100644 --- a/compiler2/PredefFunc.cc +++ b/compiler2/PredefFunc.cc @@ -971,7 +971,7 @@ static void fill_continuing_octets(int n_continuing, unsigned char *continuing_p } } -ustring decode_utf8(const string & ostr, CharCoding::CharCodingType expected_coding) +ustring decode_utf8(const string & ostr, CharCoding::CharCodingType /*expected_coding*/) { size_t length = ostr.size(); if (0 == length) return ustring(); diff --git a/compiler2/ProjectGenHelper.cc b/compiler2/ProjectGenHelper.cc index f149ac324e402947cb7dc061b0f3d05dd8583acb..00f86067c07b10bfb8e80e1fd448145e1f20a84f 100644 --- a/compiler2/ProjectGenHelper.cc +++ b/compiler2/ProjectGenHelper.cc @@ -244,14 +244,14 @@ std::string ProjectDescriptor::setRelativePathTo(const std::string& absPathTo) } size_t slashCount = 0; - for (size_t i = lastSlash; i < projectAbsWorkingDir.size(); ++i) { + for (i = lastSlash; i < projectAbsWorkingDir.size(); ++i) { if (projectAbsWorkingDir.at(i) == SEPARATOR) ++slashCount; } std::string relPath; const std::string upDir("../"); - for (size_t i = 0; i < slashCount; ++i) + for (i = 0; i < slashCount; ++i) relPath.append(upDir); std::string pathTo = absPathTo.substr(lastSlash+1); // we left the heading slash diff --git a/compiler2/Type_codegen.cc b/compiler2/Type_codegen.cc index 9dad289341272f9e1bb9168f9cb9db129c1e386d..f429aea0d8873eb19cfa80d3f044c41b81221379 100644 --- a/compiler2/Type_codegen.cc +++ b/compiler2/Type_codegen.cc @@ -1204,6 +1204,7 @@ void Type::generate_code_Choice(output_struct *target) if (cftype->xerattrib != NULL) { sdef.elements[i].xsd_type = cftype->xerattrib->xsd_type; + sdef.elements[i].xerUseUnion = cftype->xerattrib->useUnion_; } } if (sdef.jsonAsValue) { diff --git a/compiler2/Value.cc b/compiler2/Value.cc index b5e219a90fd67734210bdb8059293045b3fec5e4..c3893594d9ae4b96df3b64f2ce0c277c0c7a27d7 100644 --- a/compiler2/Value.cc +++ b/compiler2/Value.cc @@ -8959,6 +8959,7 @@ error: default: FATAL_ERROR("Value::is_unfoldable()"); } // switch + FATAL_ERROR("Value::is_unfoldable()"); break; // should never get here case V_MACRO: switch (u.macro) { @@ -11892,7 +11893,7 @@ error: Ttcn::ActualParList *parlist = u.expr.r1->get_parlist(); Common::Assignment *ass = u.expr.r1->get_refd_assignment(); if (parlist) str = parlist->rearrange_init_code(str, usage_mod); - + (void)ass; // eliminate assigned but not used warning parlist = u.expr.r2->get_parlist(); ass = u.expr.r2->get_refd_assignment(); if (parlist) str = parlist->rearrange_init_code(str, usage_mod); diff --git a/compiler2/asn1/AST_asn1.cc b/compiler2/asn1/AST_asn1.cc index ee5920fbc2af2d650219e48c3325de4640a0007b..d47f79c7ac9e8ae1f04fa8cca00b94591f62de6b 100644 --- a/compiler2/asn1/AST_asn1.cc +++ b/compiler2/asn1/AST_asn1.cc @@ -557,7 +557,7 @@ namespace Asn { json.put_next_token(JSON_TOKEN_OBJECT_END); } - void Module::generate_debugger_init(output_struct *output) + void Module::generate_debugger_init(output_struct */*output*/) { // no debugging in ASN.1 modules } diff --git a/compiler2/datatypes.h b/compiler2/datatypes.h index 91d719d98f05b710066592840aa2aea1b67744c2..a9cd8474ae6078021534d8faef93ddc6db6a192f 100644 --- a/compiler2/datatypes.h +++ b/compiler2/datatypes.h @@ -90,6 +90,7 @@ typedef struct { /** true if the field is a record-of or set-of with optimized memory allocation */ boolean optimizedMemAlloc; XSD_types xsd_type; + boolean xerUseUnion; } struct_field; /** Structure (record, set, union, anytype) descriptor for code generation */ diff --git a/compiler2/encdec.c b/compiler2/encdec.c index a666643cb4ab4cf7805a88894b580c951d6b9c29..a022fd649ffc3eede5f98417894e910d9598b14f 100644 --- a/compiler2/encdec.c +++ b/compiler2/encdec.c @@ -64,19 +64,19 @@ void def_encdec(const char *p_classname, #ifndef NDEBUG "// written by %s in " __FILE__ " at %d\n" #endif - "int XER_encode(const XERdescriptor_t&, TTCN_Buffer&, unsigned int, int, " - "embed_values_enc_struct_t*) const;\n" + "int XER_encode(const XERdescriptor_t&, TTCN_Buffer&, unsigned int," + "unsigned int, int, embed_values_enc_struct_t*) const;\n" "int XER_decode(const XERdescriptor_t&, XmlReaderWrap&, unsigned int, " "unsigned int, embed_values_dec_struct_t*);\n" "static boolean can_start(const char *name, const char *uri, " - "XERdescriptor_t const& xd, unsigned int);\n" + "XERdescriptor_t const& xd, unsigned int, unsigned int);\n" "%s" #ifndef NDEBUG , __FUNCTION__, __LINE__ #endif , use_runtime_2 ? "boolean can_start_v(const char *name, const char *uri, " - "XERdescriptor_t const& xd, unsigned int);\n" : "" + "XERdescriptor_t const& xd, unsigned int, unsigned int);\n" : "" ); if(json) { def = mputprintf(def, @@ -130,7 +130,7 @@ void def_encdec(const char *p_classname, /* Do not use %s_xer_ here. It supplies the XER descriptor of oldtype * even if encoding newtype for: * <ttcn>type newtype oldtype;</ttcn> */ - " XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0);\n" + " XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);\n" " p_buf.put_c('\\n');\n" /* make sure it has a newline */ " break;}\n" " case TTCN_EncDec::CT_JSON: {\n" diff --git a/compiler2/enum.c b/compiler2/enum.c index ae3ed0fe8eae6e1334164d07cfa9421ff8593134..9d46846cbb5ee28ac6f78302ff90ba91d8c408c0 100644 --- a/compiler2/enum.c +++ b/compiler2/enum.c @@ -655,7 +655,7 @@ void defEnumClass(const enum_def *edef, output_struct *output) */ src = mputprintf(src, "boolean %s::can_start(const char *name, const char *uri, " - "const XERdescriptor_t& xd, unsigned int flavor) {\n" + "const XERdescriptor_t& xd, unsigned int flavor, unsigned int) {\n" " boolean exer = is_exer(flavor);\n" " return check_name(name, xd, exer) && (!exer || check_namespace(uri, xd));\n" "}\n\n" @@ -664,7 +664,7 @@ void defEnumClass(const enum_def *edef, output_struct *output) src = mputprintf(src, "int %s::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf," - " unsigned int p_flavor, int p_indent, embed_values_enc_struct_t*) const\n" + " unsigned int p_flavor, unsigned int, int p_indent, embed_values_enc_struct_t*) const\n" "{\n" " int encoded_length=(int)p_buf.get_len();\n" " const boolean e_xer = is_exer(p_flavor);\n" @@ -814,7 +814,7 @@ void defEnumClass(const enum_def *edef, output_struct *output) " boolean use_default = p_td.json->default_value && 0 == p_tok.get_buffer_length();\n" " if (use_default) {\n" // No JSON data in the buffer -> use default value - " value = (char*)p_td.json->default_value;\n" + " value = const_cast<char*>(p_td.json->default_value);\n" " value_len = strlen(value);\n" " } else {\n" " dec_len = p_tok.get_next_token(&token, &value, &value_len);\n" diff --git a/compiler2/makefile.c b/compiler2/makefile.c index 3b2c510d244db33676c7122c765cae39c7be5258..96ce8708eabc941863753f0a89218c50f8597e4a 100644 --- a/compiler2/makefile.c +++ b/compiler2/makefile.c @@ -2932,9 +2932,9 @@ static void print_makefile(struct makefile_struct *makefile) print_generated_file_name(fp, module, FALSE, "_setof.so"); print_generated_file_name(fp, module, FALSE, "_union.so"); } else if((n_slices = atoi(makefile->code_splitting_mode + 2))) { - for (int i = 1; i < n_slices; i++) { + for (int slice = 1; slice < n_slices; slice++) { char buffer[16]; // 6 digits + 4 chars + _part - sprintf(buffer, "_part_%i.so", i); + sprintf(buffer, "_part_%i.so", slice); print_generated_file_name(fp, module, FALSE, buffer); } } @@ -2955,9 +2955,9 @@ static void print_makefile(struct makefile_struct *makefile) print_generated_file_name(fp, module, FALSE, "_setof.so"); print_generated_file_name(fp, module, FALSE, "_union.so"); } else if((n_slices = atoi(makefile->code_splitting_mode + 2))) { - for (int i = 1; i < n_slices; i++) { + for (int slice = 1; slice < n_slices; slice++) { char buffer[16]; // 6 digits + 4 chars + _part - sprintf(buffer, "_part_%i.so", i); + sprintf(buffer, "_part_%i.so", slice); print_generated_file_name(fp, module, FALSE, buffer); } } @@ -2978,9 +2978,9 @@ static void print_makefile(struct makefile_struct *makefile) print_generated_file_name(fp, module, FALSE, "_setof.so"); print_generated_file_name(fp, module, FALSE, "_union.so"); } else if((n_slices = atoi(makefile->code_splitting_mode + 2))) { - for (int i = 1; i < n_slices; i++) { + for (int slice = 1; slice < n_slices; slice++) { char buffer[16]; // 6 digits + 4 chars + _part - sprintf(buffer, "_part_%i.so", i); + sprintf(buffer, "_part_%i.so", slice); print_generated_file_name(fp, module, FALSE, buffer); } } @@ -3000,9 +3000,9 @@ static void print_makefile(struct makefile_struct *makefile) print_generated_file_name(fp, module, FALSE, "_setof.so"); print_generated_file_name(fp, module, FALSE, "_union.so"); } else if((n_slices = atoi(makefile->code_splitting_mode + 2))) { - for (int i = 1; i < n_slices; i++) { + for (int slice = 1; slice < n_slices; slice++) { char buffer[16]; // 6 digits + 4 chars + _part - sprintf(buffer, "_part_%i.so", i); + sprintf(buffer, "_part_%i.so", slice); print_generated_file_name(fp, module, FALSE, buffer); } } @@ -3042,9 +3042,9 @@ static void print_makefile(struct makefile_struct *makefile) print_generated_file_name(fp, module, FALSE, "_setof.o"); print_generated_file_name(fp, module, FALSE, "_union.o"); } else if((n_slices = atoi(makefile->code_splitting_mode + 2))) { - for (int i = 1; i < n_slices; i++) { + for (int slice = 1; slice < n_slices; slice++) { char buffer[16]; // 6 digits + 4 chars + _part - sprintf(buffer, "_part_%i.o", i); + sprintf(buffer, "_part_%i.o", slice); print_generated_file_name(fp, module, FALSE, buffer); } } @@ -3065,9 +3065,9 @@ static void print_makefile(struct makefile_struct *makefile) print_generated_file_name(fp, module, FALSE, "_setof.o"); print_generated_file_name(fp, module, FALSE, "_union.o"); } else if((n_slices = atoi(makefile->code_splitting_mode + 2))) { - for (int i = 1; i < n_slices; i++) { + for (int slice = 1; slice < n_slices; slice++) { char buffer[16]; // 6 digits + 4 chars + _part - sprintf(buffer, "_part_%i.o", i); + sprintf(buffer, "_part_%i.o", slice); print_generated_file_name(fp, module, FALSE, buffer); } } @@ -3088,9 +3088,9 @@ static void print_makefile(struct makefile_struct *makefile) print_generated_file_name(fp, module, FALSE, "_setof.o"); print_generated_file_name(fp, module, FALSE, "_union.o"); } else if((n_slices = atoi(makefile->code_splitting_mode + 2))) { - for (int i = 1; i < n_slices; i++) { + for (int slice = 1; slice < n_slices; slice++) { char buffer[16]; // 6 digits + 4 chars + _part - sprintf(buffer, "_part_%i.o", i); + sprintf(buffer, "_part_%i.o", slice); print_generated_file_name(fp, module, FALSE, buffer); } } @@ -3111,9 +3111,9 @@ static void print_makefile(struct makefile_struct *makefile) print_generated_file_name(fp, module, FALSE, "_setof.o"); print_generated_file_name(fp, module, FALSE, "_union.o"); } else if((n_slices = atoi(makefile->code_splitting_mode + 2))) { - for (int i = 1; i < n_slices; i++) { + for (int slice = 1; slice < n_slices; slice++) { char buffer[16]; // 6 digits + 4 chars + _part - sprintf(buffer, "_part_%i.o", i); + sprintf(buffer, "_part_%i.o", slice); print_generated_file_name(fp, module, FALSE, buffer); } } diff --git a/compiler2/record.c b/compiler2/record.c index 689582b4d3242be6e683d67712e066933de5ffc9..d60f2b9130eacafa60dd182054d5197aa7121e31 100644 --- a/compiler2/record.c +++ b/compiler2/record.c @@ -1843,10 +1843,10 @@ void gen_xer(const struct_def *sdef, char **pdef, char **psrc) /* Write some helper functions */ def = mputstr(def, - "char **collect_ns(const XERdescriptor_t& p_td, size_t& num_ns, bool& def_ns) const;\n"); + "char **collect_ns(const XERdescriptor_t& p_td, size_t& num_ns, bool& def_ns, unsigned int flavor = 0) const;\n"); src = mputprintf(src, - "char ** %s::collect_ns(const XERdescriptor_t& p_td, size_t& num_ns, bool& def_ns) const {\n" + "char ** %s::collect_ns(const XERdescriptor_t& p_td, size_t& num_ns, bool& def_ns, unsigned int) const {\n" " size_t num_collected;\n" " char **collected_ns = Base_Type::collect_ns(p_td, num_collected, def_ns);\n" /* The above might throw but then nothing was allocated. */ @@ -1894,14 +1894,14 @@ void gen_xer(const struct_def *sdef, char **pdef, char **psrc) ); src = mputprintf(src, - "boolean %s::can_start(const char *name, const char *uri, const XERdescriptor_t& xd, unsigned int flavor) {\n" + "boolean %s::can_start(const char *name, const char *uri, const XERdescriptor_t& xd, unsigned int flavor, unsigned int flavor2) {\n" " boolean e_xer = is_exer(flavor &= ~XER_RECOF);\n" " if (!e_xer || !((xd.xer_bits & UNTAGGED) || (flavor & (USE_NIL|XER_RECOF)))) return check_name(name, xd, e_xer) && (!e_xer || check_namespace(uri, xd));\n" , name ); for (i = start_at; i < sdef->nElements; ++i) { src = mputprintf(src, - " else if (%s::can_start(name, uri, %s_xer_, flavor)) return TRUE;\n" + " else if (%s::can_start(name, uri, %s_xer_, flavor, flavor2)) return TRUE;\n" /* Here we know for sure it's exer */ , sdef->elements[i].type , sdef->elements[i].typegen @@ -1915,7 +1915,7 @@ void gen_xer(const struct_def *sdef, char **pdef, char **psrc) /* * * * * * * * * * XER_encode * * * * * * * * * * * * * * */ src = mputprintf(src, "int %s::XER_encode(const XERdescriptor_t& p_td, " - "TTCN_Buffer& p_buf, unsigned int p_flavor, int p_indent, embed_values_enc_struct_t* emb_val_parent) const\n" + "TTCN_Buffer& p_buf, unsigned int p_flavor, unsigned int p_flavor2, int p_indent, embed_values_enc_struct_t* emb_val_parent) const\n" "{\n" " if (!is_bound()) TTCN_EncDec_ErrorContext::error" "(TTCN_EncDec::ET_UNBOUND, \"Encoding an unbound value.\");\n" @@ -2007,7 +2007,7 @@ void gen_xer(const struct_def *sdef, char **pdef, char **psrc) " if (e_xer && (p_td.xer_bits & USE_QNAME)) {\n" " if (field_%s.is_value()) {\n" " p_buf.put_s(11, (cbyte*)\" xmlns:b0='\");\n" - " field_%s.XER_encode(%s_xer_, p_buf, p_flavor | XER_LIST, p_indent+1, 0);\n" + " field_%s.XER_encode(%s_xer_, p_buf, p_flavor | XER_LIST, p_flavor2, p_indent+1, 0);\n" " p_buf.put_c('\\'');\n" " }\n" " if (p_td.xer_bits & XER_ATTRIBUTE) begin_attribute(p_td, p_buf);\n" @@ -2016,7 +2016,7 @@ void gen_xer(const struct_def *sdef, char **pdef, char **psrc) " p_buf.put_s(3, (cbyte*)\"b0:\");\n" " sub_len += 3;\n" " }\n" - " sub_len += field_%s.XER_encode(%s_xer_, p_buf, p_flavor | XER_LIST, p_indent+1, 0);\n" + " sub_len += field_%s.XER_encode(%s_xer_, p_buf, p_flavor | XER_LIST, p_flavor2, p_indent+1, 0);\n" " if (p_td.xer_bits & XER_ATTRIBUTE) p_buf.put_c('\\'');\n" " } else" /* no newline */ , sdef->elements[0].name @@ -2032,7 +2032,7 @@ void gen_xer(const struct_def *sdef, char **pdef, char **psrc) src = mputprintf(src, " if (!e_xer && (p_td.xer_bits & EMBED_VALUES)) {\n" " ec_1.set_msg(\"%s': \");\n" - " sub_len += field_%s.XER_encode(%s_xer_, p_buf, p_flavor, p_indent+1, 0);\n" + " sub_len += field_%s.XER_encode(%s_xer_, p_buf, p_flavor, p_flavor2, p_indent+1, 0);\n" " }\n" , sdef->elements[0].dispname , sdef->elements[0].name, sdef->elements[0].typegen @@ -2042,7 +2042,7 @@ void gen_xer(const struct_def *sdef, char **pdef, char **psrc) if (sdef->xerUseOrderPossible) { src = mputprintf(src, " if (!e_xer && (p_td.xer_bits & USE_ORDER)) {\n" - " sub_len += field_%s.XER_encode(%s_xer_, p_buf, p_flavor, p_indent+1, 0);\n" + " sub_len += field_%s.XER_encode(%s_xer_, p_buf, p_flavor, p_flavor2, p_indent+1, 0);\n" " }\n" , sdef->elements[uo].name, sdef->elements[uo].typegen ); @@ -2078,7 +2078,7 @@ void gen_xer(const struct_def *sdef, char **pdef, char **psrc) if (i==0 && sdef->xerEmbedValuesPossible && (sdef->elements[i].xerAnyKind & ANY_ATTRIB_BIT)) continue ; src = mputprintf(src, " ec_1.set_msg(\"%s': \");\n" - " tmp_len = field_%s.XER_encode(%s_xer_, p_buf, p_flavor, p_indent+1, 0);\n" + " tmp_len = field_%s.XER_encode(%s_xer_, p_buf, p_flavor, p_flavor2, p_indent+1, 0);\n" " %ssub_len += tmp_len;\n" /* do not add if attribute and EXER */ , sdef->elements[i].dispname , sdef->elements[i].name, sdef->elements[i].typegen @@ -2114,7 +2114,7 @@ void gen_xer(const struct_def *sdef, char **pdef, char **psrc) " if (e_xer && (p_td.xer_bits & EMBED_VALUES)) {\n" /* write the first string (must come AFTER the attributes) */ " if (%s%s%s field_%s%s.size_of() > 0) {\n" - " sub_len += field_%s%s[0].XER_encode(UNIVERSAL_CHARSTRING_xer_, p_buf, p_flavor | EMBED_VALUES, p_indent+1, 0);\n" + " sub_len += field_%s%s[0].XER_encode(UNIVERSAL_CHARSTRING_xer_, p_buf, p_flavor | EMBED_VALUES, p_flavor2, p_indent+1, 0);\n" " }\n" " }\n" , sdef->elements[0].dispname @@ -2127,7 +2127,7 @@ void gen_xer(const struct_def *sdef, char **pdef, char **psrc) if (want_namespaces) { /* here's another chance */ src = mputprintf(src, " else if ( !(p_td.xer_bits & EMBED_VALUES)) {\n" - " %sfield_%s.XER_encode(%s_xer_, p_buf, p_flavor, p_indent+1, 0);\n" + " %sfield_%s.XER_encode(%s_xer_, p_buf, p_flavor, p_flavor2, p_indent+1, 0);\n" " }\n" , ((sdef->elements[0].xerAnyKind & ANY_ATTRIB_BIT) ? "" : "sub_len += " ) , sdef->elements[0].name, sdef->elements[0].typegen @@ -2183,7 +2183,7 @@ void gen_xer(const struct_def *sdef, char **pdef, char **psrc) src = mputprintf(src, " if (!nil_attribute) {\n" "%s" - " if (!e_xer) sub_len += field_%s.XER_encode(%s_xer_, p_buf, p_flavor, p_indent+!omit_tag, 0);\n" + " if (!e_xer) sub_len += field_%s.XER_encode(%s_xer_, p_buf, p_flavor, p_flavor2, p_indent+!omit_tag, 0);\n" " else" /* no newline */ , (sdef->xerUseNilPossible ? " if (!(p_td.xer_bits & USE_ORDER)) p_flavor |= (p_td.xer_bits & USE_NIL);\n" : "") /* If USE-ORDER is on, the tag-removing effect of USE-NIL has been @@ -2238,7 +2238,7 @@ void gen_xer(const struct_def *sdef, char **pdef, char **psrc) src = mputprintf(src, " case %lu:\n" " ec_1.set_msg(\"%s': \");\n" - " sub_len += field_%s%s%s%s.XER_encode(%s_xer_, p_buf, p_flavor, p_indent+!omit_tag, %s);\n" + " sub_len += field_%s%s%s%s.XER_encode(%s_xer_, p_buf, p_flavor, p_flavor2, p_indent+!omit_tag, %s);\n" , (unsigned long)offset++ , sdef->elements[i].dispname @@ -2263,7 +2263,7 @@ void gen_xer(const struct_def *sdef, char **pdef, char **psrc) " if (e_xer && (p_td.xer_bits & EMBED_VALUES) && 0 != emb_val &&\n" " %s%s%s emb_val->embval_index < field_%s%s.size_of()) { // embed-val\n" " field_%s%s[emb_val->embval_index].XER_encode(\n" - " UNIVERSAL_CHARSTRING_xer_, p_buf, p_flavor | EMBED_VALUES, p_indent+1, 0);\n" + " UNIVERSAL_CHARSTRING_xer_, p_buf, p_flavor | EMBED_VALUES, p_flavor2, p_indent+1, 0);\n" " ++emb_val->embval_index;\n" " }\n" , sdef->elements[0].isOptional ? "field_" : "" @@ -2295,13 +2295,13 @@ void gen_xer(const struct_def *sdef, char **pdef, char **psrc) " if (0 != emb_val_parent->embval_array_reg) {\n" " if (emb_val_parent->embval_index < emb_val_parent->embval_array_reg->size_of()) {\n" " (*emb_val_parent->embval_array_reg)[emb_val_parent->embval_index].XER_encode(UNIVERSAL_CHARSTRING_xer_" - " , p_buf, p_flavor | EMBED_VALUES, p_indent+1, 0);\n" + " , p_buf, p_flavor | EMBED_VALUES, p_flavor2, p_indent+1, 0);\n" " ++emb_val_parent->embval_index;\n" " }\n" " } else {\n" " if (emb_val_parent->embval_index < emb_val_parent->embval_array_opt->size_of()) {\n" " (*emb_val_parent->embval_array_opt)[emb_val_parent->embval_index].XER_encode(UNIVERSAL_CHARSTRING_xer_" - " , p_buf, p_flavor | EMBED_VALUES, p_indent+1, 0);\n" + " , p_buf, p_flavor | EMBED_VALUES, p_flavor2, p_indent+1, 0);\n" " ++emb_val_parent->embval_index;\n" " }\n" " }\n" @@ -2312,7 +2312,7 @@ void gen_xer(const struct_def *sdef, char **pdef, char **psrc) ); } src = mputprintf(src, - " sub_len += field_%s.XER_encode(%s_xer_, p_buf, p_flavor%s, p_indent+!omit_tag, %s);\n" + " sub_len += field_%s.XER_encode(%s_xer_, p_buf, p_flavor%s, p_flavor2, p_indent+!omit_tag, %s);\n" , sdef->elements[i].name, sdef->elements[i].typegen , sdef->xerUseNilPossible ? "| (p_td.xer_bits & USE_NIL)" : "" , sdef->xerEmbedValuesPossible ? "emb_val" : "0" @@ -2323,7 +2323,7 @@ void gen_xer(const struct_def *sdef, char **pdef, char **psrc) " if (e_xer && (p_td.xer_bits & EMBED_VALUES) && 0 != emb_val &&\n" " %s%s%s %s%s%s emb_val->embval_index < field_%s%s.size_of()) {\n" " field_%s%s[emb_val->embval_index].XER_encode(\n" - " UNIVERSAL_CHARSTRING_xer_, p_buf, p_flavor | EMBED_VALUES, p_indent+1, 0);\n" + " UNIVERSAL_CHARSTRING_xer_, p_buf, p_flavor | EMBED_VALUES, p_flavor2, p_indent+1, 0);\n" " ++emb_val->embval_index;\n" " }\n" , sdef->elements[0].isOptional ? "field_" : "" @@ -2602,7 +2602,7 @@ void gen_xer(const struct_def *sdef, char **pdef, char **psrc) if (sdef->control_ns_prefix && !(num_attributes==1 && aa_index!=-1)) { src = mputprintf(src, - " if (parent_tag && !strcmp(attr_name, \"type\") " + " if (/*parent_tag &&*/ !strcmp(attr_name, \"type\") " "&& !strcmp((const char*)p_reader.Prefix(), \"%s\")) {} else\n" , sdef->control_ns_prefix); /* xsi:type; already processed by parent with USE-UNION or USE-TYPE */ @@ -6016,7 +6016,7 @@ static void defEmptyRecordClass(const struct_def *sdef, if (xer_needed) { /* XERSTUFF codegen for empty record/SEQUENCE */ src=mputprintf(src, "boolean %s::can_start(const char *p_name, const char *p_uri, " - "const XERdescriptor_t& p_td, unsigned int p_flavor) {\n" + "const XERdescriptor_t& p_td, unsigned int p_flavor, unsigned int /*p_flavor2*/) {\n" " boolean e_xer = is_exer(p_flavor);\n" " if (e_xer && (p_td.xer_bits & UNTAGGED)) return FALSE;\n" " else return check_name(p_name, p_td, e_xer) && (!e_xer || check_namespace(p_uri, p_td));\n" @@ -6026,7 +6026,7 @@ static void defEmptyRecordClass(const struct_def *sdef, ); src = mputprintf(src, "int %s::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, " - "unsigned int p_flavor, int p_indent, embed_values_enc_struct_t*) const{\n" + "unsigned int p_flavor, unsigned int, int p_indent, embed_values_enc_struct_t*) const{\n" " int encoded_length=(int)p_buf.get_len();\n" " int is_indented = !is_canonical(p_flavor);\n" " boolean e_xer = is_exer(p_flavor);\n" @@ -6952,9 +6952,9 @@ check_generate_end: "static const XERdescriptor_t* xer_descriptors[];\n" "const XERdescriptor_t* xer_descr(int p_index) const;\n" "virtual boolean can_start_v(const char *name, const char *prefix, " - "XERdescriptor_t const& xd, unsigned int flavor);\n" + "XERdescriptor_t const& xd, unsigned int flavor, unsigned int flavor2);\n" "static boolean can_start (const char *name, const char *prefix, " - "XERdescriptor_t const& xd, unsigned int flavor);\n"); + "XERdescriptor_t const& xd, unsigned int flavor, unsigned int flavor2);\n"); src = mputprintf(src, "const XERdescriptor_t* %s::xer_descriptors[] = ", name); for (i = 0; i < sdef->nElements; i++) { src = mputprintf(src, "%c &%s_xer_", @@ -6968,16 +6968,16 @@ check_generate_end: * We must make a virtual call in Record_Type::XER_decode because * we don't know the actual type (derived from Record_Type) */ "boolean %s::can_start_v(const char *p_name, const char *p_uri, " - "XERdescriptor_t const& p_td, unsigned int p_flavor)\n" - "{ return can_start(p_name, p_uri, p_td, p_flavor); }\n" + "XERdescriptor_t const& p_td, unsigned int p_flavor, unsigned int p_flavor2)\n" + "{ return can_start(p_name, p_uri, p_td, p_flavor, p_flavor2); }\n" "boolean %s::can_start(const char *p_name, const char *p_uri, " - "XERdescriptor_t const& p_td, unsigned int p_flavor) {\n" + "XERdescriptor_t const& p_td, unsigned int p_flavor, unsigned int p_flavor2) {\n" " boolean e_xer = is_exer(p_flavor);\n" " if (!e_xer || (!(p_td.xer_bits & UNTAGGED) && !(p_flavor & USE_NIL))) return check_name(p_name, p_td, e_xer) && (!e_xer || check_namespace(p_uri, p_td));\n" , name , name, name); for (i = 0; i < sdef->nElements; i++) { src = mputprintf(src, - " else if (%s::can_start(p_name, p_uri, %s_xer_, p_flavor)) return TRUE;\n" + " else if (%s::can_start(p_name, p_uri, %s_xer_, p_flavor, p_flavor2)) return TRUE;\n" , sdef->elements[i].type, sdef->elements[i].typegen); } src = mputstr(src, @@ -7001,7 +7001,7 @@ check_generate_end: } else { /* XER not needed */ def = mputstr(def, - "boolean can_start_v(const char *, const char *, XERdescriptor_t const&, unsigned int)\n" + "boolean can_start_v(const char *, const char *, XERdescriptor_t const&, unsigned int, unsigned int)\n" "{ return FALSE; }\n" ); } /* if (xer_needed) */ diff --git a/compiler2/record_of.c b/compiler2/record_of.c index 4d335175c37736e624ecb1c0a10e1b47a77503a3..555a05d6517a23400be1d07cba5f4f9c8ad96555 100644 --- a/compiler2/record_of.c +++ b/compiler2/record_of.c @@ -1046,13 +1046,13 @@ void defRecordOfClass1(const struct_of_def *sdef, output_struct *output) if (xer_needed) { /* XERSTUFF encoder codegen for record-of, RT1 */ def = mputstr(def, - "char **collect_ns(const XERdescriptor_t& p_td, size_t& num, bool& def_ns) const;\n"); + "char **collect_ns(const XERdescriptor_t& p_td, size_t& num, bool& def_ns, unsigned int flavor = 0) const;\n"); /* Write the body of the XER encoder/decoder functions. The declaration * is written by def_encdec() in encdec.c */ src = mputprintf(src, "boolean %s::can_start(const char *name, const char *uri, " - "XERdescriptor_t const& xd, unsigned int flavor) {\n" + "XERdescriptor_t const& xd, unsigned int flavor, unsigned int flavor2) {\n" " boolean e_xer = is_exer(flavor);\n" " if ((!e_xer || !(xd.xer_bits & UNTAGGED)) && !(flavor & XER_RECOF)) return " "check_name(name, xd, e_xer) && (!e_xer || check_namespace(uri, xd));\n" @@ -1067,7 +1067,7 @@ void defRecordOfClass1(const struct_of_def *sdef, output_struct *output) src = mputstr(src, "{\n"); for (f = 0; f < sdef->nFollowers; ++f) { src = mputprintf(src, - " if (%s::can_start(name, uri, %s_xer_, flavor)) return FALSE;\n" + " if (%s::can_start(name, uri, %s_xer_, flavor, flavor2)) return FALSE;\n" , sdef->followers[f].type , sdef->followers[f].typegen ); @@ -1079,13 +1079,13 @@ void defRecordOfClass1(const struct_of_def *sdef, output_struct *output) else src = mputstr(src, "return TRUE;\n"); src = mputprintf(src, - " return %s::can_start(name, uri, *xd.oftype_descr, flavor | XER_RECOF);\n" + " return %s::can_start(name, uri, *xd.oftype_descr, flavor | XER_RECOF, flavor2);\n" "}\n\n" , sdef->type ); src = mputprintf(src, - "char ** %s::collect_ns(const XERdescriptor_t& p_td, size_t& num, bool& def_ns) const {\n" + "char ** %s::collect_ns(const XERdescriptor_t& p_td, size_t& num, bool& def_ns, unsigned int) const {\n" " size_t num_collected;\n" " char **collected_ns = Base_Type::collect_ns(p_td, num_collected, def_ns);\n" /* The above may throw but then nothing was allocated. */ @@ -1113,7 +1113,7 @@ void defRecordOfClass1(const struct_of_def *sdef, output_struct *output) src=mputprintf(src, "int %s::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, " - "unsigned int p_flavor, int p_indent, embed_values_enc_struct_t* emb_val) const\n{\n" + "unsigned int p_flavor, unsigned int p_flavor2, int p_indent, embed_values_enc_struct_t* emb_val) const\n{\n" " if (val_ptr == 0) TTCN_error(\"Attempt to XER-encode an unbound record of\");\n" /* TODO type name */ " int encoded_length=(int)p_buf.get_len();\n" " boolean e_xer = is_exer(p_flavor);\n" @@ -1209,7 +1209,7 @@ void defRecordOfClass1(const struct_of_def *sdef, output_struct *output) " p_buf.put_s(ns_len, (const unsigned char*)ns);\n" " UNIVERSAL_CHARSTRING before(sp_at, (const universal_char*)(*val_ptr->value_elements[i]));\n" - " before.XER_encode(UNIVERSAL_CHARSTRING_xer_, p_buf, p_flavor | ANY_ATTRIBUTES, p_indent, 0);\n" + " before.XER_encode(UNIVERSAL_CHARSTRING_xer_, p_buf, p_flavor | ANY_ATTRIBUTES, p_flavor2, p_indent, 0);\n" // Ensure the namespace abides to its restrictions " if (p_td.xer_bits & (ANY_FROM | ANY_EXCEPT)) {\n" " TTCN_Buffer ns_buf;\n" @@ -1237,7 +1237,7 @@ void defRecordOfClass1(const struct_of_def *sdef, output_struct *output) " }\n" " UNIVERSAL_CHARSTRING after(len - j, (const universal_char*)(*val_ptr->value_elements[i]) + j);\n" - " after.XER_encode(UNIVERSAL_CHARSTRING_xer_, p_buf, p_flavor | ANY_ATTRIBUTES, p_indent, 0);\n" + " after.XER_encode(UNIVERSAL_CHARSTRING_xer_, p_buf, p_flavor | ANY_ATTRIBUTES, p_flavor2, p_indent, 0);\n" // Put this attribute in a dummy element and walk through it to check its validity " TTCN_Buffer check_buf;\n" " check_buf.put_s(2, (const unsigned char*)\"<a\");\n" @@ -1300,17 +1300,17 @@ void defRecordOfClass1(const struct_of_def *sdef, output_struct *output) " emb_val->embval_array_reg->size_of() : emb_val->embval_array_opt->size_of())) {\n" " if (0 != emb_val->embval_array_reg) {\n" " (*emb_val->embval_array_reg)[emb_val->embval_index].XER_encode(\n" - " UNIVERSAL_CHARSTRING_xer_, p_buf, p_flavor | EMBED_VALUES, p_indent+1, 0);\n" + " UNIVERSAL_CHARSTRING_xer_, p_buf, p_flavor | EMBED_VALUES, p_flavor2, p_indent+1, 0);\n" " }\n" " else {\n" " (*emb_val->embval_array_opt)[emb_val->embval_index].XER_encode(\n" - " UNIVERSAL_CHARSTRING_xer_, p_buf, p_flavor | EMBED_VALUES, p_indent+1, 0);\n" + " UNIVERSAL_CHARSTRING_xer_, p_buf, p_flavor | EMBED_VALUES, p_flavor2, p_indent+1, 0);\n" " }\n" " ++emb_val->embval_index;\n" " }\n" " ec_1.set_msg(\"%d: \", i);\n" " if (e_xer && (p_td.xer_bits & XER_LIST) && i>0) p_buf.put_c(' ');\n" - " (*this)[i].XER_encode(*p_td.oftype_descr, p_buf, p_flavor, p_indent+own_tag, emb_val);\n" + " (*this)[i].XER_encode(*p_td.oftype_descr, p_buf, p_flavor, p_flavor2, p_indent+own_tag, emb_val);\n" " }\n" " if (indenting && !is_exerlist(p_flavor)) {\n" ); @@ -1486,7 +1486,7 @@ void defRecordOfClass1(const struct_of_def *sdef, output_struct *output) /* An untagged record-of ends if it encounters an element with a name * that doesn't match its component */ " if (!own_tag && !can_start((const char*)p_reader.LocalName(), " - "(const char*)p_reader.NamespaceUri(), p_td, p_flavor)) {\n" + "(const char*)p_reader.NamespaceUri(), p_td, p_flavor, p_flavor2)) {\n" " for (; rd_ok == 1 && p_reader.Depth() > xml_depth; rd_ok = p_reader.Read()) ;\n" " break;\n" " }\n" @@ -2514,13 +2514,13 @@ void defRecordOfClassMemAllocOptimized(const struct_of_def *sdef, output_struct if (xer_needed) { /* XERSTUFF encoder codegen for record-of, RT1 */ def = mputstr(def, - "char **collect_ns(const XERdescriptor_t& p_td, size_t& num, bool& def_ns) const;\n"); + "char **collect_ns(const XERdescriptor_t& p_td, size_t& num, bool& def_ns, unsigned int flavor = 0) const;\n"); /* Write the body of the XER encoder/decoder functions. The declaration * is written by def_encdec() in encdec.c */ src = mputprintf(src, "boolean %s::can_start(const char *name, const char *uri, " - "XERdescriptor_t const& xd, unsigned int flavor) {\n" + "XERdescriptor_t const& xd, unsigned int flavor, unsigned int flavor2) {\n" " boolean e_xer = is_exer(flavor);\n" " if ((!e_xer || !(xd.xer_bits & UNTAGGED)) && !(flavor & XER_RECOF)) return " "check_name(name, xd, e_xer) && (!e_xer || check_namespace(uri, xd));\n" @@ -2535,7 +2535,7 @@ void defRecordOfClassMemAllocOptimized(const struct_of_def *sdef, output_struct src = mputstr(src, "{\n"); for (f = 0; f < sdef->nFollowers; ++f) { src = mputprintf(src, - " if (%s::can_start(name, uri, %s_xer_, flavor)) return FALSE;\n" + " if (%s::can_start(name, uri, %s_xer_, flavor, flavor2)) return FALSE;\n" , sdef->followers[f].type , sdef->followers[f].typegen ); @@ -2547,13 +2547,13 @@ void defRecordOfClassMemAllocOptimized(const struct_of_def *sdef, output_struct else src = mputstr(src, "return TRUE;\n"); src = mputprintf(src, - " return %s::can_start(name, uri, *xd.oftype_descr, flavor | XER_RECOF);\n" + " return %s::can_start(name, uri, *xd.oftype_descr, flavor | XER_RECOF, flavor2);\n" "}\n\n" , sdef->type ); src = mputprintf(src, - "char ** %s::collect_ns(const XERdescriptor_t& p_td, size_t& num, bool& def_ns) const {\n" + "char ** %s::collect_ns(const XERdescriptor_t& p_td, size_t& num, bool& def_ns, unsigned int) const {\n" " size_t num_collected;\n" " char **collected_ns = Base_Type::collect_ns(p_td, num_collected, def_ns);\n" /* The above may throw but then nothing was allocated. */ @@ -2581,7 +2581,7 @@ void defRecordOfClassMemAllocOptimized(const struct_of_def *sdef, output_struct src=mputprintf(src, "int %s::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, " - "unsigned int p_flavor, int p_indent, embed_values_enc_struct_t* emb_val) const\n{\n" + "unsigned int p_flavor, unsigned int p_flavor2, int p_indent, embed_values_enc_struct_t* emb_val) const\n{\n" " if (n_elements==-1) TTCN_error(\"Attempt to XER-encode an unbound record of\");\n" /* TODO type name */ " int encoded_length=(int)p_buf.get_len();\n" " boolean e_xer = is_exer(p_flavor);\n" @@ -2672,7 +2672,7 @@ void defRecordOfClassMemAllocOptimized(const struct_of_def *sdef, output_struct " p_buf.put_s(ns_len, (const unsigned char*)ns);\n" " UNIVERSAL_CHARSTRING before(sp_at, (const universal_char*)(value_elements[i]));\n" - " before.XER_encode(UNIVERSAL_CHARSTRING_xer_, p_buf, p_flavor | ANY_ATTRIBUTES, p_indent, 0);\n" + " before.XER_encode(UNIVERSAL_CHARSTRING_xer_, p_buf, p_flavor | ANY_ATTRIBUTES, p_flavor2, p_indent, 0);\n" // Ensure the namespace abides to its restrictions " if (p_td.xer_bits & (ANY_FROM | ANY_EXCEPT)) {\n" " TTCN_Buffer ns_buf;\n" @@ -2700,12 +2700,12 @@ void defRecordOfClassMemAllocOptimized(const struct_of_def *sdef, output_struct " }\n" " UNIVERSAL_CHARSTRING after(len - j, (const universal_char*)(value_elements[i]) + j);\n" - " after.XER_encode(UNIVERSAL_CHARSTRING_xer_, p_buf, p_flavor | ANY_ATTRIBUTES, p_indent, 0);\n" + " after.XER_encode(UNIVERSAL_CHARSTRING_xer_, p_buf, p_flavor | ANY_ATTRIBUTES, p_flavor2, p_indent, 0);\n" // Put this attribute in a dummy element and walk through it to check its validity " TTCN_Buffer check_buf;\n" - " check_buf.put_s(2, (unsigned char*)\"<a\");\n" + " check_buf.put_s(2, (const unsigned char*)\"<a\");\n" " check_buf.put_s(p_buf.get_len() - buf_start, p_buf.get_data() + buf_start);\n" - " check_buf.put_s(2, (unsigned char*)\"/>\");" + " check_buf.put_s(2, (const unsigned char*)\"/>\");" " XmlReaderWrap checker(check_buf);\n" " while (1 == checker.Read()) ;\n" " }\n" @@ -2763,17 +2763,17 @@ void defRecordOfClassMemAllocOptimized(const struct_of_def *sdef, output_struct " emb_val->embval_array_reg->size_of() : emb_val->embval_array_opt->size_of())) {\n" " if (0 != emb_val->embval_array_reg) {\n" " (*emb_val->embval_array_reg)[emb_val->embval_index].XER_encode(\n" - " UNIVERSAL_CHARSTRING_xer_, p_buf, p_flavor | EMBED_VALUES, p_indent+1, 0);\n" + " UNIVERSAL_CHARSTRING_xer_, p_buf, p_flavor | EMBED_VALUES, p_flavor2, p_indent+1, 0);\n" " }\n" " else {\n" " (*emb_val->embval_array_opt)[emb_val->embval_index].XER_encode(\n" - " UNIVERSAL_CHARSTRING_xer_, p_buf, p_flavor | EMBED_VALUES, p_indent+1, 0);\n" + " UNIVERSAL_CHARSTRING_xer_, p_buf, p_flavor | EMBED_VALUES, p_flavor2, p_indent+1, 0);\n" " }\n" " ++emb_val->embval_index;\n" " }\n" " ec_1.set_msg(\"%d: \", i);\n" " if (e_xer && (p_td.xer_bits & XER_LIST) && i>0) p_buf.put_c(' ');\n" - " value_elements[i].XER_encode(*p_td.oftype_descr, p_buf, p_flavor, p_indent+own_tag, emb_val);\n" + " value_elements[i].XER_encode(*p_td.oftype_descr, p_buf, p_flavor, p_flavor2, p_indent+own_tag, emb_val);\n" " }\n" " if (indenting && !is_exerlist(p_flavor)) {\n" ); @@ -2943,7 +2943,7 @@ void defRecordOfClassMemAllocOptimized(const struct_of_def *sdef, output_struct /* An untagged record-of ends if it encounters an element with a name * that doesn't match its component */ " if (!own_tag && !can_start((const char*)p_reader.LocalName(), " - "(const char*)p_reader.NamespaceUri(), p_td, p_flavor)) {\n" + "(const char*)p_reader.NamespaceUri(), p_td, p_flavor, p_flavor2)) {\n" " for (; rd_ok == 1 && p_reader.Depth() > xml_depth; rd_ok = p_reader.Read()) ;\n" " break;\n" " }\n" @@ -3271,20 +3271,20 @@ void defRecordOfClass2(const struct_of_def *sdef, output_struct *output) if (xer_needed) { def = mputprintf(def, "boolean isXerAttribute() const { return %s; }\n" "virtual boolean can_start_v(const char * name, const char *uri, " - "XERdescriptor_t const& xd, unsigned int);\n" + "XERdescriptor_t const& xd, unsigned int, unsigned int flavor2);\n" "static boolean can_start (const char * name, const char *uri, " - "XERdescriptor_t const& xd, unsigned int);\n", + "XERdescriptor_t const& xd, unsigned int, unsigned int flavor2);\n", sdef->xerAttribute ? "TRUE" : "FALSE"); src = mputprintf(src, /* The virtual can_start_v hands off to the static can_start. * We must make a virtual call in Record_Of_Type::XER_decode because * we don't know the actual type (derived from Record_Of_Type) */ "boolean %s::can_start_v(const char *name, const char *uri, " - "XERdescriptor_t const& xd, unsigned int flavor) {\n" - " return can_start(name, uri, xd, flavor);\n" + "XERdescriptor_t const& xd, unsigned int flavor, unsigned int flavor2) {\n" + " return can_start(name, uri, xd, flavor, flavor2);\n" "}\n\n" "boolean %s::can_start(const char *name, const char *uri, " - "XERdescriptor_t const& xd, unsigned int flavor) {\n" + "XERdescriptor_t const& xd, unsigned int flavor, unsigned int flavor2) {\n" " boolean e_xer = is_exer(flavor);\n" /* if EXER and UNTAGGED, it can begin with the tag of the element, * otherwise it must be the tag of the type itself, @@ -3304,7 +3304,7 @@ void defRecordOfClass2(const struct_of_def *sdef, output_struct *output) src = mputstr(src, "{\n"); for (f = 0; f < sdef->nFollowers; ++f) { src = mputprintf(src, - " if (%s::can_start(name, uri, %s_xer_, flavor)) return FALSE;\n" + " if (%s::can_start(name, uri, %s_xer_, flavor, flavor2)) return FALSE;\n" , sdef->followers[f].type , sdef->followers[f].typegen ); @@ -3317,7 +3317,7 @@ void defRecordOfClass2(const struct_of_def *sdef, output_struct *output) src = mputstr(src, "return TRUE;\n"); } src = mputprintf(src, - " return %s::can_start(name, uri, *xd.oftype_descr, flavor | XER_RECOF);\n" + " return %s::can_start(name, uri, *xd.oftype_descr, flavor | XER_RECOF, flavor2);\n" "}\n\n", sdef->type); def = mputprintf(def, "boolean isXmlValueList() const { return %s; }\n\n", sdef->xmlValueList ? "TRUE" : "FALSE"); @@ -3326,7 +3326,7 @@ void defRecordOfClass2(const struct_of_def *sdef, output_struct *output) /* The call in XER_decode is still there, can_start_v must exist. */ def = mputstr(def, "virtual boolean can_start_v(const char *, const char *, " - "XERdescriptor_t const&, unsigned int) { return FALSE; }\n"); + "XERdescriptor_t const&, unsigned int, unsigned int) { return FALSE; }\n"); } /* end of class */ diff --git a/compiler2/ttcn3/AST_ttcn3.cc b/compiler2/ttcn3/AST_ttcn3.cc index c827a6d008111a7faafc1e62895b40d45fce6209..66b7eb8499e223a99a254d182649276b6b09a387 100644 --- a/compiler2/ttcn3/AST_ttcn3.cc +++ b/compiler2/ttcn3/AST_ttcn3.cc @@ -9605,9 +9605,9 @@ namespace Ttcn { LazyParamData::clean(); if (val->get_valuetype() == Value::V_REFD) { // check if the reference is a parameter, mark it as used if it is - Reference* ref = dynamic_cast<Reference*>(val->get_reference()); - if (ref != NULL) { - ref->ref_usage_found(); + Reference* r = dynamic_cast<Reference*>(val->get_reference()); + if (r != NULL) { + r->ref_usage_found(); } } } else { @@ -9636,10 +9636,10 @@ namespace Ttcn { if (temp->get_DerivedRef() != NULL || temp->get_Template()->get_templatetype() == Template::TEMPLATE_REFD) { // check if the reference is a parameter, mark it as used if it is - Reference* ref = dynamic_cast<Reference*>(temp->get_DerivedRef() != NULL ? + Reference* r = dynamic_cast<Reference*>(temp->get_DerivedRef() != NULL ? temp->get_DerivedRef() : temp->get_Template()->get_reference()); - if (ref != NULL) { - ref->ref_usage_found(); + if (r != NULL) { + r->ref_usage_found(); } } } else { diff --git a/compiler2/ttcn3/Attributes.cc b/compiler2/ttcn3/Attributes.cc index eb91cd9fb5c36c5af97058e481092b0ae41873d8..8d247e787cf88fc98543b05460d226f8e6fb50ac 100644 --- a/compiler2/ttcn3/Attributes.cc +++ b/compiler2/ttcn3/Attributes.cc @@ -462,7 +462,7 @@ namespace Ttcn { return str; } - char* ErroneousDescriptor::generate_code_struct_str(char *str, char *& def, string genname, int field_index) + char* ErroneousDescriptor::generate_code_struct_str(char *str, char *& /*def*/, string genname, int field_index) { string genname_values_vec = genname + "_valsvec"; string genname_embedded_vec = genname + "_embvec"; diff --git a/compiler2/ttcn3/Statement.cc b/compiler2/ttcn3/Statement.cc index 3db41091534cc4bfad9959437f078a65abf318b9..102075ceaeff15d81b42269d634299079d4abdd3 100644 --- a/compiler2/ttcn3/Statement.cc +++ b/compiler2/ttcn3/Statement.cc @@ -3171,8 +3171,8 @@ error: continue; } for(size_t i2=i; i2<select_union.sus->get_nof_sus(); i2++) { - size_t size = select_union.sus->get_su_byIndex(i2)->get_ids().size(); - for(size_t j2=j; j2<size; j2++) { + size_t size2 = select_union.sus->get_su_byIndex(i2)->get_ids().size(); + for(size_t j2=j; j2<size2; j2++) { if (i == i2 && j == j2) continue; const Identifier *id2 = select_union.sus->get_su_byIndex(i2)->get_id_byIndex(j2); if (id->get_ttcnname() == id2->get_ttcnname()) { @@ -9027,7 +9027,7 @@ error: } void ParamRedirect::generate_code(expression_struct_t *expr, - TemplateInstance* matched_ti, bool is_out) + TemplateInstance* matched_ti, bool /*is_out*/) { // AssignmentList is converted to VariableList during checking if (parredirtype != P_VAR) FATAL_ERROR("ParamRedirect::generate_code()"); @@ -11586,7 +11586,7 @@ error: ids.add(id); } - void SelectUnion::chk(Type *p_gov) + void SelectUnion::chk(Type */*p_gov*/) { Error_Context cntxt(this, "In select union statement"); block->chk(); diff --git a/compiler2/ttcn3/profiler.c b/compiler2/ttcn3/profiler.c index 6de701c4b9a1cf9092b30bc1a1b98919e001505f..12851600fdd5e3e099fa4390d52d0f0f7c321a10 100644 --- a/compiler2/ttcn3/profiler.c +++ b/compiler2/ttcn3/profiler.c @@ -110,7 +110,7 @@ boolean get_profiler_code_line(const char *p_file_name, return FALSE; } -void free_profiler_data() +void free_profiler_data(void) { for (size_t i = 0; i < the_data->nof_lines; ++i) { Free(the_data->lines[i].file_name); diff --git a/compiler2/ttcn3/profiler.h b/compiler2/ttcn3/profiler.h index 65cd748003c771b36494ba58e1d79e78d05774cc..a417af00c4b67fb2f4eb58f18abadb14be69623a 100644 --- a/compiler2/ttcn3/profiler.h +++ b/compiler2/ttcn3/profiler.h @@ -69,7 +69,7 @@ boolean get_profiler_code_line(const char *p_file_name, char **p_function_name, int *p_line_no); /** Frees the database (must be called once, at the end of compilation) */ -void free_profiler_data(); +void free_profiler_data(void); #ifdef __cplusplus } diff --git a/compiler2/union.c b/compiler2/union.c index f3342ae541a5e2d33af7e9a99851bafa6e08215e..1e0537cc9a33ab50f6e5dec440841f80a21c1df5 100644 --- a/compiler2/union.c +++ b/compiler2/union.c @@ -1324,33 +1324,33 @@ void defUnionClass(struct_def const *sdef, output_struct *output) if (xer_needed) { /* XERSTUFF encoder functions for union */ def = mputstr(def, - "char **collect_ns(const XERdescriptor_t& p_td, size_t& num, boolean& def_ns) const;\n"); - + "char **collect_ns(const XERdescriptor_t& p_td, size_t& num, boolean& def_ns, unsigned int flavor = 0) const;\n"); src=mputprintf(src, "boolean %s::can_start(const char *name, const char *uri," - " const XERdescriptor_t& xd, unsigned int flavor) {\n" + " const XERdescriptor_t& xd, unsigned int flavor, unsigned int flavor2) {\n" " boolean exer = is_exer(flavor);\n" - " if (!exer || (!(xd.xer_bits & UNTAGGED) && !(flavor & (USE_NIL|(exer ? XER_LIST : XER_RECOF))))) " + " if (!exer || (!(xd.xer_bits & UNTAGGED) && !(flavor & (USE_NIL|(exer ? XER_LIST : XER_RECOF)))%s)) " /* If the union has no own tag, there is nothing to check. */ "return check_name(name, xd, exer)" /* if false, return immediately */ " && (!exer || (flavor & USE_TYPE_ATTR) || check_namespace(uri, xd));\n" /* else check the ns, unless Basic XER (which has no namespaces, ever) * or USE_TYPE (where we only have a name from the type id attribute) */ , name + , sdef->xerUseUnion ? " && !(flavor2 & FROM_UNION_USETYPE)" : "" ); src = mputstr(src, " flavor &= ~XER_RECOF;\n"); /* An untagged union can start with the start tag of any alternative */ for (i = 0; i < sdef->nElements; i++) { src=mputprintf(src, - " if (%s::can_start(name, uri, %s_xer_, flavor)) return TRUE;\n" + " if (%s::can_start(name, uri, %s_xer_, flavor, flavor2)) return TRUE;\n" , sdef->elements[i].type, sdef->elements[i].typegen ); } src = mputstr(src, " return FALSE;\n}\n\n"); src = mputprintf(src, - "char ** %s::collect_ns(const XERdescriptor_t& p_td, size_t& num, boolean& def_ns) const {\n" + "char ** %s::collect_ns(const XERdescriptor_t& p_td, size_t& num, boolean& def_ns, unsigned int%s) const {\n" " size_t num_collected;\n" " char **collected_ns = Base_Type::collect_ns(p_td, num_collected, def_ns);\n" /* Two-level new memory allocated */ @@ -1361,11 +1361,12 @@ void defUnionClass(struct_def const *sdef, output_struct *output) " boolean def_ns_1 = FALSE;\n" " switch (union_selection) {\n" , name + , sdef->nElements > 0 ? " flavor" : "" ); for (i = 0; i < sdef->nElements; i++) { src = mputprintf(src, " case %s_%s:\n" - " new_ns = field_%s->collect_ns(%s_xer_, num_new, def_ns_1);\n" + " new_ns = field_%s->collect_ns(%s_xer_, num_new, def_ns_1, flavor);\n" " def_ns = def_ns || def_ns_1;\n" /* alas, no ||= */ " merge_ns(collected_ns, num_collected, new_ns, num_new);\n" /* merge_ns() deallocated new_ns and duplicated strings, @@ -1387,9 +1388,11 @@ void defUnionClass(struct_def const *sdef, output_struct *output) " }\n" /* switch */ " if ((p_td.xer_bits & USE_TYPE_ATTR) && !(p_td.xer_bits & XER_ATTRIBUTE) && need_type) {\n" /* control ns for type attribute */ - " collected_ns = (char**)Realloc(collected_ns, sizeof(char*) * ++num_collected);\n" + " new_ns = (char**)Malloc(sizeof(char*));\n" + " num_new = 1;\n" " const namespace_t *c_ns = p_td.my_module->get_controlns();\n" - " collected_ns[num_collected-1] = mprintf(\" xmlns:%s='%s'\", c_ns->px, c_ns->ns);\n" + " new_ns[0] = mprintf(\" xmlns:%s='%s'\", c_ns->px, c_ns->ns);\n" + " merge_ns(collected_ns, num_collected, new_ns, num_new);\n" " }\n" " }\n" " catch (...) {\n" @@ -1406,7 +1409,7 @@ void defUnionClass(struct_def const *sdef, output_struct *output) src = mputprintf(src, /* XERSTUFF XER_encode for union */ "int %s::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, " - "unsigned int p_flavor, int p_indent, embed_values_enc_struct_t*) const\n" + "unsigned int p_flavor, unsigned int p_flavor2, int p_indent, embed_values_enc_struct_t*) const\n" "{\n" "%s" " if (%s==union_selection) {\n" @@ -1418,7 +1421,7 @@ void defUnionClass(struct_def const *sdef, output_struct *output) " int encoded_length=(int)p_buf.get_len();\n" , name , (use_runtime_2 ? " if (err_descr) return XER_encode_negtest" - "(err_descr, p_td, p_buf, p_flavor, p_indent, 0);\n" : "") + "(err_descr, p_td, p_buf, p_flavor, p_flavor2, p_indent, 0);\n" : "") , unbound_value ); @@ -1426,29 +1429,30 @@ void defUnionClass(struct_def const *sdef, output_struct *output) src = mputstr(src, " const boolean e_xer = is_exer(p_flavor);\n" " boolean need_schema = FALSE;\n" - " char *schema_prefix = mprintf(\"xsd\");\n" - " int counter = 0;\n" - " // Find a unique prefix for the xsd schema\n" - " while (1) {\n" - " boolean changed = FALSE;\n" - " for (size_t i = 0; i < p_td.my_module->get_num_ns(); i++) {\n" - " if (p_td.my_module->get_ns(i)->px != NULL &&\n" - " strcmp(p_td.my_module->get_ns(i)->px, schema_prefix) == 0) {\n" - " Free(schema_prefix);\n" - " schema_prefix = mprintf(\"xsd%i\", counter);\n" - " counter++;\n" - " changed = TRUE;\n" - " break; // new maybe unique prefix found\n" - " }\n" - " }\n" - " if (!changed) {\n" - " break; //break when a unique prefix found\n" - " }\n" - " }\n" + " char *schema_prefix = NULL;\n" " char *type_atr = NULL;\n" " if (e_xer && (p_td.xer_bits & USE_TYPE_ATTR)) {\n" " char *type_name = 0;\n" " const namespace_t *control_ns;\n" + " schema_prefix = mprintf(\"xsd\");\n" + " int counter = 0;\n" + " // Find a unique prefix for the xsd schema\n" + " while (1) {\n" + " boolean changed = FALSE;\n" + " for (size_t i = 0; i < p_td.my_module->get_num_ns(); i++) {\n" + " if (p_td.my_module->get_ns(i)->px != NULL &&\n" + " strcmp(p_td.my_module->get_ns(i)->px, schema_prefix) == 0) {\n" + " Free(schema_prefix);\n" + " schema_prefix = mprintf(\"xsd%i\", counter);\n" + " counter++;\n" + " changed = TRUE;\n" + " break; // new maybe unique prefix found\n" + " }\n" + " }\n" + " if (!changed) {\n" + " break; //break when a unique prefix found\n" + " }\n" + " }\n" " switch (union_selection) {\n"); /* In case of USE-TYPE the first field won't need the type attribute */ int start_at = sdef->xerUseUnion ? 0 : 1; @@ -1456,7 +1460,8 @@ void defUnionClass(struct_def const *sdef, output_struct *output) src = mputprintf(src, " case %s_%s:\n" , selection_prefix, sdef->elements[i].name); - if (!sdef->xerUseUnion) { // UseType + // UseType and not UseUnion on field + if (!sdef->xerUseUnion && !sdef->elements[i].xerUseUnion) { src = mputprintf(src, " if (%s_xer_.my_module != 0 && %s_xer_.ns_index != -1 &&\n" " %s_xer_.namelens[1] > 2) {\n" @@ -1512,11 +1517,13 @@ void defUnionClass(struct_def const *sdef, output_struct *output) } /* if UseTypeAttr */ src = mputprintf(src, " unsigned int flavor_1 = p_flavor;\n" + " unsigned int flavor_2 = p_flavor2;\n" " if (is_exer(p_flavor)) flavor_1 &= ~XER_RECOF;\n" + " if (!(p_flavor & XER_LIST)) flavor_2 |= FROM_UNION_USETYPE;\n" " boolean omit_tag = begin_xml(p_td, p_buf, flavor_1, p_indent, FALSE, " - "(collector_fn)&%s::collect_ns%s);\n" + "(collector_fn)&%s::collect_ns%s, flavor_2);\n" , sdef->name - , sdef->xerUseTypeAttr ? ", type_atr" : ""); + , sdef->xerUseTypeAttr ? ", type_atr" : ", 0"); src = mputprintf(src, " unsigned int flavor_0 = (p_flavor & XER_MASK)%s;\n" " switch (union_selection) {\n" @@ -1525,7 +1532,7 @@ void defUnionClass(struct_def const *sdef, output_struct *output) src = mputprintf(src, " case %s_%s:\n" " ec_1.set_msg(\"%s': \");\n" " field_%s->XER_encode(%s_xer_, p_buf, flavor_0, " - "p_indent + (!p_indent || !omit_tag), 0);\n" + "flavor_2, p_indent + (!p_indent || !omit_tag), 0);\n" " break;\n", selection_prefix, sdef->elements[i].name, sdef->elements[i].dispname, @@ -1548,11 +1555,11 @@ void defUnionClass(struct_def const *sdef, output_struct *output) def = mputstr(def, "int XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr, " "const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, " - "unsigned int p_flavor, int p_indent, embed_values_enc_struct_t*) const;\n"); + "unsigned int p_flavor, unsigned int p_flavor2, int p_indent, embed_values_enc_struct_t*) const;\n"); src = mputprintf(src, /* XERSTUFF XER_encode for union */ "int %s::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr, " "const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, " - "unsigned int p_flavor, int p_indent, embed_values_enc_struct_t*) const\n" + "unsigned int p_flavor, unsigned int p_flavor2, int p_indent, embed_values_enc_struct_t*) const\n" "{\n" " if (%s==union_selection) {\n" " TTCN_error(\"Attempt to XER-encode an unbound union value.\");\n" @@ -1568,29 +1575,30 @@ void defUnionClass(struct_def const *sdef, output_struct *output) src = mputstr(src, " const boolean e_xer = is_exer(p_flavor);\n" " boolean need_schema = FALSE;\n" - " char *schema_prefix = mprintf(\"xsd\");\n" - " int counter = 0;\n" - " // Find a unique prefix for the xsd schema\n" - " while (1) {\n" - " boolean changed = FALSE;\n" - " for (size_t i = 0; i < p_td.my_module->get_num_ns(); i++) {\n" - " if (p_td.my_module->get_ns(i)->px != NULL &&\n" - " strcmp(p_td.my_module->get_ns(i)->px, schema_prefix) == 0) {\n" - " Free(schema_prefix);\n" - " schema_prefix = mprintf(\"xsd%i\", counter);\n" - " counter++;\n" - " changed = TRUE;\n" - " break; // new maybe unique prefix found\n" - " }\n" - " }\n" - " if (!changed) {\n" - " break; //break when a unique prefix found\n" - " }\n" - " }\n" + " char *schema_prefix = NULL;\n" " char *type_atr = NULL;\n" " if (e_xer && (p_td.xer_bits & USE_TYPE_ATTR)) {\n" " char *type_name = 0;\n" " const namespace_t *control_ns;\n" + " schema_prefix = mprintf(\"xsd\");\n" + " int counter = 0;\n" + " // Find a unique prefix for the xsd schema\n" + " while (1) {\n" + " boolean changed = FALSE;\n" + " for (size_t i = 0; i < p_td.my_module->get_num_ns(); i++) {\n" + " if (p_td.my_module->get_ns(i)->px != NULL &&\n" + " strcmp(p_td.my_module->get_ns(i)->px, schema_prefix) == 0) {\n" + " Free(schema_prefix);\n" + " schema_prefix = mprintf(\"xsd%i\", counter);\n" + " counter++;\n" + " changed = TRUE;\n" + " break; // new maybe unique prefix found\n" + " }\n" + " }\n" + " if (!changed) {\n" + " break; //break when a unique prefix found\n" + " }\n" + " }\n" " switch (union_selection) {\n"); int start_at = sdef->xerUseUnion ? 0 : 1; for (i = start_at; i < sdef->nElements; i++) { @@ -1676,22 +1684,24 @@ void defUnionClass(struct_def const *sdef, output_struct *output) "(\"internal error: erroneous value typedescriptor missing\");\n" " else err_vals->value->errval->XER_encode(" "*err_vals->value->type_descr->xer, p_buf, flavor_0, " - "p_indent + (!p_indent || !omit_tag), 0);\n" + "p_flavor2, p_indent + (!p_indent || !omit_tag), 0);\n" " }\n" " }\n" " } else {\n" " ec_1.set_msg(\"%s': \");\n" " if (emb_descr) field_%s->XER_encode_negtest(emb_descr, " - "%s_xer_, p_buf, flavor_0, p_indent + (!p_indent || !omit_tag), 0);\n" + "%s_xer_, p_buf, flavor_0, p_flavor2%s, p_indent + (!p_indent || !omit_tag), 0);\n" " else field_%s->XER_encode(%s_xer_, p_buf, flavor_0, " - "p_indent + (!p_indent || !omit_tag), 0);\n" + "p_flavor2, p_indent + (!p_indent || !omit_tag), 0);\n" " }\n" " break;\n", selection_prefix, sdef->elements[i].name, /* case label */ (unsigned long)i, (unsigned long)i, sdef->elements[i].dispname, /* set_msg (erroneous) */ sdef->elements[i].dispname, /* set_msg */ - sdef->elements[i].name, sdef->elements[i].typegen, + sdef->elements[i].name, + sdef->elements[i].typegen, + sdef->xerUseTypeAttr && !sdef->xerUseUnion ? "| FROM_UNION_USETYPE" : "", sdef->elements[i].name, sdef->elements[i].typegen /* field_%s, %s_descr */ ); } @@ -1734,21 +1744,24 @@ void defUnionClass(struct_def const *sdef, output_struct *output) " if (xerbits & USE_TYPE_ATTR) p_flavor &= ~XER_RECOF;\n" " boolean own_tag = !(e_xer && ((xerbits & (ANY_ELEMENT | UNTAGGED)) " "|| (p_flavor & (USE_NIL|(e_xer ? XER_LIST : XER_RECOF)))));\n" + " int other_attributes = 0;\n" + " (void)other_attributes;\n" " if ((e_xer || !is_record_of(p_flavor)) && own_tag)\n" /* Loop until the start tag */ " %sfor (rd_ok = p_reader.Ok(); rd_ok == 1; rd_ok = p_reader.Read()) {\n" " type = p_reader.NodeType();\n" - " if (type == XML_READER_TYPE_ELEMENT) {\n" - " verify_name(p_reader, p_td, e_xer);\n" + " if (type == XML_READER_TYPE_ELEMENT%s) {\n" + " %sverify_name(p_reader, p_td, e_xer);\n" " xml_depth = p_reader.Depth();\n" , name , sdef->xerUseTypeAttr ? " char * typeatr = 0;\n" : "" , sdef->xerUseUnion ? " boolean attribute = (p_td.xer_bits & XER_ATTRIBUTE) ? TRUE : FALSE;\n" : "" , sdef->xerUseUnion ? "if (!attribute) " : "" + , sdef->xerUseUnion ? " || (p_flavor & USE_TYPE_ATTR)" : "" + , sdef->xerUseUnion ? "if (!(p_flavor & USE_TYPE_ATTR)) " : "" ); if (sdef->xerUseTypeAttr) { src = mputprintf(src, - " int other_attributes = 0;\n" " if (e_xer) {\n" " for (rd_ok = p_reader.MoveToFirstAttribute(); rd_ok == 1;" " rd_ok = p_reader.MoveToNextAttribute()) {\n" @@ -1760,8 +1773,9 @@ void defUnionClass(struct_def const *sdef, output_struct *output) " }\n" " else ++other_attributes;\n" " }\n" /* for */ - " rd_ok = p_reader.MoveToElement() | 1;\n" - , sdef->control_ns_prefix); + "%s" + , sdef->control_ns_prefix + , sdef->xerUseUnion ? " rd_ok = p_reader.MoveToElement() | 1;\n" : ""); if (!sdef->xerUseUnion) { /* USE-TYPE: No type attribute means the first alternative */ src = mputprintf(src, @@ -1776,8 +1790,8 @@ void defUnionClass(struct_def const *sdef, output_struct *output) } src = mputprintf(src, - " if (!(e_xer && (p_td.xer_bits & USE_TYPE_ATTR)%s)\n" - " && !p_reader.IsEmptyElement()) rd_ok = p_reader.Read();\n" + " if (%s(p_td.xer_bits & USE_TYPE_ATTR)%s)\n" + " && !p_reader.IsEmptyElement()) { rd_ok = p_reader.Read(); }\n" " break;\n" " }\n" " }\n" @@ -1789,17 +1803,19 @@ void defUnionClass(struct_def const *sdef, output_struct *output) " %sif (type == XML_READER_TYPE_ELEMENT) break;\n" " else if (type == XML_READER_TYPE_END_ELEMENT) break;\n" " }\n" - " if (rd_ok) {\n" + " if (%s) {\n" " TTCN_EncDec_ErrorContext ec_1(\"Alternative '\");\n" " TTCN_EncDec_ErrorContext ec_2;\n" " const char *elem_name;\n" " const char *ns_uri = 0;\n" + , sdef->xerUseTypeAttr && !sdef->xerUseUnion ? "!e_xer && !(" : "!(e_xer && " , sdef->xerUseTypeAttr ? " && other_attributes > 0" : "" , sdef->xerUseTypeAttr ? "if (!e_xer) " : "" , sdef->xerUseUnion ? "if (!attribute) " : "" , sdef->xerUseTypeAttr ? "if (e_xer) { if (type == XML_READER_TYPE_TEXT) break; }\n" " else " : "" + , sdef->xerUseTypeAttr && !sdef->xerUseUnion ? "TRUE" : "rd_ok" ); if (sdef->xerUseTypeAttr) { @@ -1836,7 +1852,7 @@ void defUnionClass(struct_def const *sdef, output_struct *output) * */ " if ((e_xer && (typeatr == NULL || !(p_td.xer_bits & USE_TYPE_ATTR))) " - "|| can_start(elem_name, ns_uri, %s_xer_, flavor_1) || strcmp(elem_name, \"%s\") == 0) {\n" + "|| can_start(elem_name, ns_uri, %s_xer_, flavor_1, p_flavor2)%s%s%s) {\n" " ec_2.set_msg(\"%s': \");\n" " if (%s==union_selection) {\n" " matched = %d;\n" @@ -1845,7 +1861,9 @@ void defUnionClass(struct_def const *sdef, output_struct *output) " if (field_%s->is_bound()) break; else clean_up();\n" " }\n", sdef->elements[i].typegen, - XSD_type_to_xml_type(sdef->elements[i].xsd_type), + sdef->elements[i].xsd_type != XSD_NONE ? " || strcmp(elem_name, \"" : "", + sdef->elements[i].xsd_type != XSD_NONE ? XSD_type_to_xml_type(sdef->elements[i].xsd_type) : "", + sdef->elements[i].xsd_type != XSD_NONE ? "\") == 0" : "", sdef->elements[i].dispname, unbound_value, (int)i, sdef->elements[i].name, sdef->elements[i].typegen, @@ -1877,6 +1895,14 @@ void defUnionClass(struct_def const *sdef, output_struct *output) } else /* not USE-UNION */ { + src = mputstr(src, + " unsigned int flavor2 = p_flavor2;\n"); + if (sdef->xerUseTypeAttr) { + src = mputstr(src, + " if (e_xer && (p_td.xer_bits & USE_TYPE_ATTR)) {\n" + " flavor2 |= FROM_UNION_USETYPE;\n" + " }\n"); + } if (sdef->exerMaybeEmptyIndex >= 0) { /* There is a field which can be empty XML. Add code to detect this * and jump to the appropriate field which can decode "nothing". */ @@ -1890,47 +1916,70 @@ void defUnionClass(struct_def const *sdef, output_struct *output) /* The field which can be empty should be checked last, otherwise we create an infinity loop with memory bomb. * So move that field to the last elseif branch*/ for (i = 0; i < sdef->nElements; i++) { - if(sdef->exerMaybeEmptyIndex != i){ + if(sdef->exerMaybeEmptyIndex != i) { src = mputprintf(src, - " %sif (%s::can_start(elem_name, ns_uri, %s_xer_, flavor_1) || (%s_xer_.xer_bits & ANY_ELEMENT) || strcmp(elem_name, \"%s\") == 0) {\n" + " %sif (%s::can_start(elem_name, ns_uri, %s_xer_, flavor_1, flavor2) || (%s_xer_.xer_bits & ANY_ELEMENT)%s%s%s%s) {\n" " ec_2.set_msg(\"%s': \");\n" " if (e_xer && (%s_xer_.xer_bits & BLOCKED)) {\n" " TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_INVAL_MSG,\n" " \"Attempting to decode blocked or abstract field.\");\n" - " }\n" - " %s%s().XER_decode(%s_xer_, p_reader, flavor_1, p_flavor2, 0);\n" + " }\n", + i && !(i==1 && sdef->exerMaybeEmptyIndex==0) ? "else " : "", /* print "if(" if generate code for the first field or if the first field is the MaybeEmpty field and we generate the code for the second one*/ + sdef->elements[i].type, sdef->elements[i].typegen, sdef->elements[i].typegen, + sdef->elements[i].xsd_type != XSD_NONE ? " || strcmp(elem_name, \"" : "", + sdef->elements[i].xsd_type != XSD_NONE ? XSD_type_to_xml_type(sdef->elements[i].xsd_type) : "", + sdef->elements[i].xsd_type != XSD_NONE ? "\") == 0" : "", + sdef->elements[i].xsd_type == XSD_NONE && sdef->elements[i].xerUseUnion ? " || (flavor2 & FROM_UNION_USETYPE)" : "", + sdef->elements[i].dispname, + sdef->elements[i].typegen); + if (sdef->xerUseTypeAttr) { + src = mputprintf(src, + " if (e_xer && !(%s_xer_.xer_bits & USE_TYPE_ATTR)) {\n" + " rd_ok = p_reader.MoveToElement() | 1;\n" + " }\n", + sdef->elements[i].typegen); + } + if (!sdef->elements[i].xerUseUnion && sdef->xerUseTypeAttr) { + src = mputprintf(src, + " if (e_xer && !((p_td.xer_bits & USE_TYPE_ATTR) && other_attributes > 0)\n" + " && !p_reader.IsEmptyElement()) { rd_ok = p_reader.Read(); }\n"); + } + src = mputprintf(src, + " %s%s().XER_decode(%s_xer_, p_reader, flavor_1, flavor2, 0);\n" " if (!%s%s().is_bound()) {\n" " TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_INVAL_MSG, \"Failed to decode field.\");\n" " }\n" " }\n", - i && !(i==1 && sdef->exerMaybeEmptyIndex==0) ? "else " : "", /* print "if(" if generate code for the first field or if the first field is the MaybeEmpty field and we generate the code for the second one*/ - sdef->elements[i].type, sdef->elements[i].typegen, sdef->elements[i].typegen, - XSD_type_to_xml_type(sdef->elements[i].xsd_type), - sdef->elements[i].dispname, + at_field, sdef->elements[i].name, sdef->elements[i].typegen, - at_field, sdef->elements[i].name, sdef->elements[i].typegen, at_field, sdef->elements[i].name); } } if(sdef->exerMaybeEmptyIndex>=0 ){ i=sdef->exerMaybeEmptyIndex; src = mputprintf(src, - " %sif ((e_xer && (type==XML_READER_TYPE_END_ELEMENT || !own_tag)) || %s::can_start(elem_name, ns_uri, %s_xer_, flavor_1) || (%s_xer_.xer_bits & ANY_ELEMENT) || strcmp(elem_name, \"%s\") == 0) {\n" + " %sif ((e_xer && (type==XML_READER_TYPE_END_ELEMENT || !own_tag)) || %s::can_start(elem_name, ns_uri, %s_xer_, flavor_1, flavor2) || (%s_xer_.xer_bits & ANY_ELEMENT)%s%s%s) {\n" "empty_xml: ec_2.set_msg(\"%s': \");\n" " if (e_xer && (%s_xer_.xer_bits & BLOCKED)) {\n" " TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_INVAL_MSG,\n" " \"Attempting to decode blocked or abstract field.\");\n" " }\n" - " %s%s().XER_decode(%s_xer_, p_reader, flavor_1, p_flavor2, 0);\n" + " if (e_xer && !(%s_xer_.xer_bits & USE_TYPE_ATTR)) {\n" + " rd_ok = p_reader.MoveToElement() | 1;\n" + " }\n" + " %s%s().XER_decode(%s_xer_, p_reader, flavor_1, flavor2, 0);\n" " if (!%s%s().is_bound()) {\n" " TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_INVAL_MSG, \"Failed to decode field.\");\n" " }\n" " }\n", sdef->nElements>0 ? "else " : "", sdef->elements[i].type, sdef->elements[i].typegen, sdef->elements[i].typegen, - XSD_type_to_xml_type(sdef->elements[i].xsd_type), + sdef->elements[i].xsd_type != XSD_NONE ? " || strcmp(elem_name, \"" : "", + sdef->elements[i].xsd_type != XSD_NONE ? XSD_type_to_xml_type(sdef->elements[i].xsd_type) : "", + sdef->elements[i].xsd_type != XSD_NONE ? "\") == 0" : "", sdef->elements[i].dispname, sdef->elements[i].typegen, + sdef->elements[i].typegen, at_field, sdef->elements[i].name, sdef->elements[i].typegen, at_field, sdef->elements[i].name); } @@ -1949,7 +1998,7 @@ void defUnionClass(struct_def const *sdef, output_struct *output) src = mputprintf(src, " }\n" /* end if(rd_ok) */ - " if (%s(e_xer || !is_record_of(p_flavor)) && own_tag)\n" + " if (%s(e_xer || !is_record_of(p_flavor)) && own_tag && !(p_flavor2 & FROM_UNION_USETYPE))\n" " for (; rd_ok == 1; rd_ok = p_reader.Read()) {\n" " type = p_reader.NodeType();\n" " if (type == XML_READER_TYPE_END_ELEMENT) {\n" diff --git a/compiler2/ustring.cc b/compiler2/ustring.cc index 6849aa7a8d86f67ffb72ed863061e1e9595b3e18..4df082404cbe3bac59cb121628dfa1966736efde 100644 --- a/compiler2/ustring.cc +++ b/compiler2/ustring.cc @@ -172,8 +172,8 @@ ustring::ustring(const string& s) delete ret; } if (isUTF8) { - ustring s = Common::decode_utf8(octet_str, CharCoding::UTF_8); - val_ptr = s.val_ptr; + ustring str = Common::decode_utf8(octet_str, CharCoding::UTF_8); + val_ptr = str.val_ptr; val_ptr->ref_count++; } else { init_struct(s.size()); diff --git a/compiler2/xpather.cc b/compiler2/xpather.cc index 282158ed6c412b02a7c0986293b4a2b2289fbe4b..13c4d33c87dab9dad14b9f19652b2c390c25373e 100644 --- a/compiler2/xpather.cc +++ b/compiler2/xpather.cc @@ -364,11 +364,11 @@ extern "C" const char* getLibFromProject(const char* projName) return NULL; } -extern "C" void erase_libs() { +extern "C" void erase_libs(void) { projGenHelper.cleanUp(); } -extern "C" void print_libs() { +extern "C" void print_libs(void) { projGenHelper.print(); } @@ -1592,38 +1592,40 @@ static tpd_result process_tpd_internal(const char *p_tpd_name, char *tpdName, co } if (!get_config_mode) { - struct string2_list* last_elem = required_configs; - // To ensure that the first elem is checked too if last_elem->next is null - while (last_elem && last_elem->str1 != NULL && last_elem->str2 != NULL) { - if (!strcmp(last_elem->str1, *p_project_name) && strcmp(last_elem->str2, actcfg)) { - { // check if the other configuration exists - expstring_t xpathActCfg= mprintf( - "/TITAN_Project_File_Information/Configurations/" - "Configuration[@name='%s']/text()", last_elem->str2); - XPathObject theConfigEx(run_xpath(xpathCtx, xpathActCfg)); - Free(xpathActCfg); - - xmlNodeSetPtr nodes = theConfigEx->nodesetval; - if (nodes == NULL) { - ERROR("The active build configuration named '%s' of project '%s' does not exist", - last_elem->str2, *p_project_name); - for (size_t i = 0; i < folders.size(); ++i) { - Free(const_cast<char*>(folders.get_nth_elem(i))); + { + struct string2_list* last_elem = required_configs; + // To ensure that the first elem is checked too if last_elem->next is null + while (last_elem && last_elem->str1 != NULL && last_elem->str2 != NULL) { + if (!strcmp(last_elem->str1, *p_project_name) && strcmp(last_elem->str2, actcfg)) { + { // check if the other configuration exists + expstring_t xpathActCfg= mprintf( + "/TITAN_Project_File_Information/Configurations/" + "Configuration[@name='%s']/text()", last_elem->str2); + XPathObject theConfigEx(run_xpath(xpathCtx, xpathActCfg)); + Free(xpathActCfg); + + xmlNodeSetPtr nodes = theConfigEx->nodesetval; + if (nodes == NULL) { + ERROR("The active build configuration named '%s' of project '%s' does not exist", + last_elem->str2, *p_project_name); + for (size_t i = 0; i < folders.size(); ++i) { + Free(const_cast<char*>(folders.get_nth_elem(i))); + } + folders.clear(); + return TPD_FAILED; } - folders.clear(); - return TPD_FAILED; } + ERROR("Required configuration is inconsistent or circular : Project '%s' cannot have 2 " + "different configuration '%s' and '%s'", + last_elem->str1, actcfg, last_elem->str2); + for (size_t i = 0; i < folders.size(); ++i) { + Free(const_cast<char*>(folders.get_nth_elem(i))); + } + folders.clear(); + return TPD_FAILED; } - ERROR("Required configuration is inconsistent or circular : Project '%s' cannot have 2 " - "different configuration '%s' and '%s'", - last_elem->str1, actcfg, last_elem->str2); - for (size_t i = 0; i < folders.size(); ++i) { - Free(const_cast<char*>(folders.get_nth_elem(i))); - } - folders.clear(); - return TPD_FAILED; + last_elem = last_elem->next; } - last_elem = last_elem->next; } // Collect path variables @@ -2027,8 +2029,8 @@ static tpd_result process_tpd_internal(const char *p_tpd_name, char *tpdName, co " The available targets are: 'executable', 'library'", content); } } - ProjectDescriptor* projDesc = projGenHelper.getTargetOfProject(*p_project_name); - if (projDesc) projDesc->setLibrary(*p_Lflag); + ProjectDescriptor* projDescr = projGenHelper.getTargetOfProject(*p_project_name); + if (projDescr) projDescr->setLibrary(*p_Lflag); } // Executable name (don't care unless top-level invocation) @@ -2526,8 +2528,8 @@ static tpd_result process_tpd_internal(const char *p_tpd_name, char *tpdName, co replacechar(&content); last_elem->str = content; - ProjectDescriptor* projDesc = projGenHelper.getTargetOfProject(*p_project_name); - if (projDesc) projDesc->addToLinkerLibs(last_elem->str); + ProjectDescriptor* projDescr = projGenHelper.getTargetOfProject(*p_project_name); + if (projDescr) projDescr->addToLinkerLibs(last_elem->str); } } } @@ -2559,8 +2561,8 @@ static tpd_result process_tpd_internal(const char *p_tpd_name, char *tpdName, co replacechar(&content); last_elem->str = content; - ProjectDescriptor* projDesc = projGenHelper.getTargetOfProject(*p_project_name); - if (projDesc) projDesc->addToLibSearchPaths(last_elem->str); + ProjectDescriptor* projDescr = projGenHelper.getTargetOfProject(*p_project_name); + if (projDescr) projDescr->addToLibSearchPaths(last_elem->str); } } } @@ -3136,7 +3138,7 @@ static tpd_result process_tpd_internal(const char *p_tpd_name, char *tpdName, co folders.clear(); if(free_name) { - Free((char*)p_tpd_name); + Free(const_cast<char*>(p_tpd_name)); } excluded_files.clear(); diff --git a/compiler2/xpather.h b/compiler2/xpather.h index 55af8c9da69787695fed76a010e8654f726542f0..e93420d13847e999f866ded5d291eb71036a81ef 100644 --- a/compiler2/xpather.h +++ b/compiler2/xpather.h @@ -84,7 +84,7 @@ const char* findLibraryName(const char* libraryName, const char* projName); #ifdef __cplusplus extern "C" #endif -void erase_libs(); +void erase_libs(void); #ifdef __cplusplus extern "C" @@ -124,7 +124,7 @@ boolean hasSubProject(const char* projName); #ifdef __cplusplus extern "C" #endif -void print_libs(); +void print_libs(void); #ifdef __cplusplus extern "C" diff --git a/core/ASN_CharacterString.cc b/core/ASN_CharacterString.cc index 86b989b7752fd9a077e205ec9b6c2d47de74c3ba..5b68be0b46e95d0adc7e78a3b6089b4d62c00ebc 100644 --- a/core/ASN_CharacterString.cc +++ b/core/ASN_CharacterString.cc @@ -788,7 +788,7 @@ boolean CHARACTER_STRING_identification::BER_decode_TLV(const TTCN_Typedescripto // FIXME maybe: XER_encode and decode is virtually identical to EMBEDDED_PDV int CHARACTER_STRING_identification::XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const { int encoded_length=(int)p_buf.get_len(); @@ -797,22 +797,22 @@ int CHARACTER_STRING_identification::XER_encode(const XERdescriptor_t& p_td, flavor &= XER_MASK; switch (union_selection) { case ALT_syntaxes: - field_syntaxes->XER_encode(EMBEDDED_PDV_identification_sxs_xer_, p_buf, flavor, indent, 0); + field_syntaxes->XER_encode(EMBEDDED_PDV_identification_sxs_xer_, p_buf, flavor, flavor2, indent, 0); break; case ALT_syntax: - field_syntax->XER_encode(EMBEDDED_PDV_identification_sx_xer_, p_buf, flavor, indent, 0); + field_syntax->XER_encode(EMBEDDED_PDV_identification_sx_xer_, p_buf, flavor, flavor2, indent, 0); break; case ALT_presentation__context__id: - field_presentation__context__id->XER_encode(EMBEDDED_PDV_identification_pci_xer_, p_buf, flavor, indent, 0); + field_presentation__context__id->XER_encode(EMBEDDED_PDV_identification_pci_xer_, p_buf, flavor, flavor2, indent, 0); break; case ALT_context__negotiation: - field_context__negotiation->XER_encode(EMBEDDED_PDV_identification_cn_xer_, p_buf, flavor, indent, 0); + field_context__negotiation->XER_encode(EMBEDDED_PDV_identification_cn_xer_, p_buf, flavor, flavor2,indent, 0); break; case ALT_transfer__syntax: - field_transfer__syntax->XER_encode(EMBEDDED_PDV_identification_ts_xer_, p_buf, flavor, indent, 0); + field_transfer__syntax->XER_encode(EMBEDDED_PDV_identification_ts_xer_, p_buf, flavor, flavor2, indent, 0); break; case ALT_fixed: - field_fixed->XER_encode(EMBEDDED_PDV_identification_fix_xer_, p_buf, flavor, indent, 0); + field_fixed->XER_encode(EMBEDDED_PDV_identification_fix_xer_, p_buf, flavor, flavor2, indent, 0); break; default: TTCN_EncDec_ErrorContext::error_internal("Unknown selection."); @@ -1787,14 +1787,14 @@ boolean CHARACTER_STRING_identification_syntaxes::BER_decode_TLV(const TTCN_Type } int CHARACTER_STRING_identification_syntaxes::XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const { int encoded_length=(int)p_buf.get_len(); begin_xml(p_td, p_buf, flavor, indent++, FALSE); - field_abstract.XER_encode(CHARACTER_STRING_identification_sxs_abs_xer_, p_buf, flavor, indent, 0); - field_transfer.XER_encode(CHARACTER_STRING_identification_sxs_xfr_xer_, p_buf, flavor, indent, 0); + field_abstract.XER_encode(CHARACTER_STRING_identification_sxs_abs_xer_, p_buf, flavor, flavor2, indent, 0); + field_transfer.XER_encode(CHARACTER_STRING_identification_sxs_xfr_xer_, p_buf, flavor, flavor2, indent, 0); end_xml(p_td, p_buf, flavor, --indent, FALSE); @@ -2518,14 +2518,14 @@ boolean CHARACTER_STRING_identification_context__negotiation::BER_decode_TLV(con } int CHARACTER_STRING_identification_context__negotiation::XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const { int encoded_length=(int)p_buf.get_len(); begin_xml(p_td, p_buf, flavor, indent++, FALSE); - field_presentation__context__id.XER_encode(CHARACTER_STRING_identification_pci_xer_, p_buf, flavor, indent, 0); - field_transfer__syntax .XER_encode(CHARACTER_STRING_identification_ts_xer_ , p_buf, flavor, indent, 0); + field_presentation__context__id.XER_encode(CHARACTER_STRING_identification_pci_xer_, p_buf, flavor, flavor2, indent, 0); + field_transfer__syntax .XER_encode(CHARACTER_STRING_identification_ts_xer_ , p_buf, flavor, flavor2, indent, 0); end_xml(p_td, p_buf, flavor, --indent, FALSE); @@ -3251,7 +3251,7 @@ void CHARACTER_STRING::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_ case TTCN_EncDec::CT_XER: { TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); unsigned XER_coding=va_arg(pvar, unsigned); - XER_encode(*p_td.xer,p_buf, XER_coding, 0, 0); + XER_encode(*p_td.xer,p_buf, XER_coding, 0, 0, 0); p_buf.put_c('\n'); break;} case TTCN_EncDec::CT_JSON: { @@ -3365,7 +3365,7 @@ boolean CHARACTER_STRING::BER_decode_TLV(const TTCN_Typedescriptor_t& p_td, cons } int CHARACTER_STRING::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, - unsigned int flavor, int indent, embed_values_enc_struct_t*) const + unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const { if(!is_bound()) { TTCN_EncDec_ErrorContext::error @@ -3376,10 +3376,10 @@ int CHARACTER_STRING::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf flavor &= ~XER_RECOF; // ASN.1 character string doesn't care begin_xml(p_td, p_buf, flavor, indent++, FALSE); - field_identification.XER_encode(CHARACTER_STRING_identification_xer_, p_buf, flavor, indent, 0); + field_identification.XER_encode(CHARACTER_STRING_identification_xer_, p_buf, flavor, flavor2, indent, 0); // data-value-descriptor is OPTIONAL and can never be present. // Its encoding is empty. - field_string__value .XER_encode(CHARACTER_STRING_data_value_xer_ , p_buf, flavor, indent, 0); + field_string__value .XER_encode(CHARACTER_STRING_data_value_xer_ , p_buf, flavor, flavor2, indent, 0); end_xml(p_td, p_buf, flavor, --indent, FALSE); diff --git a/core/ASN_CharacterString.hh b/core/ASN_CharacterString.hh index d53a767912de17eed0191547ddc05ed463ce0c4c..01da0231e0d8ddd971e65a9354ebb7f68be2b7d7 100644 --- a/core/ASN_CharacterString.hh +++ b/core/ASN_CharacterString.hh @@ -99,7 +99,7 @@ public: ASN_BER_TLV_t* BER_encode_TLV(const TTCN_Typedescriptor_t& p_td, unsigned p_coding) const; boolean BER_decode_TLV(const TTCN_Typedescriptor_t& p_td, const ASN_BER_TLV_t& p_tlv, unsigned L_form); int XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const; + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const; int XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t*); private: @@ -223,7 +223,7 @@ public: ASN_BER_TLV_t* BER_encode_TLV(const TTCN_Typedescriptor_t& p_td, unsigned p_coding) const; boolean BER_decode_TLV(const TTCN_Typedescriptor_t& p_td, const ASN_BER_TLV_t& p_tlv, unsigned L_form); int XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const; + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const; int XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t*); }; @@ -332,7 +332,7 @@ public: ASN_BER_TLV_t* BER_encode_TLV(const TTCN_Typedescriptor_t& p_td, unsigned p_coding) const; boolean BER_decode_TLV(const TTCN_Typedescriptor_t& p_td, const ASN_BER_TLV_t& p_tlv, unsigned L_form); int XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const; + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const; int XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t*); }; @@ -449,7 +449,7 @@ public: void decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...); ASN_BER_TLV_t* BER_encode_TLV(const TTCN_Typedescriptor_t& p_td, unsigned p_coding) const; boolean BER_decode_TLV(const TTCN_Typedescriptor_t& p_td, const ASN_BER_TLV_t& p_tlv, unsigned L_form); - int XER_encode(const XERdescriptor_t&, TTCN_Buffer&, unsigned int, int, embed_values_enc_struct_t*) const; + int XER_encode(const XERdescriptor_t&, TTCN_Buffer&, unsigned int, unsigned int, int, embed_values_enc_struct_t*) const; int XER_decode(const XERdescriptor_t&, XmlReaderWrap& reader, unsigned int, unsigned int, embed_values_dec_struct_t*); }; diff --git a/core/ASN_EmbeddedPDV.cc b/core/ASN_EmbeddedPDV.cc index 33695173a85693f4af8deac28b4038b9b6da8ae1..7d2689d7bdf7ac10f13da4013107f0798160759b 100644 --- a/core/ASN_EmbeddedPDV.cc +++ b/core/ASN_EmbeddedPDV.cc @@ -775,7 +775,7 @@ boolean EMBEDDED_PDV_identification::BER_decode_TLV(const TTCN_Typedescriptor_t& // FIXME maybe: XER_encode and decode is virtually identical to CHARACTER_STRING int EMBEDDED_PDV_identification::XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const { int indenting = !is_canonical(flavor); boolean exer = is_exer(flavor); @@ -788,22 +788,22 @@ int EMBEDDED_PDV_identification::XER_encode(const XERdescriptor_t& p_td, ++indent; switch (union_selection) { case ALT_syntaxes: - field_syntaxes->XER_encode(EMBEDDED_PDV_identification_sxs_xer_, p_buf, flavor, indent, 0);; + field_syntaxes->XER_encode(EMBEDDED_PDV_identification_sxs_xer_, p_buf, flavor, flavor2, indent, 0);; break; case ALT_syntax: - field_syntax->XER_encode(EMBEDDED_PDV_identification_sx_xer_, p_buf, flavor, indent, 0);; + field_syntax->XER_encode(EMBEDDED_PDV_identification_sx_xer_, p_buf, flavor, flavor2, indent, 0);; break; case ALT_presentation__context__id: - field_presentation__context__id->XER_encode(EMBEDDED_PDV_identification_pci_xer_, p_buf, flavor, indent, 0);; + field_presentation__context__id->XER_encode(EMBEDDED_PDV_identification_pci_xer_, p_buf, flavor, flavor2, indent, 0);; break; case ALT_context__negotiation: - field_context__negotiation->XER_encode(EMBEDDED_PDV_identification_cn_xer_, p_buf, flavor, indent, 0);; + field_context__negotiation->XER_encode(EMBEDDED_PDV_identification_cn_xer_, p_buf, flavor, flavor2, indent, 0);; break; case ALT_transfer__syntax: - field_transfer__syntax->XER_encode(EMBEDDED_PDV_identification_ts_xer_, p_buf, flavor, indent, 0);; + field_transfer__syntax->XER_encode(EMBEDDED_PDV_identification_ts_xer_, p_buf, flavor, flavor2, indent, 0);; break; case ALT_fixed: - field_fixed->XER_encode(EMBEDDED_PDV_identification_fix_xer_, p_buf, flavor, indent, 0);; + field_fixed->XER_encode(EMBEDDED_PDV_identification_fix_xer_, p_buf, flavor, flavor2, indent, 0);; break; default: TTCN_EncDec_ErrorContext::error_internal("Unknown selection."); @@ -1781,7 +1781,7 @@ boolean EMBEDDED_PDV_identification_syntaxes::BER_decode_TLV(const TTCN_Typedesc } int EMBEDDED_PDV_identification_syntaxes::XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const { int indenting = !is_canonical(flavor); boolean exer = is_exer(flavor); @@ -1792,8 +1792,8 @@ int EMBEDDED_PDV_identification_syntaxes::XER_encode(const XERdescriptor_t& p_td p_buf.put_s((size_t)p_td.namelens[exer] - 1 + indenting, (const unsigned char*)p_td.names[exer]); ++indent; - field_abstract.XER_encode(EMBEDDED_PDV_identification_sxs_abs_xer_, p_buf, flavor, indent, 0); - field_transfer.XER_encode(EMBEDDED_PDV_identification_sxs_xfr_xer_, p_buf, flavor, indent, 0); + field_abstract.XER_encode(EMBEDDED_PDV_identification_sxs_abs_xer_, p_buf, flavor, flavor2, indent, 0); + field_transfer.XER_encode(EMBEDDED_PDV_identification_sxs_xfr_xer_, p_buf, flavor, flavor2, indent, 0); if (indenting) do_indent(p_buf, --indent); p_buf.put_c('<'); @@ -2522,7 +2522,7 @@ boolean EMBEDDED_PDV_identification_context__negotiation::BER_decode_TLV(const T } int EMBEDDED_PDV_identification_context__negotiation::XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const { int indenting = !is_canonical(flavor); boolean exer = is_exer(flavor); @@ -2533,8 +2533,8 @@ int EMBEDDED_PDV_identification_context__negotiation::XER_encode(const XERdescri p_buf.put_s((size_t)p_td.namelens[exer] - 1 + indenting, (const unsigned char*)p_td.names[exer]); ++indent; - field_presentation__context__id.XER_encode(EMBEDDED_PDV_identification_cn_pci_xer_, p_buf, flavor, indent, 0); - field_transfer__syntax .XER_encode(EMBEDDED_PDV_identification_cn_tsx_xer_, p_buf, flavor, indent, 0); + field_presentation__context__id.XER_encode(EMBEDDED_PDV_identification_cn_pci_xer_, p_buf, flavor, flavor2, indent, 0); + field_transfer__syntax .XER_encode(EMBEDDED_PDV_identification_cn_tsx_xer_, p_buf, flavor, flavor2, indent, 0); if (indenting) do_indent(p_buf, --indent); p_buf.put_c('<'); @@ -3263,7 +3263,7 @@ void EMBEDDED_PDV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, case TTCN_EncDec::CT_XER: { TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); unsigned XER_coding=va_arg(pvar, unsigned); - XER_encode(*p_td.xer,p_buf, XER_coding, 0, 0); + XER_encode(*p_td.xer,p_buf, XER_coding, 0, 0, 0); break;} case TTCN_EncDec::CT_JSON: { TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); @@ -3376,7 +3376,7 @@ boolean EMBEDDED_PDV::BER_decode_TLV(const TTCN_Typedescriptor_t& p_td, const AS } int EMBEDDED_PDV::XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const { + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const { if(!is_bound()) { TTCN_EncDec_ErrorContext::error (TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value."); @@ -3390,13 +3390,13 @@ int EMBEDDED_PDV::XER_encode(const XERdescriptor_t& p_td, p_buf.put_s((size_t)p_td.namelens[exer] - 1 + indenting, (const unsigned char*)p_td.names[exer]); flavor &= XER_MASK; ++indent; - field_identification .XER_encode(EMBEDDED_PDV_identification_xer_ , p_buf, flavor, indent, 0); + field_identification .XER_encode(EMBEDDED_PDV_identification_xer_ , p_buf, flavor, flavor2, indent, 0); if (field_data__value__descriptor.is_value()) { TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_INVAL_MSG, "data-value-descriptor not allowed for EMBEDDED PDV"); } - field_data__value__descriptor.XER_encode(EMBEDDED_PDV_data_value_descriptor_xer_, p_buf, flavor, indent, 0); - field_data__value .XER_encode(EMBEDDED_PDV_data_value_xer_ , p_buf, flavor, indent, 0); + field_data__value__descriptor.XER_encode(EMBEDDED_PDV_data_value_descriptor_xer_, p_buf, flavor, flavor2, indent, 0); + field_data__value .XER_encode(EMBEDDED_PDV_data_value_xer_ , p_buf, flavor, flavor2, indent, 0); if (indenting) do_indent(p_buf, --indent); p_buf.put_c('<'); diff --git a/core/ASN_EmbeddedPDV.hh b/core/ASN_EmbeddedPDV.hh index 8b962c974ea1d0dbec09b70362fe074a2c5dc9b5..d721ace9f6de896f35a9baa9560be94ac21ab783 100644 --- a/core/ASN_EmbeddedPDV.hh +++ b/core/ASN_EmbeddedPDV.hh @@ -99,7 +99,7 @@ public: ASN_BER_TLV_t* BER_encode_TLV(const TTCN_Typedescriptor_t& p_td, unsigned p_coding) const; boolean BER_decode_TLV(const TTCN_Typedescriptor_t& p_td, const ASN_BER_TLV_t& p_tlv, unsigned L_form); int XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const; + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const; int XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t*); private: @@ -222,7 +222,7 @@ public: //void decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...); ASN_BER_TLV_t* BER_encode_TLV(const TTCN_Typedescriptor_t& p_td, unsigned p_coding) const; boolean BER_decode_TLV(const TTCN_Typedescriptor_t& p_td, const ASN_BER_TLV_t& p_tlv, unsigned L_form); - int XER_encode(const XERdescriptor_t&, TTCN_Buffer&, unsigned int, int, embed_values_enc_struct_t*) const; + int XER_encode(const XERdescriptor_t&, TTCN_Buffer&, unsigned int, unsigned int, int, embed_values_enc_struct_t*) const; int XER_decode(const XERdescriptor_t&, XmlReaderWrap& reader, unsigned int, unsigned int, embed_values_dec_struct_t*); }; @@ -329,7 +329,7 @@ public: //void decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...); ASN_BER_TLV_t* BER_encode_TLV(const TTCN_Typedescriptor_t& p_td, unsigned p_coding) const; boolean BER_decode_TLV(const TTCN_Typedescriptor_t& p_td, const ASN_BER_TLV_t& p_tlv, unsigned L_form); - int XER_encode(const XERdescriptor_t&, TTCN_Buffer&, unsigned int, int, embed_values_enc_struct_t*) const; + int XER_encode(const XERdescriptor_t&, TTCN_Buffer&, unsigned int, unsigned int, int, embed_values_enc_struct_t*) const; int XER_decode(const XERdescriptor_t&, XmlReaderWrap& reader, unsigned int, unsigned int, embed_values_dec_struct_t*); }; @@ -442,7 +442,7 @@ public: void decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...); ASN_BER_TLV_t* BER_encode_TLV(const TTCN_Typedescriptor_t& p_td, unsigned p_coding) const; boolean BER_decode_TLV(const TTCN_Typedescriptor_t& p_td, const ASN_BER_TLV_t& p_tlv, unsigned L_form); - int XER_encode(const XERdescriptor_t&, TTCN_Buffer&, unsigned int, int, embed_values_enc_struct_t*) const; + int XER_encode(const XERdescriptor_t&, TTCN_Buffer&, unsigned int, unsigned int, int, embed_values_enc_struct_t*) const; int XER_decode(const XERdescriptor_t&, XmlReaderWrap&, unsigned int, unsigned int, embed_values_dec_struct_t*); }; diff --git a/core/ASN_External.cc b/core/ASN_External.cc index 9eacbc8e43ffc1295808da6d03cfe67f65a88c0c..7a5d4c27fe98f38dcff03e247e406a5a2e6d47a1 100644 --- a/core/ASN_External.cc +++ b/core/ASN_External.cc @@ -105,7 +105,7 @@ namespace { /* anonymous namespace */ inline union_selection_type get_selection() const { return union_selection; } #ifdef TITAN_RUNTIME_2 void set_param(Module_Param& /*param*/) { TTCN_error("Internal error: EXTERNALtransfer_encoding::set_param() called."); } - Module_Param* get_param(Module_Param_Name& param_name) const { TTCN_error("Internal error: EXTERNALtransfer_encoding::get_param() called."); } + Module_Param* get_param(Module_Param_Name& /*param_name*/) const { TTCN_error("Internal error: EXTERNALtransfer_encoding::get_param() called."); } void encode_text(Text_Buf& /*text_buf*/) const { TTCN_error("Internal error: EXTERNALtransfer_encoding::encode_text() called."); } void decode_text(Text_Buf& /*text_buf*/) { TTCN_error("Internal error: EXTERNALtransfer_encoding::decode_text() called."); } boolean is_bound() const { return union_selection!=UNBOUND_VALUE; } @@ -117,7 +117,7 @@ namespace { /* anonymous namespace */ ASN_BER_TLV_t* BER_encode_TLV(const TTCN_Typedescriptor_t& p_td, unsigned p_coding) const; boolean BER_decode_TLV(const TTCN_Typedescriptor_t& p_td, const ASN_BER_TLV_t& p_tlv, unsigned L_form); int XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const; + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const; int XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t*); private: @@ -161,7 +161,7 @@ namespace { /* anonymous namespace */ {return field_encoding;} #ifdef TITAN_RUNTIME_2 void set_param(Module_Param& /*param*/) { TTCN_error("Internal error: EXTERNALtransfer::set_param() called."); } - Module_Param* get_param(Module_Param_Name& param_name) const { TTCN_error("Internal error: EXTERNALtransfer::get_param() called."); } + Module_Param* get_param(Module_Param_Name& /*param_name*/) const { TTCN_error("Internal error: EXTERNALtransfer::get_param() called."); } void encode_text(Text_Buf& /*text_buf*/) const { TTCN_error("Internal error: EXTERNALtransfer::encode_text() called."); } void decode_text(Text_Buf& /*text_buf*/) { TTCN_error("Internal error: EXTERNALtransfer::decode_text() called."); } boolean is_bound() const { TTCN_error("Internal error: EXTERNALtransfer::is_bound() called."); } @@ -175,7 +175,7 @@ namespace { /* anonymous namespace */ ASN_BER_TLV_t* BER_encode_TLV(const TTCN_Typedescriptor_t& p_td, unsigned p_coding) const; boolean BER_decode_TLV(const TTCN_Typedescriptor_t& p_td, const ASN_BER_TLV_t& p_tlv, unsigned L_form); int XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const; + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const; int XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t*); }; @@ -414,7 +414,7 @@ namespace { /* anonymous namespace */ } int EXTERNALtransfer_encoding::XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const { int indenting = !is_canonical(flavor); boolean exer = is_exer(flavor); @@ -427,13 +427,13 @@ namespace { /* anonymous namespace */ ++indent; switch (union_selection) { case ALT_single__ASN1__type: - field_single__ASN1__type->XER_encode(EXTERNAL_encoding_singleASN_xer_, p_buf, flavor, indent, 0); + field_single__ASN1__type->XER_encode(EXTERNAL_encoding_singleASN_xer_, p_buf, flavor, flavor2, indent, 0); break; case ALT_octet__aligned: - field_octet__aligned ->XER_encode(EXTERNAL_encoding_octet_aligned_xer_, p_buf, flavor, indent, 0); + field_octet__aligned ->XER_encode(EXTERNAL_encoding_octet_aligned_xer_, p_buf, flavor, flavor2, indent, 0); break; case ALT_arbitrary: - field_arbitrary ->XER_encode(EXTERNAL_encoding_arbitrary_xer_, p_buf, flavor, indent, 0); + field_arbitrary ->XER_encode(EXTERNAL_encoding_arbitrary_xer_, p_buf, flavor, flavor2, indent, 0); break; case UNBOUND_VALUE: TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, @@ -571,7 +571,7 @@ namespace { /* anonymous namespace */ } int EXTERNALtransfer::XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const { int indenting = !is_canonical(flavor); boolean exer = is_exer(flavor); @@ -582,10 +582,10 @@ namespace { /* anonymous namespace */ p_buf.put_s((size_t)p_td.namelens[exer] - 1 + indenting, (const unsigned char*)p_td.names[exer]); ++indent; - field_direct__reference .XER_encode(EXTERNAL_direct_reference_xer_ , p_buf, flavor, indent, 0); - field_indirect__reference .XER_encode(EXTERNAL_indirect_reference_xer_ , p_buf, flavor, indent, 0); - field_data__value__descriptor.XER_encode(EXTERNAL_data_value_descriptor_xer_, p_buf, flavor, indent, 0); - field_encoding .XER_encode(EXTERNAL_encoding_xer_ , p_buf, flavor, indent, 0); + field_direct__reference .XER_encode(EXTERNAL_direct_reference_xer_ , p_buf, flavor, flavor2, indent, 0); + field_indirect__reference .XER_encode(EXTERNAL_indirect_reference_xer_ , p_buf, flavor, flavor2, indent, 0); + field_data__value__descriptor.XER_encode(EXTERNAL_data_value_descriptor_xer_, p_buf, flavor, flavor2, indent, 0); + field_encoding .XER_encode(EXTERNAL_encoding_xer_ , p_buf, flavor, flavor2, indent, 0); if (indenting) do_indent(p_buf, --indent); p_buf.put_c('<'); @@ -716,7 +716,7 @@ boolean EXTERNAL::BER_decode_TLV(const TTCN_Typedescriptor_t& p_td, const ASN_BE } int EXTERNAL::XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const { if(!is_bound()) { TTCN_EncDec_ErrorContext::error @@ -724,7 +724,7 @@ int EXTERNAL::XER_encode(const XERdescriptor_t& p_td, } EXTERNALtransfer xfer; xfer.load(*this); - return xfer.XER_encode(p_td, p_buf, flavor, indent, 0); + return xfer.XER_encode(p_td, p_buf, flavor, flavor2, indent, 0); } int EXTERNAL::XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, @@ -3470,7 +3470,7 @@ void EXTERNAL::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTC case TTCN_EncDec::CT_XER: { TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); unsigned XER_coding=va_arg(pvar, unsigned); - XER_encode(*p_td.xer, p_buf, XER_coding, 0, 0); + XER_encode(*p_td.xer, p_buf, XER_coding, 0, 0, 0); break;} case TTCN_EncDec::CT_JSON: { TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); diff --git a/core/ASN_External.hh b/core/ASN_External.hh index 5ff895ea1bc792a3cd222f7783c861334e333a15..e4cc41ceb16a4a784a1b7e8f5b1c53af446872c2 100644 --- a/core/ASN_External.hh +++ b/core/ASN_External.hh @@ -422,7 +422,7 @@ public: ASN_BER_TLV_t* BER_encode_TLV(const TTCN_Typedescriptor_t& p_td, unsigned p_coding) const; boolean BER_decode_TLV(const TTCN_Typedescriptor_t& p_td, const ASN_BER_TLV_t& p_tlv, unsigned L_form); int XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const; + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const; int XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t*); }; diff --git a/core/ASN_Null.cc b/core/ASN_Null.cc index 539373b19ac7fb20ed0f35b2ea72e0c4fe956a16..7922b39b2b8490e9fff1c9b83d9e42f89f08252e 100644 --- a/core/ASN_Null.cc +++ b/core/ASN_Null.cc @@ -136,7 +136,7 @@ void ASN_NULL::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, case TTCN_EncDec::CT_XER: { TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); unsigned XER_coding=va_arg(pvar, unsigned); - XER_encode(*p_td.xer, p_buf, XER_coding, 0, 0); + XER_encode(*p_td.xer, p_buf, XER_coding, 0, 0, 0); break;} case TTCN_EncDec::CT_JSON: { TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); @@ -234,7 +234,7 @@ boolean ASN_NULL::BER_decode_TLV(const TTCN_Typedescriptor_t& p_td, } int ASN_NULL::XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int /*flavor2*/, int indent, embed_values_enc_struct_t*) const { boolean exer = is_exer(flavor); TTCN_EncDec_ErrorContext ec("While XER encoding NULL type: "); diff --git a/core/ASN_Null.hh b/core/ASN_Null.hh index 58b8874abf2b492a0a7ad2cc08b5dfc3035f8394..753ba1bf7235e7619832d270d97f765873902901 100644 --- a/core/ASN_Null.hh +++ b/core/ASN_Null.hh @@ -83,7 +83,7 @@ public: boolean BER_decode_TLV(const TTCN_Typedescriptor_t& p_td, const ASN_BER_TLV_t& p_tlv, unsigned L_form); int XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const; + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const; int XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t*); diff --git a/core/Basetype.cc b/core/Basetype.cc index 0576c03d26d335fc6a3174ba46e4c292af00db34..754c628eccfcc5a30b98d3d50a2a9c42580a364d 100644 --- a/core/Basetype.cc +++ b/core/Basetype.cc @@ -90,7 +90,7 @@ void Base_Type::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, if(!p_td.xer) TTCN_EncDec_ErrorContext::error_internal( "No XER descriptor available for type '%s'.", p_td.name); unsigned XER_coding=va_arg(pvar, unsigned); - XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0); + XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0); p_buf.put_c('\n'); break;} case TTCN_EncDec::CT_JSON: { @@ -232,7 +232,7 @@ static const cbyte empty_tag_end[4] = "/>\n"; int Base_Type::begin_xml(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, unsigned int& flavor, int indent, boolean empty, - collector_fn collector, const char *type_atr) const + collector_fn collector, const char *type_atr, unsigned int flavor2) const { const int indenting = !is_canonical(flavor); const int exer = is_exer(flavor); @@ -276,7 +276,7 @@ int Base_Type::begin_xml(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, char **collected_ns = NULL; boolean def_ns = FALSE; if (namespaces_needed) { - collected_ns = (this->*collector)(p_td, num_collected, def_ns); + collected_ns = (this->*collector)(p_td, num_collected, def_ns, flavor2); } p_buf.put_s((size_t)p_td.namelens[exer] - 2, (cbyte*)p_td.names[exer]); @@ -322,6 +322,10 @@ int Base_Type::begin_xml(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, (p_buf.get_data()[buf_used] == '\n')) { p_buf.increase_length((size_t)-1); // back up over the newline omit_tag = -1; // to help fix HO85831 + } else if (exer && (p_td.xer_bits & USE_TYPE_ATTR) && type_atr && (flavor2 & FROM_UNION_USETYPE)) { + p_buf.increase_length((size_t)-1); // back up over the endtag + p_buf.put_s(mstrlen(const_cast<char*>(type_atr)), (cbyte*)type_atr); + p_buf.put_c('>'); } } @@ -982,7 +986,7 @@ int Base_Type::RAW_decode(const TTCN_Typedescriptor_t& p_td, } int Base_Type::XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer&, unsigned int, int, embed_values_enc_struct_t*) const + TTCN_Buffer&, unsigned int, unsigned int, int, embed_values_enc_struct_t*) const { TTCN_error("XER encoding requested for type '%-.*s' which has no" " XER encoding method.", p_td.namelens[0]-2, p_td.names[0]); @@ -1011,14 +1015,14 @@ int Base_Type::JSON_decode(const TTCN_Typedescriptor_t& p_td, JSON_Tokenizer&, b } boolean Base_Type::can_start(const char *name, const char *uri, - XERdescriptor_t const& xd, unsigned int flavor) + XERdescriptor_t const& xd, unsigned int flavor, unsigned int /*flavor2*/) { boolean e_xer = is_exer(flavor); // Check the name. If EXER, check the namespace too. return check_name(name, xd, e_xer) && (!e_xer || check_namespace(uri, xd)); } -char ** Base_Type::collect_ns(const XERdescriptor_t& p_td, size_t& num, bool& def_ns) const +char ** Base_Type::collect_ns(const XERdescriptor_t& p_td, size_t& num, bool& def_ns, unsigned int /* flavor */) const { def_ns = FALSE; char *tmp = NULL; diff --git a/core/Basetype.hh b/core/Basetype.hh index 29c0412d69e6fecf28b7b4ebb5d997ee820064e6..71d2d8213421e66fe86cf50059f04971309e77b3 100644 --- a/core/Basetype.hh +++ b/core/Basetype.hh @@ -167,7 +167,7 @@ public: * FALSE otherwise. */ static boolean can_start(const char *name, const char *uri, - XERdescriptor_t const& xd, unsigned int flavor); + XERdescriptor_t const& xd, unsigned int flavor, unsigned int flavor2); #ifdef TITAN_RUNTIME_2 /** Initialize this object (or one of its fields/elements) with a @@ -481,12 +481,12 @@ public: * @return number of bytes written into the buffer */ VIRTUAL_IF_RUNTIME_2 int XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t* emb_val) const; + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t* emb_val) const; #ifdef TITAN_RUNTIME_2 virtual int XER_encode_negtest(const Erroneous_descriptor_t* /*p_err_descr*/, const XERdescriptor_t& /*p_td*/, TTCN_Buffer& /*p_buf*/, - unsigned int /*flavor*/, int /*indent*/, embed_values_enc_struct_t* /*emb_val*/) const; + unsigned int /*flavor*/, unsigned int /*flavor2*/, int /*indent*/, embed_values_enc_struct_t* /*emb_val*/) const; #endif /** Decode the current object from the supplied buffer. @@ -536,7 +536,7 @@ public: * (the space at start allows direct concatenation of the strings) */ VIRTUAL_IF_RUNTIME_2 char ** collect_ns(const XERdescriptor_t& p_td, - size_t& num, bool& def_ns) const; + size_t& num, bool& def_ns, unsigned int flavor = 0) const; /** Copy strings from @p new_namespaces to @p collected_ns, * discarding duplicates. @@ -555,7 +555,7 @@ public: char **new_namespaces, size_t num_new); typedef char** (Base_Type::*collector_fn) - (const XERdescriptor_t& p_td, size_t& num, bool& def_ns) const; + (const XERdescriptor_t& p_td, size_t& num, bool& def_ns, unsigned int flavor) const; /** Start writing the XML representation * @@ -576,7 +576,7 @@ public: */ VIRTUAL_IF_RUNTIME_2 int begin_xml(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, unsigned int& flavor, int indent, boolean empty, - collector_fn collector = &Base_Type::collect_ns, const char *type_atr = NULL) const; + collector_fn collector = &Base_Type::collect_ns, const char *type_atr = NULL, unsigned int flavor2 = 0) const; /** Finish the XML representation. * * @param[in] p_td XER descriptor @@ -815,13 +815,13 @@ public: virtual int TEXT_decode(const TTCN_Typedescriptor_t&, TTCN_Buffer&, Limit_Token_List&, boolean no_err=FALSE, boolean first_call=TRUE); virtual int XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, - unsigned int flavor, int indent, embed_values_enc_struct_t*) const; + unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const; virtual int XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr, - const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, unsigned flavor, int indent, embed_values_enc_struct_t*) const; + const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, unsigned flavor, unsigned flavor2, int indent, embed_values_enc_struct_t*) const; /// Helper for XER_encode_negtest int encode_element(int i, const XERdescriptor_t& p_td, const Erroneous_values_t* err_vals, const Erroneous_descriptor_t* emb_descr, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t* emb_val) const; + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t* emb_val) const; virtual int XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, unsigned int, unsigned int, embed_values_dec_struct_t*); virtual boolean isXerAttribute() const; virtual boolean isXmlValueList() const; @@ -848,9 +848,9 @@ public: /** Constant unbound element - return this instead of NULL in constant functions */ virtual const Base_Type* get_unbound_elem() const = 0; - virtual char ** collect_ns(const XERdescriptor_t& p_td, size_t& num, bool& def_ns) const; + virtual char ** collect_ns(const XERdescriptor_t& p_td, size_t& num, bool& def_ns, unsigned int flavor) const; virtual boolean can_start_v(const char *name, const char *prefix, - XERdescriptor_t const& xd, unsigned int flavor) = 0; + XERdescriptor_t const& xd, unsigned int flavor, unsigned int flavor2) = 0; void set_err_descr(Erroneous_descriptor_t* p_err_descr) { err_descr=p_err_descr; } Erroneous_descriptor_t* get_err_descr() const { return err_descr; } @@ -958,10 +958,10 @@ public: virtual int TEXT_decode(const TTCN_Typedescriptor_t&, TTCN_Buffer&, Limit_Token_List&, boolean no_err=FALSE, boolean first_call=TRUE); virtual int XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, - unsigned int flavor, int indent, embed_values_enc_struct_t*) const; + unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const; virtual int XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr, const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, - unsigned int flavor, int indent, embed_values_enc_struct_t*) const; + unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const; virtual int XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, unsigned int, unsigned int, embed_values_dec_struct_t*); /// @{ @@ -969,9 +969,9 @@ public: virtual int get_xer_num_attr() const { return 0; /* default */ } virtual const XERdescriptor_t* xer_descr(int field_index) const; /// @} - virtual char ** collect_ns(const XERdescriptor_t& p_td, size_t& num, bool& def_ns) const; + virtual char ** collect_ns(const XERdescriptor_t& p_td, size_t& num, bool& def_ns, unsigned int flavor = 0) const; virtual boolean can_start_v(const char *name, const char *prefix, - XERdescriptor_t const& xd, unsigned int flavor) = 0; + XERdescriptor_t const& xd, unsigned int flavor, unsigned int flavor2) = 0; /** Encodes accordingly to the JSON encoding rules. * Returns the length of the encoded data. */ @@ -991,7 +991,7 @@ public: private: /// Helper for XER_encode_negtest int encode_field(int i, const Erroneous_values_t* err_vals, const Erroneous_descriptor_t* emb_descr, - TTCN_Buffer& p_buf, unsigned int sub_flavor, int indent, embed_values_enc_struct_t* emb_val) const; + TTCN_Buffer& p_buf, unsigned int sub_flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t* emb_val) const; }; //////////////////////////////////////////////////////////////////////////////// @@ -1038,7 +1038,7 @@ public: virtual int TEXT_decode(const TTCN_Typedescriptor_t&, TTCN_Buffer&, Limit_Token_List&, boolean no_err=FALSE, boolean first_call=TRUE); virtual int XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, - unsigned int flavor, int indent, embed_values_enc_struct_t*) const; + unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const; virtual int XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, unsigned int, unsigned int, embed_values_dec_struct_t*); diff --git a/core/Bitstring.cc b/core/Bitstring.cc index 1ff0df731a77fa37caffa3157273df7d58c132e4..51d1a181d05cda4ebc3f6491e55afe28bbf6a398 100644 --- a/core/Bitstring.cc +++ b/core/Bitstring.cc @@ -33,6 +33,7 @@ #include "Logger.hh" #include "Encdec.hh" #include "Addfunc.hh" +#include "Optional.hh" #include "../common/dbgnew.hh" @@ -670,7 +671,7 @@ void BITSTRING::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, case TTCN_EncDec::CT_XER: { TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); unsigned XER_coding=va_arg(pvar, unsigned); - XER_encode(*p_td.xer, p_buf, XER_coding, 0, 0); + XER_encode(*p_td.xer, p_buf, XER_coding, 0, 0, 0); break;} case TTCN_EncDec::CT_JSON: { TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); @@ -1066,7 +1067,7 @@ int BITSTRING::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& buff, } int BITSTRING::XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int /*flavor2*/, int indent, embed_values_enc_struct_t*) const { if(!is_bound()) { TTCN_EncDec_ErrorContext::error @@ -1193,7 +1194,7 @@ int BITSTRING::JSON_decode(const TTCN_Typedescriptor_t& p_td, JSON_Tokenizer& p_ boolean use_default = p_td.json->default_value && 0 == p_tok.get_buffer_length(); if (use_default) { // No JSON data in the buffer -> use default value - value = (char*)p_td.json->default_value; + value = const_cast<char*>(p_td.json->default_value); value_len = strlen(value); } else { dec_len = p_tok.get_next_token(&token, &value, &value_len); diff --git a/core/Bitstring.hh b/core/Bitstring.hh index 98cf7b4d663df874c869125705a2ca4486403a0e..8f0d74e20f550b54e92e0219b908421bcd5e4cfe 100644 --- a/core/Bitstring.hh +++ b/core/Bitstring.hh @@ -27,9 +27,9 @@ #include "Types.h" #include "Basetype.hh" #include "Template.hh" -#include "Optional.hh" #include "RAW.hh" #include "BER.hh" +#include "Error.hh" class INTEGER; class HEXSTRING; @@ -39,6 +39,9 @@ class BITSTRING_ELEMENT; class Module_Param; +template<typename T> +class OPTIONAL; + /** bitstring value class. * Refcounted copy-on-write implementation */ class BITSTRING : public Base_Type { @@ -190,7 +193,7 @@ public: int RAW_decode(const TTCN_Typedescriptor_t& , TTCN_Buffer&, int, raw_order_t, boolean no_err=FALSE, int sel_field=-1, boolean first_call=TRUE); - int XER_encode(const XERdescriptor_t&, TTCN_Buffer&, unsigned int, int, embed_values_enc_struct_t*) const; + int XER_encode(const XERdescriptor_t&, TTCN_Buffer&, unsigned int, unsigned int, int, embed_values_enc_struct_t*) const; int XER_decode(const XERdescriptor_t&, XmlReaderWrap& reader, unsigned int, unsigned int, embed_values_dec_struct_t*); /** Encodes accordingly to the JSON encoding rules. diff --git a/core/Boolean.cc b/core/Boolean.cc index 2a03f93338c7395fa0115093d9380da1a1db2841..3ce5c997b24af458b80811de7e26fbf472d63c21 100644 --- a/core/Boolean.cc +++ b/core/Boolean.cc @@ -36,6 +36,7 @@ #include "TEXT.hh" #include "Charstring.hh" #include "XmlReader.hh" +#include "Optional.hh" static const Token_Match boolean_true_match("^(true).*$",TRUE); static const Token_Match boolean_false_match("^(false).*$",TRUE); @@ -237,7 +238,7 @@ void BOOLEAN::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, case TTCN_EncDec::CT_XER: { TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); unsigned XER_coding=va_arg(pvar, unsigned); - XER_encode(*p_td.xer, p_buf, XER_coding, 0, 0); + XER_encode(*p_td.xer, p_buf, XER_coding, 0, 0, 0); break;} case TTCN_EncDec::CT_JSON: { TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); @@ -612,7 +613,7 @@ int BOOLEAN::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& buff, } int BOOLEAN::XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int /*flavor2*/, int indent, embed_values_enc_struct_t*) const { if(!is_bound()) { TTCN_EncDec_ErrorContext::error diff --git a/core/Boolean.hh b/core/Boolean.hh index e0812f667fa263e6e2756e02beb9ee43f262112b..f7c30f388516d9b999fe22cdf31452ce87f3bf18 100644 --- a/core/Boolean.hh +++ b/core/Boolean.hh @@ -25,11 +25,13 @@ #include "Types.h" #include "Basetype.hh" #include "Template.hh" -#include "Optional.hh" #include "Error.hh" class Module_Param; +template<typename T> +class OPTIONAL; + class BOOLEAN : public Base_Type { friend class BOOLEAN_template; @@ -117,7 +119,7 @@ public: int TEXT_decode(const TTCN_Typedescriptor_t&, TTCN_Buffer&, Limit_Token_List&, boolean no_err=FALSE, boolean first_call=TRUE); int XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const; + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const; int XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t*); diff --git a/core/Charstring.cc b/core/Charstring.cc index f72ce5d72bf57209d89a0f34db74187e7b544300..c737a666587e8b356e1f21c97b4a3f851b6e1e7d 100644 --- a/core/Charstring.cc +++ b/core/Charstring.cc @@ -806,7 +806,7 @@ void CHARSTRING::encode(const TTCN_Typedescriptor_t& p_td, case TTCN_EncDec::CT_XER: { TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); unsigned XER_coding=va_arg(pvar, unsigned); - XER_encode(*p_td.xer, p_buf, XER_coding, 0, 0); + XER_encode(*p_td.xer, p_buf, XER_coding, 0, 0, 0); p_buf.put_c('\n'); break;} case TTCN_EncDec::CT_JSON: { @@ -1229,7 +1229,7 @@ extern const char cb64[]= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; int CHARSTRING::XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int /*flavor2*/, int indent, embed_values_enc_struct_t*) const { if(!is_bound()) { TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, diff --git a/core/Charstring.hh b/core/Charstring.hh index 7ab2d50fa918eb70dac3f81f6128bb0cdd6807a6..522c07204d6962287c99e412dbac4ba6df345c52 100644 --- a/core/Charstring.hh +++ b/core/Charstring.hh @@ -234,7 +234,7 @@ public: TTCN_Buffer&) const; int TEXT_decode(const TTCN_Typedescriptor_t&, TTCN_Buffer&, Limit_Token_List&, boolean no_err=FALSE, boolean first_call=TRUE); - int XER_encode(const XERdescriptor_t&, TTCN_Buffer&, unsigned int, int, embed_values_enc_struct_t*) const; + int XER_encode(const XERdescriptor_t&, TTCN_Buffer&, unsigned int, unsigned int, int, embed_values_enc_struct_t*) const; int XER_decode(const XERdescriptor_t&, XmlReaderWrap& reader, unsigned int, unsigned int, embed_values_dec_struct_t*); /** Returns the charstring in the format a string would appear in C or TTCN-3 code. diff --git a/core/Component.hh b/core/Component.hh index e2a7df793ba96279735bf8b81190900e5cfca5b0..754e0269a668d3983054c838fd0fd9c86bdf267a 100644 --- a/core/Component.hh +++ b/core/Component.hh @@ -22,10 +22,12 @@ #include "Types.h" #include "Basetype.hh" #include "Template.hh" -#include "Optional.hh" class Module_Param; +template<typename T> +class OPTIONAL; + // value class for all component types class COMPONENT : public Base_Type { diff --git a/core/DebuggerUI.cc b/core/DebuggerUI.cc index 42675f5e17803c4b0cde0bd5d76c4440c1b417bf..0e24f5dbe8dd3da46483e6019bc736fa7d8abe34 100644 --- a/core/DebuggerUI.cc +++ b/core/DebuggerUI.cc @@ -259,7 +259,7 @@ void TTCN_Debugger_UI::read_loop() // EOF was received -> exit all puts("exit all"); char** args = new char*[1]; - args[0] = (char*)"all"; + args[0] = const_cast<char*>("all"); ttcn3_debugger.execute_command(D_EXIT, 1, args); delete [] args; } diff --git a/core/Default.cc b/core/Default.cc index bd903f04e2204d2645d273e3e8ea0aa2de9deb65..f6af3dcaa3a7c4a55c534af02a82f4a550ddc035 100644 --- a/core/Default.cc +++ b/core/Default.cc @@ -25,6 +25,7 @@ #include "Logger.hh" #include "Error.hh" #include "TitanLoggerApi.hh" +#include "Optional.hh" #include "../common/dbgnew.hh" diff --git a/core/Default.hh b/core/Default.hh index a24e21e1b5812013b079a4cd144f0132939f5f13..2c5b16246dbe6af92b272d0a2107fe30852f5e7d 100644 --- a/core/Default.hh +++ b/core/Default.hh @@ -22,11 +22,13 @@ #include "Types.h" #include "Basetype.hh" #include "Template.hh" -#include "Optional.hh" class Text_Buf; class Module_Param; +template<typename T> +class OPTIONAL; + class Default_Base { friend class TTCN_Default; friend class DEFAULT; diff --git a/core/Encdec.cc b/core/Encdec.cc index 52ad6a15454c3b90a529a719bad5bb1cbe0eba95..2e08a0690852d2a1956c5a7638ed7db4c600a091 100644 --- a/core/Encdec.cc +++ b/core/Encdec.cc @@ -27,6 +27,7 @@ #include "RAW.hh" #include "Error.hh" #include "Logger.hh" +#include "string.h" const TTCN_EncDec::error_behavior_t TTCN_EncDec::default_error_behavior[TTCN_EncDec::ET_ALL] = { diff --git a/core/Float.cc b/core/Float.cc index 3169c5a2d1eadfbdd72607b4e7e1ca54b5dc8174..79331f91aa19747065e07a252484650eeb53da29 100644 --- a/core/Float.cc +++ b/core/Float.cc @@ -369,7 +369,7 @@ void FLOAT::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, case TTCN_EncDec::CT_XER: { TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); unsigned XER_coding=va_arg(pvar, unsigned); - XER_encode(*p_td.xer, p_buf, XER_coding, 0, 0); + XER_encode(*p_td.xer, p_buf, XER_coding, 0, 0, 0); break;} case TTCN_EncDec::CT_JSON: { TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); @@ -848,7 +848,7 @@ const char* XER_NEG_INF_STR = "-INF"; const char* XER_NAN_STR = "NaN"; int FLOAT::XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int /*flavor2*/, int indent, embed_values_enc_struct_t*) const { if(!is_bound()) { TTCN_EncDec_ErrorContext::error( diff --git a/core/Float.hh b/core/Float.hh index 77a1f434a7b0af7273741b313d99628605ed8555..9755e7f5ad92930885497ca397ac16b38bcdfe59 100644 --- a/core/Float.hh +++ b/core/Float.hh @@ -150,7 +150,7 @@ public: int sel_field=-1, boolean first_call=TRUE); int XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const; + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const; int XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t*); diff --git a/core/Hexstring.cc b/core/Hexstring.cc index d9dde38c99e27b3801f22252d486ea92e1fd7339..fb122287e08aed6706bc41ef2ca855e522259ee8 100644 --- a/core/Hexstring.cc +++ b/core/Hexstring.cc @@ -32,6 +32,7 @@ #include "Encdec.hh" #include "RAW.hh" #include "Addfunc.hh" +#include "Optional.hh" #include "../common/dbgnew.hh" @@ -681,7 +682,7 @@ void HEXSTRING::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, case TTCN_EncDec::CT_XER: { TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); unsigned XER_coding=va_arg(pvar, unsigned); - XER_encode(*p_td.xer, p_buf, XER_coding, 0, 0); + XER_encode(*p_td.xer, p_buf, XER_coding, 0, 0, 0); break;} case TTCN_EncDec::CT_JSON: { TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); @@ -848,7 +849,7 @@ extern char base64_decoder_table[256]; extern const char cb64[]; int HEXSTRING::XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int /*flavor2*/, int indent, embed_values_enc_struct_t*) const { if(!is_bound()) { TTCN_EncDec_ErrorContext::error @@ -1083,7 +1084,7 @@ int HEXSTRING::JSON_decode(const TTCN_Typedescriptor_t& p_td, JSON_Tokenizer& p_ boolean use_default = p_td.json->default_value && 0 == p_tok.get_buffer_length(); if (use_default) { // No JSON data in the buffer -> use default value - value = (char*)p_td.json->default_value; + value = const_cast<char*>(p_td.json->default_value); value_len = strlen(value); } else { dec_len = p_tok.get_next_token(&token, &value, &value_len); diff --git a/core/Hexstring.hh b/core/Hexstring.hh index 786fabc492fed15549fa1304ec633f188d4e188b..3fd48ff28195007fb21a3dfc24ddf77a0b7e1bd3 100644 --- a/core/Hexstring.hh +++ b/core/Hexstring.hh @@ -26,7 +26,6 @@ #include "Basetype.hh" #include "Template.hh" -#include "Optional.hh" #include "Error.hh" class INTEGER; @@ -37,6 +36,9 @@ class HEXSTRING_ELEMENT; class Module_Param; +template<typename T> +class OPTIONAL; + class HEXSTRING : public Base_Type { friend class HEXSTRING_ELEMENT; @@ -143,7 +145,7 @@ public: int RAW_decode(const TTCN_Typedescriptor_t&, TTCN_Buffer&, int, raw_order_t, boolean no_err=FALSE, int sel_field=-1, boolean first_call=TRUE); int XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, - unsigned int flavor, int indent, embed_values_enc_struct_t*) const; + unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const; int XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t*); diff --git a/core/Integer.cc b/core/Integer.cc index 2850f7d116491c028e6845bc720bd9f13f8b2036..1aa5ea81ad5b50490087fef929104cb60605d1b5 100644 --- a/core/Integer.cc +++ b/core/Integer.cc @@ -794,7 +794,7 @@ void INTEGER::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, case TTCN_EncDec::CT_XER: { TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); unsigned XER_coding=va_arg(pvar, unsigned); - XER_encode(*p_td.xer, p_buf, XER_coding, 0, 0); + XER_encode(*p_td.xer, p_buf, XER_coding, 0, 0, 0); break;} case TTCN_EncDec::CT_JSON: { TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); @@ -1592,7 +1592,7 @@ int INTEGER::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& buff, } int INTEGER::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, - unsigned int flavor, int indent, embed_values_enc_struct_t*) const + unsigned int flavor, unsigned int /*flavor2*/, int indent, embed_values_enc_struct_t*) const { if (!is_bound()) { TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, diff --git a/core/Integer.hh b/core/Integer.hh index 9af7d7ea8a654c8bb679507ddb6964e566740164..596a2704b870893741f8d28c4c7b1e6c4648ddad 100644 --- a/core/Integer.hh +++ b/core/Integer.hh @@ -179,7 +179,7 @@ public: /** @brief Encode according to XML Encoding Rules. **/ int XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, unsigned int flavor, - int indent, embed_values_enc_struct_t*) const; + unsigned int flavor2, int indent, embed_values_enc_struct_t*) const; /** @brief Decode according to XML Encoding Rules. **/ int XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, diff --git a/core/JSON.cc b/core/JSON.cc index 900ece17fdda73906ac4587290f112b4725e4efe..b44fb1160af6095990de6edd10825be633d1d256 100644 --- a/core/JSON.cc +++ b/core/JSON.cc @@ -14,52 +14,52 @@ #include "JSON.hh" // JSON descriptors for base types -const TTCN_JSONdescriptor_t INTEGER_json_ = { FALSE, NULL, FALSE, NULL }; +const TTCN_JSONdescriptor_t INTEGER_json_ = { FALSE, NULL, FALSE, NULL, FALSE }; -const TTCN_JSONdescriptor_t FLOAT_json_ = { FALSE, NULL, FALSE, NULL }; +const TTCN_JSONdescriptor_t FLOAT_json_ = { FALSE, NULL, FALSE, NULL, FALSE }; -const TTCN_JSONdescriptor_t BOOLEAN_json_ = { FALSE, NULL, FALSE, NULL }; +const TTCN_JSONdescriptor_t BOOLEAN_json_ = { FALSE, NULL, FALSE, NULL, FALSE }; -const TTCN_JSONdescriptor_t BITSTRING_json_ = { FALSE, NULL, FALSE, NULL }; +const TTCN_JSONdescriptor_t BITSTRING_json_ = { FALSE, NULL, FALSE, NULL, FALSE }; -const TTCN_JSONdescriptor_t HEXSTRING_json_ = { FALSE, NULL, FALSE, NULL }; +const TTCN_JSONdescriptor_t HEXSTRING_json_ = { FALSE, NULL, FALSE, NULL, FALSE }; -const TTCN_JSONdescriptor_t OCTETSTRING_json_ = { FALSE, NULL, FALSE, NULL }; +const TTCN_JSONdescriptor_t OCTETSTRING_json_ = { FALSE, NULL, FALSE, NULL, FALSE }; -const TTCN_JSONdescriptor_t CHARSTRING_json_ = { FALSE, NULL, FALSE, NULL }; +const TTCN_JSONdescriptor_t CHARSTRING_json_ = { FALSE, NULL, FALSE, NULL, FALSE }; -const TTCN_JSONdescriptor_t UNIVERSAL_CHARSTRING_json_ = { FALSE, NULL, FALSE, NULL }; +const TTCN_JSONdescriptor_t UNIVERSAL_CHARSTRING_json_ = { FALSE, NULL, FALSE, NULL, FALSE }; -const TTCN_JSONdescriptor_t VERDICTTYPE_json_ = { FALSE, NULL, FALSE, NULL }; +const TTCN_JSONdescriptor_t VERDICTTYPE_json_ = { FALSE, NULL, FALSE, NULL, FALSE }; -const TTCN_JSONdescriptor_t GeneralString_json_ = { FALSE, NULL, FALSE, NULL }; +const TTCN_JSONdescriptor_t GeneralString_json_ = { FALSE, NULL, FALSE, NULL, FALSE }; -const TTCN_JSONdescriptor_t NumericString_json_ = { FALSE, NULL, FALSE, NULL }; +const TTCN_JSONdescriptor_t NumericString_json_ = { FALSE, NULL, FALSE, NULL, FALSE }; -const TTCN_JSONdescriptor_t UTF8String_json_ = { FALSE, NULL, FALSE, NULL }; +const TTCN_JSONdescriptor_t UTF8String_json_ = { FALSE, NULL, FALSE, NULL, FALSE }; -const TTCN_JSONdescriptor_t PrintableString_json_ = { FALSE, NULL, FALSE, NULL }; +const TTCN_JSONdescriptor_t PrintableString_json_ = { FALSE, NULL, FALSE, NULL, FALSE }; -const TTCN_JSONdescriptor_t UniversalString_json_ = { FALSE, NULL, FALSE, NULL }; +const TTCN_JSONdescriptor_t UniversalString_json_ = { FALSE, NULL, FALSE, NULL, FALSE }; -const TTCN_JSONdescriptor_t BMPString_json_ = { FALSE, NULL, FALSE, NULL }; +const TTCN_JSONdescriptor_t BMPString_json_ = { FALSE, NULL, FALSE, NULL, FALSE }; -const TTCN_JSONdescriptor_t GraphicString_json_ = { FALSE, NULL, FALSE, NULL }; +const TTCN_JSONdescriptor_t GraphicString_json_ = { FALSE, NULL, FALSE, NULL, FALSE }; -const TTCN_JSONdescriptor_t IA5String_json_ = { FALSE, NULL, FALSE, NULL }; +const TTCN_JSONdescriptor_t IA5String_json_ = { FALSE, NULL, FALSE, NULL, FALSE }; -const TTCN_JSONdescriptor_t TeletexString_json_ = { FALSE, NULL, FALSE, NULL }; +const TTCN_JSONdescriptor_t TeletexString_json_ = { FALSE, NULL, FALSE, NULL, FALSE }; -const TTCN_JSONdescriptor_t VideotexString_json_ = { FALSE, NULL, FALSE, NULL }; +const TTCN_JSONdescriptor_t VideotexString_json_ = { FALSE, NULL, FALSE, NULL, FALSE }; -const TTCN_JSONdescriptor_t VisibleString_json_ = { FALSE, NULL, FALSE, NULL }; +const TTCN_JSONdescriptor_t VisibleString_json_ = { FALSE, NULL, FALSE, NULL, FALSE }; -const TTCN_JSONdescriptor_t ASN_NULL_json_ = { FALSE, NULL, FALSE, NULL }; +const TTCN_JSONdescriptor_t ASN_NULL_json_ = { FALSE, NULL, FALSE, NULL, FALSE }; -const TTCN_JSONdescriptor_t OBJID_json_ = { FALSE, NULL, FALSE, NULL }; +const TTCN_JSONdescriptor_t OBJID_json_ = { FALSE, NULL, FALSE, NULL, FALSE }; -const TTCN_JSONdescriptor_t ASN_ROID_json_ = { FALSE, NULL, FALSE, NULL }; +const TTCN_JSONdescriptor_t ASN_ROID_json_ = { FALSE, NULL, FALSE, NULL, FALSE }; -const TTCN_JSONdescriptor_t ASN_ANY_json_ = { FALSE, NULL, FALSE, NULL }; +const TTCN_JSONdescriptor_t ASN_ANY_json_ = { FALSE, NULL, FALSE, NULL, FALSE }; -const TTCN_JSONdescriptor_t ENUMERATED_json_ = { FALSE, NULL, FALSE, NULL }; +const TTCN_JSONdescriptor_t ENUMERATED_json_ = { FALSE, NULL, FALSE, NULL, FALSE }; \ No newline at end of file diff --git a/core/Objid.cc b/core/Objid.cc index bfdc4fe36fe36232dd690a18f85070c9aebba4ef..a04ccaac397ee8578be14bd44119f68b4c8572d9 100644 --- a/core/Objid.cc +++ b/core/Objid.cc @@ -27,6 +27,7 @@ #include <limits.h> #include "../common/static_check.h" #include "Integer.hh" +#include "Optional.hh" static const size_t MIN_COMPONENTS = 2; @@ -297,7 +298,7 @@ void OBJID::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, case TTCN_EncDec::CT_XER: { TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); unsigned XER_coding=va_arg(pvar, unsigned); - XER_encode(*p_td.xer, p_buf, XER_coding, 0, 0); + XER_encode(*p_td.xer, p_buf, XER_coding, 0, 0, 0); break;} case TTCN_EncDec::CT_JSON: { TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); @@ -501,7 +502,7 @@ boolean OBJID::BER_decode_TLV(const TTCN_Typedescriptor_t& p_td, int OBJID::XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int /*flavor2*/, int indent, embed_values_enc_struct_t*) const { if(!is_bound()) { TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, @@ -626,7 +627,7 @@ int OBJID::JSON_decode(const TTCN_Typedescriptor_t& p_td, JSON_Tokenizer& p_tok, boolean use_default = p_td.json->default_value && 0 == p_tok.get_buffer_length(); if (use_default) { // No JSON data in the buffer -> use default value - value = (char*)p_td.json->default_value; + value = const_cast<char*>(p_td.json->default_value); value_len = strlen(value); } else { dec_len = p_tok.get_next_token(&token, &value, &value_len); diff --git a/core/Objid.hh b/core/Objid.hh index 04d4b0756610125c7b32b86e30c5802209537a8a..6e283a8b916e496095310e5b53a3c656b9aa1395 100644 --- a/core/Objid.hh +++ b/core/Objid.hh @@ -21,10 +21,11 @@ #ifndef OBJID_HH #define OBJID_HH -#include "Optional.hh" -// the following are pulled in by Optional.hh: -//#include "Basetype.hh" -//#include "Template.hh" +#include "Basetype.hh" +#include "Template.hh" + +template<typename T> +class OPTIONAL; class Text_Buf; class Module_Param; @@ -103,7 +104,7 @@ public: boolean BER_decode_TLV(const TTCN_Typedescriptor_t& p_td, const ASN_BER_TLV_t& p_tlv, unsigned L_form); int XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const; + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const; int XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t*); diff --git a/core/Octetstring.cc b/core/Octetstring.cc index c90a8be22d878909e5140c1511638eb6dadb2fbb..834edcf979f6e2ebaf7f05503846644ddbfe6ca1 100644 --- a/core/Octetstring.cc +++ b/core/Octetstring.cc @@ -34,6 +34,7 @@ #include "BER.hh" #include "TEXT.hh" #include "Addfunc.hh" +#include "Optional.hh" #include "../common/dbgnew.hh" #include <string.h> @@ -630,7 +631,7 @@ void OCTETSTRING::encode(const TTCN_Typedescriptor_t& p_td, case TTCN_EncDec::CT_XER: { TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); unsigned XER_coding=va_arg(pvar, unsigned); - XER_encode(*p_td.xer, p_buf, XER_coding, 0, 0); + XER_encode(*p_td.xer, p_buf, XER_coding, 0, 0, 0); break;} case TTCN_EncDec::CT_JSON: { TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name); @@ -915,7 +916,7 @@ extern unsigned int xlate(cbyte* in, int phase, unsigned char* dest); extern const char cb64[]; int OCTETSTRING::XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int /*flavor2*/, int indent, embed_values_enc_struct_t*) const { if(!is_bound()) { TTCN_EncDec_ErrorContext::error @@ -1306,7 +1307,7 @@ int OCTETSTRING::JSON_decode(const TTCN_Typedescriptor_t& p_td, JSON_Tokenizer& boolean use_default = p_td.json->default_value && 0 == p_tok.get_buffer_length(); if (use_default) { // No JSON data in the buffer -> use default value - value = (char*)p_td.json->default_value; + value = const_cast<char*>(p_td.json->default_value); value_len = strlen(value); } else { dec_len = p_tok.get_next_token(&token, &value, &value_len); diff --git a/core/Octetstring.hh b/core/Octetstring.hh index f104eaf1ed4f9e720b0b478c92eabfbaf1652b7a..795538d52e01d9c5ad490cceccdde555990acf00 100644 --- a/core/Octetstring.hh +++ b/core/Octetstring.hh @@ -28,7 +28,6 @@ #include "Basetype.hh" #include "Template.hh" -#include "Optional.hh" #include "Error.hh" class INTEGER; @@ -38,6 +37,9 @@ class CHARSTRING; class OCTETSTRING_ELEMENT; class Module_Param; +template<typename T> +class OPTIONAL; + // octetstring value class class OCTETSTRING : public Base_Type { @@ -173,7 +175,7 @@ public: int TEXT_decode(const TTCN_Typedescriptor_t&, TTCN_Buffer&, Limit_Token_List&, boolean no_err=FALSE, boolean first_call=TRUE); int XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, - unsigned int flavor, int indent, embed_values_enc_struct_t*) const; + unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const; int XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t*); diff --git a/core/Optional.hh b/core/Optional.hh index 5a079914f28b3aed3cd71b286d2d22801078cef3..e3b35f052898b48504b933662e1289b44a04181c 100644 --- a/core/Optional.hh +++ b/core/Optional.hh @@ -283,11 +283,11 @@ public: #endif int XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& buf, unsigned int flavor, - int indent, embed_values_enc_struct_t* emb_val) const; + unsigned int flavor2, int indent, embed_values_enc_struct_t* emb_val) const; #ifdef TITAN_RUNTIME_2 int XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr, const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, unsigned int flavor, - int indent, embed_values_enc_struct_t* emb_val) const; + unsigned int flavor2, int indent, embed_values_enc_struct_t* emb_val) const; #endif /** Used during XML decoding, in case this object is an AnyElement field in a record. * Determines whether XER_decode() should be called or this field should be omitted. @@ -302,7 +302,7 @@ public: int XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t* emb_val); - char ** collect_ns(const XERdescriptor_t& p_td, size_t& num, bool& def_ns) const; + char ** collect_ns(const XERdescriptor_t& p_td, size_t& num, bool& def_ns, unsigned int flavor = 0) const; operator T_type&(); operator const T_type&() const; @@ -981,7 +981,8 @@ int OPTIONAL<T_type>::RAW_decode(const TTCN_Typedescriptor_t& p_td, template<typename T_type> int -OPTIONAL<T_type>::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& buf, unsigned int flavor, int indent, embed_values_enc_struct_t* emb_val) const +OPTIONAL<T_type>::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& buf, unsigned int flavor, + unsigned int flavor2, int indent, embed_values_enc_struct_t* emb_val) const { #ifdef TITAN_RUNTIME_2 switch (get_selection()) { @@ -989,7 +990,7 @@ OPTIONAL<T_type>::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& buf, unsi switch (optional_selection) { #endif case OPTIONAL_PRESENT: - return optional_value->XER_encode(p_td, buf, flavor, indent, emb_val); + return optional_value->XER_encode(p_td, buf, flavor, flavor2, indent, emb_val); case OPTIONAL_OMIT: return 0; // nothing to do ! default: @@ -1003,12 +1004,12 @@ OPTIONAL<T_type>::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& buf, unsi template<typename T_type> int OPTIONAL<T_type>::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr, - const XERdescriptor_t& p_td, TTCN_Buffer& buf, unsigned int flavor, int indent, - embed_values_enc_struct_t* emb_val) const + const XERdescriptor_t& p_td, TTCN_Buffer& buf, unsigned int flavor, unsigned int flavor2, + int indent, embed_values_enc_struct_t* emb_val) const { switch (get_selection()) { case OPTIONAL_PRESENT: - return optional_value->XER_encode_negtest(p_err_descr, p_td, buf, flavor, indent, emb_val); + return optional_value->XER_encode_negtest(p_err_descr, p_td, buf, flavor, flavor2, indent, emb_val); case OPTIONAL_OMIT: return 0; // nothing to do ! default: @@ -1098,7 +1099,7 @@ OPTIONAL<T_type>::XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, || ( (p_td.xer_bits & UNTAGGED) && !reader.IsEmptyElement()) // If the optional field (a string) has anyElement, accept the element // regardless of its name. Else the name (and namespace) must match. - || T_type::can_start(name, ns_uri, p_td, flavor)) { // it is us + || T_type::can_start(name, ns_uri, p_td, flavor, flavor2)) { // it is us found_it: set_to_present(); //success = reader.Read(); // move to next thing TODO should it loop till an element ? @@ -1128,7 +1129,7 @@ finished: } template<typename T_type> -char ** OPTIONAL<T_type>::collect_ns(const XERdescriptor_t& p_td, size_t& num, bool& def_ns) const { +char ** OPTIONAL<T_type>::collect_ns(const XERdescriptor_t& p_td, size_t& num, bool& def_ns, unsigned int /*flavor*/) const { #ifdef TITAN_RUNTIME_2 switch (get_selection()) { #else diff --git a/core/ProfilerTools.cc b/core/ProfilerTools.cc index 3d32dbbf37fffba898e13ae4be0a4b1ecfd808d1..f3d854eaedb062be5f37594727a6d2462f195f40 100644 --- a/core/ProfilerTools.cc +++ b/core/ProfilerTools.cc @@ -489,8 +489,8 @@ namespace Profiler_Tools { // Compare function for sorting stats data based on total execution time (descending) int stats_data_cmp_time(const void* p_left, const void* p_right) { - const stats_data_t* p_left_data = (stats_data_t*)p_left; - const stats_data_t* p_right_data = (stats_data_t*)p_right; + const stats_data_t* p_left_data = (const stats_data_t*)p_left; + const stats_data_t* p_right_data = (const stats_data_t*)p_right; if (p_left_data->total_time.tv_sec > p_right_data->total_time.tv_sec) return -1; if (p_left_data->total_time.tv_sec < p_right_data->total_time.tv_sec) return 1; if (p_left_data->total_time.tv_usec > p_right_data->total_time.tv_usec) return -1; @@ -500,13 +500,13 @@ namespace Profiler_Tools { // Compare function for sorting stats data based on execution count (descending) int stats_data_cmp_count(const void* p_left, const void* p_right) { - return ((stats_data_t*)p_right)->exec_count - ((stats_data_t*)p_left)->exec_count; + return ((const stats_data_t*)p_right)->exec_count - ((const stats_data_t*)p_left)->exec_count; } // Compare function for sorting stats data based on total time per execution count (descending) int stats_data_cmp_avg(const void* p_left, const void* p_right) { - const stats_data_t* p_left_data = (stats_data_t*)p_left; - const stats_data_t* p_right_data = (stats_data_t*)p_right; + const stats_data_t* p_left_data = (const stats_data_t*)p_left; + const stats_data_t* p_right_data = (const stats_data_t*)p_right; double left_time = p_left_data->total_time.tv_sec + p_left_data->total_time.tv_usec / 1000000.0; double right_time = p_right_data->total_time.tv_sec + p_right_data->total_time.tv_usec / 1000000.0; double diff = (right_time / p_right_data->exec_count) - (left_time / p_left_data->exec_count); diff --git a/core/Universal_charstring.cc b/core/Universal_charstring.cc index dd5b5f2c463094c6b6484010d78f1219fb177e36..992688a2afdedd18cae5eee98f2046a158488ce9 100644 --- a/core/Universal_charstring.cc +++ b/core/Universal_charstring.cc @@ -1138,7 +1138,7 @@ void UNIVERSAL_CHARSTRING::encode(const TTCN_Typedescriptor_t& p_td, default: // nothing to do break; } - XER_encode(*p_td.xer,p_buf, XER_coding, 0, 0); + XER_encode(*p_td.xer,p_buf, XER_coding, 0, 0, 0); p_buf.put_c('\n'); break; } case TTCN_EncDec::CT_JSON: { @@ -1778,7 +1778,7 @@ boolean UNIVERSAL_CHARSTRING::BER_decode_TLV extern void xml_escape(const unsigned int c, TTCN_Buffer& p_buf); int UNIVERSAL_CHARSTRING::XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int /*flavor2*/, int indent, embed_values_enc_struct_t*) const { if(!is_bound()) { TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, diff --git a/core/Universal_charstring.hh b/core/Universal_charstring.hh index 6a0940694c145dc3661ea88fd1752ea14c8d78df..436a0baccc25618c91f1351efa7610a9fc380d3c 100644 --- a/core/Universal_charstring.hh +++ b/core/Universal_charstring.hh @@ -264,6 +264,10 @@ public: int lengthof() const; + /* returns the CHARSTRING representation of this. Quadruples are converted + into the form: \q{group,plane,row,cell} */ + CHARSTRING get_stringRepr_for_pattern() const; + void dump() const; private: @@ -272,9 +276,6 @@ private: UNIVERSAL_CHARSTRING extract_matched_section(int start, int end) const; - /* returns the CHARSTRING representation of this. Quadruples are converted - into the form: \q{group,plane,row,cell} */ - CHARSTRING get_stringRepr_for_pattern() const; void convert_cstr_to_uni(); //checks if an valid BOM is at the head of the string. Returns the length of BOM @@ -361,7 +362,7 @@ public: TTCN_Buffer&) const; int TEXT_decode(const TTCN_Typedescriptor_t&, TTCN_Buffer&, Limit_Token_List&, boolean no_err=FALSE, boolean first_call=TRUE); - int XER_encode(const XERdescriptor_t&, TTCN_Buffer&, unsigned int, int, embed_values_enc_struct_t*) const; + int XER_encode(const XERdescriptor_t&, TTCN_Buffer&, unsigned int, unsigned int, int, embed_values_enc_struct_t*) const; int XER_decode(const XERdescriptor_t&, XmlReaderWrap& reader, unsigned int, unsigned int, embed_values_dec_struct_t*); /** Decodes UTF-8 into the internal representation (UCS4-BE) * diff --git a/core/Verdicttype.cc b/core/Verdicttype.cc index fe24ee04c304f4d2d4432b70cf373960497bedc6..7225a07e24e8d1fa587be82587f533fad9468a87 100644 --- a/core/Verdicttype.cc +++ b/core/Verdicttype.cc @@ -26,6 +26,7 @@ #include "Error.hh" #include "Logger.hh" #include "Textbuf.hh" +#include "Optional.hh" #include "../common/dbgnew.hh" @@ -185,7 +186,7 @@ void VERDICTTYPE::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, case TTCN_EncDec::CT_XER: { TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); unsigned XER_coding=va_arg(pvar, unsigned); - XER_encode(*p_td.xer, p_buf, XER_coding, 0, 0); + XER_encode(*p_td.xer, p_buf, XER_coding, 0, 0, 0); break;} case TTCN_EncDec::CT_JSON: { TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); @@ -284,7 +285,7 @@ void VERDICTTYPE::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int VERDICTTYPE::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, - unsigned int p_flavor, int p_indent, embed_values_enc_struct_t*) const + unsigned int p_flavor, unsigned int /*p_flavor2*/, int p_indent, embed_values_enc_struct_t*) const { int encoded_length=(int)p_buf.get_len(); //const boolean e_xer = is_exer(p_flavor); @@ -389,7 +390,7 @@ int VERDICTTYPE::JSON_decode(const TTCN_Typedescriptor_t& p_td, JSON_Tokenizer& boolean use_default = p_td.json->default_value && 0 == p_tok.get_buffer_length(); if (use_default) { // No JSON data in the buffer -> use default value - value = (char*)p_td.json->default_value; + value = const_cast<char*>(p_td.json->default_value); value_len = strlen(value); } else { dec_len = p_tok.get_next_token(&token, &value, &value_len); diff --git a/core/Verdicttype.hh b/core/Verdicttype.hh index 67f71f0641a9deefa84a95432a924e4885c2e16f..6b401a15224e32f3370ad0855b141ca47c9293b6 100644 --- a/core/Verdicttype.hh +++ b/core/Verdicttype.hh @@ -23,10 +23,12 @@ #include "Basetype.hh" #include "Template.hh" -#include "Optional.hh" class Module_Param; +template<typename T> +class OPTIONAL; + /// verdicttype value class class VERDICTTYPE: public Base_Type { @@ -96,7 +98,7 @@ public: TTCN_EncDec::coding_t p_coding, ...); int XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, - unsigned int flavor, int indent, embed_values_enc_struct_t*) const; + unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const; int XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t*); diff --git a/core/XER.hh b/core/XER.hh index 723536146da01297d202dc0e508cdda99cda2826..c984c857bb971f932fa1524bb2a856f8aaa39a32 100644 --- a/core/XER.hh +++ b/core/XER.hh @@ -106,7 +106,8 @@ enum XER_flavor { }; enum XER_flavor2 { - USE_NIL_PARENT_TAG = 1U << 0 // Content field has attribute that was read by parent + USE_NIL_PARENT_TAG = 1U << 0, // Content field has attribute that was read by parent + FROM_UNION_USETYPE = 1U << 1 // When the parent of a useUnion field is a union with useType }; /** WHITESPACE actions. diff --git a/core2/Basetype2.cc b/core2/Basetype2.cc index 25ee272a2245e300fbae2deab31b374104799d4c..d82e04657b86d687ac2edf95374ceeb0a501259c 100644 --- a/core2/Basetype2.cc +++ b/core2/Basetype2.cc @@ -197,9 +197,9 @@ int Base_Type::JSON_encode_negtest_raw(JSON_Tokenizer&) const } int Base_Type::XER_encode_negtest(const Erroneous_descriptor_t* /*p_err_descr*/, - const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const + const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const { - return XER_encode(p_td, p_buf, flavor, indent, 0); // ignore erroneous + return XER_encode(p_td, p_buf, flavor, flavor2, indent, 0); // ignore erroneous } int Base_Type::RAW_encode_negtest(const Erroneous_descriptor_t *, @@ -1685,7 +1685,7 @@ void Record_Of_Type::encode(const TTCN_Typedescriptor_t& p_td, case TTCN_EncDec::CT_XER: { TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); unsigned XER_coding=va_arg(pvar, unsigned); - XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0); + XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0); p_buf.put_c('\n'); break;} case TTCN_EncDec::CT_JSON: { @@ -1775,7 +1775,7 @@ void Record_Of_Type::decode(const TTCN_Typedescriptor_t& p_td, va_end(pvar); } -char **Record_Of_Type::collect_ns(const XERdescriptor_t& p_td, size_t& num, bool& def_ns) const +char **Record_Of_Type::collect_ns(const XERdescriptor_t& p_td, size_t& num, bool& def_ns, unsigned int /*flavor*/) const { size_t num_collected = 0; // First, our own namespace. Sets num_collected to 0 or 1. @@ -1809,10 +1809,10 @@ static const universal_char sp = { 0,0,0,' ' }; static const universal_char tb = { 0,0,0,9 }; int Record_Of_Type::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, - unsigned int flavor, int indent, embed_values_enc_struct_t* emb_val) const + unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t* emb_val) const { if (err_descr) { - return XER_encode_negtest(err_descr, p_td, p_buf, flavor, indent, emb_val); + return XER_encode_negtest(err_descr, p_td, p_buf, flavor, flavor2, indent, emb_val); } if (val_ptr == 0) TTCN_error( @@ -1828,7 +1828,7 @@ int Record_Of_Type::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, flavor = flavor | ( (exer && (p_td.xer_bits & XER_LIST)) - || is_exerlist(flavor) ? SIMPLE_TYPE : 0); + || is_exerlist(flavor) ? SIMPLE_TYPE : XER_NONE /* = 0 */); flavor &= ~XER_RECOF; // record-of doesn't care int nof_elements = get_nof_elements(); Base_Type::begin_xml(p_td, p_buf, flavor, indent, !nof_elements, @@ -1902,7 +1902,7 @@ int Record_Of_Type::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, check_namespace_restrictions(p_td, (const char*)cs); } before.XER_encode(UNIVERSAL_CHARSTRING_xer_, p_buf, - flavor | ANY_ATTRIBUTES, indent, 0); + flavor | ANY_ATTRIBUTES, flavor2, indent, 0); p_buf.put_c('\''); p_buf.put_c(' '); @@ -1924,7 +1924,7 @@ int Record_Of_Type::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, UNIVERSAL_CHARSTRING after(len - j, (const universal_char*)(*elem) + j); after.XER_encode(UNIVERSAL_CHARSTRING_xer_, p_buf, - flavor | ANY_ATTRIBUTES, indent, 0); + flavor | ANY_ATTRIBUTES, flavor2, indent, 0); // Put this attribute in a dummy element and walk through it to check its validity TTCN_Buffer check_buf; @@ -1947,13 +1947,13 @@ int Record_Of_Type::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, if (i > 0 && !own_tag && 0 != emb_val && emb_val->embval_index < emb_val->embval_array->size_of()) { emb_val->embval_array->get_at(emb_val->embval_index)->XER_encode( - UNIVERSAL_CHARSTRING_xer_, p_buf, flavor | EMBED_VALUES, indent+1, 0); + UNIVERSAL_CHARSTRING_xer_, p_buf, flavor | EMBED_VALUES, flavor2, indent+1, 0); ++emb_val->embval_index; } ec_1.set_msg("%d: ", i); if (exer && (p_td.xer_bits & XER_LIST) && i>0) p_buf.put_c(' '); get_at(i)->XER_encode(*p_td.oftype_descr, p_buf, - sub_flavor, indent+own_tag, emb_val); + sub_flavor, flavor2, indent+own_tag, emb_val); } if (indenting && nof_elements && !is_exerlist(flavor)) { @@ -1983,7 +1983,7 @@ int Record_Of_Type::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, */ int Record_Of_Type::encode_element(int i, const XERdescriptor_t& p_td, const Erroneous_values_t* ev, const Erroneous_descriptor_t* ed, - TTCN_Buffer& p_buf, unsigned int sub_flavor, int indent, embed_values_enc_struct_t* emb_val) const + TTCN_Buffer& p_buf, unsigned int sub_flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t* emb_val) const { int enc_len = p_buf.get_len(); TTCN_EncDec_ErrorContext ec; @@ -2000,7 +2000,7 @@ int Record_Of_Type::encode_element(int i, const XERdescriptor_t& p_td, if (ev->before->type_descr==NULL) TTCN_error( "internal error: erroneous before type descriptor missing"); ev->before->errval->XER_encode(*ev->before->type_descr->xer, - p_buf, sub_flavor, indent, 0); + p_buf, sub_flavor, flavor2, indent, 0); } } @@ -2020,16 +2020,16 @@ int Record_Of_Type::encode_element(int i, const XERdescriptor_t& p_td, if (ev->value->type_descr==NULL) TTCN_error( "internal error: erroneous value type descriptor missing"); ev->value->errval->XER_encode(*ev->value->type_descr->xer, - p_buf, sub_flavor, indent, 0); + p_buf, sub_flavor, flavor2, indent, 0); } } // else -> omit } else { ec.set_msg("Component #%d: ", i); if (ed) { - get_at(i)->XER_encode_negtest(ed, p_td, p_buf, sub_flavor, indent, emb_val); + get_at(i)->XER_encode_negtest(ed, p_td, p_buf, sub_flavor, flavor2, indent, emb_val); } else { // the "real" encoder - get_at(i)->XER_encode(p_td, p_buf, sub_flavor, indent, emb_val); + get_at(i)->XER_encode(p_td, p_buf, sub_flavor, flavor2, indent, emb_val); } } @@ -2044,7 +2044,7 @@ int Record_Of_Type::encode_element(int i, const XERdescriptor_t& p_td, if (ev->after->type_descr==NULL) TTCN_error( "internal error: erroneous after type descriptor missing"); ev->after->errval->XER_encode(*ev->after->type_descr->xer, - p_buf, sub_flavor, indent, 0); + p_buf, sub_flavor, flavor2, indent, 0); } } @@ -2053,7 +2053,7 @@ int Record_Of_Type::encode_element(int i, const XERdescriptor_t& p_td, // XERSTUFF Record_Of_Type::XER_encode_negtest int Record_Of_Type::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr, - const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, unsigned flavor, int indent, + const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, unsigned flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t* emb_val) const { if (val_ptr == 0) TTCN_error( @@ -2069,7 +2069,7 @@ int Record_Of_Type::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr flavor = flavor | ( (exer && (p_td.xer_bits & XER_LIST)) - || is_exerlist(flavor) ? SIMPLE_TYPE : 0); + || is_exerlist(flavor) ? SIMPLE_TYPE : XER_NONE /* = 0 */); flavor &= ~XER_RECOF; // record-of doesn't care int nof_elements = get_nof_elements(); Base_Type::begin_xml(p_td, p_buf, flavor, indent, !nof_elements, @@ -2116,7 +2116,7 @@ int Record_Of_Type::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr if (ev->before->type_descr==NULL) TTCN_error( "internal error: erroneous before type descriptor missing"); else ev->before->errval->XER_encode(*ev->before->type_descr->xer, - p_buf, flavor, indent, 0); + p_buf, flavor, flavor2, indent, 0); } } @@ -2127,7 +2127,7 @@ int Record_Of_Type::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr if (ev->value->type_descr==NULL) TTCN_error( "internal error: erroneous value type descriptor missing"); else ev->value->errval->XER_encode(*ev->value->type_descr->xer, - p_buf, flavor, indent, 0); + p_buf, flavor, flavor2, indent, 0); } } } @@ -2168,7 +2168,7 @@ int Record_Of_Type::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr UNIVERSAL_CHARSTRING before(sp_at, (const universal_char*)(*elem)); before.XER_encode(UNIVERSAL_CHARSTRING_xer_, p_buf, - flavor | ANY_ATTRIBUTES, indent, 0); + flavor | ANY_ATTRIBUTES, flavor2, indent, 0); p_buf.put_c('\''); p_buf.put_c(' '); @@ -2185,7 +2185,7 @@ int Record_Of_Type::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr UNIVERSAL_CHARSTRING after(len - j, (const universal_char*)(*elem) + j); after.XER_encode(UNIVERSAL_CHARSTRING_xer_, p_buf, - flavor | ANY_ATTRIBUTES, indent, 0); + flavor | ANY_ATTRIBUTES, flavor2, indent, 0); } } @@ -2198,7 +2198,7 @@ int Record_Of_Type::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr if (ev->after->type_descr==NULL) TTCN_error( "internal error: erroneous after type descriptor missing"); else ev->after->errval->XER_encode(*ev->after->type_descr->xer, - p_buf, flavor, indent, 0); + p_buf, flavor, flavor2, indent, 0); } } } @@ -2227,7 +2227,7 @@ int Record_Of_Type::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr ed0_i = emb_val->embval_err->next_field_emb_descr (emb_val->embval_index, emb_val->embval_err_descr_idx); } emb_val->embval_array->encode_element(emb_val->embval_index, UNIVERSAL_CHARSTRING_xer_, - ev0_i, ed0_i, p_buf, flavor | EMBED_VALUES, indent + own_tag, 0); + ev0_i, ed0_i, p_buf, flavor | EMBED_VALUES, flavor2, indent + own_tag, 0); ++emb_val->embval_index; } @@ -2236,7 +2236,7 @@ int Record_Of_Type::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr const Erroneous_descriptor_t* emb_descr = p_err_descr->next_field_emb_descr (i, edescr_idx); - encode_element(i, *p_td.oftype_descr, err_vals, emb_descr, p_buf, sub_flavor, indent+own_tag, emb_val); + encode_element(i, *p_td.oftype_descr, err_vals, emb_descr, p_buf, sub_flavor, flavor2, indent+own_tag, emb_val); // omit_after value -1 becomes "very big" if ((unsigned int)i >= (unsigned int)p_err_descr->omit_after) break; @@ -2390,7 +2390,7 @@ int Record_Of_Type::XER_decode(const XERdescriptor_t& p_td, * belong to the embedded type, the record-of has already ended. */ if (!own_tag && !can_start_v( (const char*)reader.LocalName(), (const char*)reader.NamespaceUri(), - p_td, flavor | UNTAGGED)) + p_td, flavor | UNTAGGED, flavor2)) { for (; success == 1 && reader.Depth() > depth; success = reader.Read()) ; // We should now be back at the same depth as we started. @@ -2863,7 +2863,7 @@ void Record_Type::encode(const TTCN_Typedescriptor_t& p_td, case TTCN_EncDec::CT_XER: { TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); unsigned XER_coding=va_arg(pvar, unsigned); - XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0); + XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0); p_buf.put_c('\n'); break;} case TTCN_EncDec::CT_JSON: { @@ -4057,7 +4057,7 @@ const XERdescriptor_t* Record_Type::xer_descr(int /*field_index*/) const return NULL; } -char ** Record_Type::collect_ns(const XERdescriptor_t& p_td, size_t& num, bool& def_ns) const +char ** Record_Type::collect_ns(const XERdescriptor_t& p_td, size_t& num, bool& def_ns, unsigned int /*flavor*/) const { const int field_cnt = get_count(); // The USE-ORDER member is first, unless preempted by EMBED-VALUES @@ -4118,10 +4118,10 @@ int Record_Type::get_index_byname(const char *name, const char *uri) const { } int Record_Type::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, - unsigned int flavor, int indent, embed_values_enc_struct_t* emb_val_parent) const + unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t* emb_val_parent) const { if (err_descr) { - return XER_encode_negtest(err_descr, p_td, p_buf, flavor, indent, 0); + return XER_encode_negtest(err_descr, p_td, p_buf, flavor, flavor2, indent, 0); } if (!is_bound()) { TTCN_EncDec_ErrorContext::error @@ -4236,7 +4236,7 @@ int Record_Type::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, const Base_Type * const q_uri = get_at(0); if (q_uri->is_present()) { p_buf.put_s(11, (cbyte*)" xmlns:b0='"); - q_uri->XER_encode(*xer_descr(0), p_buf, flavor | XER_LIST, indent+1, 0); + q_uri->XER_encode(*xer_descr(0), p_buf, flavor | XER_LIST, flavor2, indent+1, 0); p_buf.put_c('\''); } @@ -4248,18 +4248,18 @@ int Record_Type::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, sub_len += 3; } const Base_Type* const q_name = get_at(1); - sub_len += q_name->XER_encode(*xer_descr(1), p_buf, flavor | XER_LIST, indent+1, 0); + sub_len += q_name->XER_encode(*xer_descr(1), p_buf, flavor | XER_LIST, flavor2, indent+1, 0); if (p_td.xer_bits & XER_ATTRIBUTE) p_buf.put_c('\''); } else { // not USE-QNAME if (!exer && (p_td.xer_bits & EMBED_VALUES) && embed_values != NULL) { // The EMBED-VALUES member as an ordinary record of string - sub_len += embed_values->XER_encode(*xer_descr(0), p_buf, flavor, indent+1, 0); + sub_len += embed_values->XER_encode(*xer_descr(0), p_buf, flavor, flavor2, indent+1, 0); } if (!exer && (p_td.xer_bits & USE_ORDER)) { // The USE-ORDER member as an ordinary record of enumerated - sub_len += use_order->XER_encode(*xer_descr(uo_index), p_buf, flavor, indent+1, 0); + sub_len += use_order->XER_encode(*xer_descr(uo_index), p_buf, flavor, flavor2, indent+1, 0); } if (exer && (indent==0 || (flavor & DEF_NS_SQUASHED))) // write namespaces for toplevel only @@ -4286,7 +4286,7 @@ int Record_Type::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, for (i = start_at; i < first_nonattr; ++i) { boolean is_xer_attr_field = xer_descr(i)->xer_bits & XER_ATTRIBUTE; ec_1.set_msg("%s': ", fld_name(i)); // attr - int tmp_len = get_at(i)->XER_encode(*xer_descr(i), p_buf, flavor, indent+1, 0); + int tmp_len = get_at(i)->XER_encode(*xer_descr(i), p_buf, flavor, flavor2, indent+1, 0); if (is_xer_attr_field && !exer) sub_len += tmp_len; /* do not add if attribute and EXER */ } @@ -4322,7 +4322,7 @@ int Record_Type::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, /* write the first string */ if (embed_values != NULL && embed_values->size_of() > 0) { sub_len += embed_values->get_at(0)->XER_encode(UNIVERSAL_CHARSTRING_xer_, - p_buf, flavor | EMBED_VALUES, indent+1, 0); + p_buf, flavor | EMBED_VALUES, flavor2, indent+1, 0); } } @@ -4421,7 +4421,7 @@ int Record_Type::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, if (p_td.xer_bits & UNTAGGED && i > 0 && exer && embed_values == NULL && 0 != emb_val_parent && emb_val_parent->embval_index < emb_val_parent->embval_array->size_of()) { emb_val_parent->embval_array->get_at(emb_val_parent->embval_index)->XER_encode(UNIVERSAL_CHARSTRING_xer_ - , p_buf, flavor | EMBED_VALUES, indent+1, 0); + , p_buf, flavor | EMBED_VALUES, flavor2, indent+1, 0); ++emb_val_parent->embval_index; } @@ -4436,13 +4436,13 @@ int Record_Type::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, // because the tag-stripping effect of USE-NIL has been achieved // by encoding the sub-fields directly). flavor | ((exer && !use_order && (i == field_cnt-1)) ? (p_td.xer_bits & USE_NIL) : 0), - indent+!omit_tag, emb_val); + flavor2, indent+!omit_tag, emb_val); // Now the next embed-values string (NOT affected by USE-ORDER!) if (exer && (p_td.xer_bits & EMBED_VALUES) && 0 != emb_val && embed_values != NULL && emb_val->embval_index < embed_values->size_of() && ordered->get_at(ai)->is_present()) { embed_values->get_at(emb_val->embval_index)->XER_encode(UNIVERSAL_CHARSTRING_xer_ - , p_buf, flavor | EMBED_VALUES, indent+1, 0); + , p_buf, flavor | EMBED_VALUES, flavor2, indent+1, 0); ++emb_val->embval_index; } } //for @@ -4509,7 +4509,7 @@ int Record_Type::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, */ int Record_Type::encode_field(int i, const Erroneous_values_t* err_vals, const Erroneous_descriptor_t* emb_descr, - TTCN_Buffer& p_buf, unsigned int sub_flavor, int indent, embed_values_enc_struct_t* emb_val) const + TTCN_Buffer& p_buf, unsigned int sub_flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t* emb_val) const { int enc_len = 0; TTCN_EncDec_ErrorContext ec; @@ -4523,7 +4523,7 @@ int Record_Type::encode_field(int i, if (err_vals->before->type_descr==NULL) TTCN_error( "internal error: erroneous before typedescriptor missing"); enc_len += err_vals->before->errval->XER_encode( - *err_vals->before->type_descr->xer, p_buf, sub_flavor, indent, 0); + *err_vals->before->type_descr->xer, p_buf, sub_flavor, flavor2, indent, 0); } } @@ -4536,18 +4536,18 @@ int Record_Type::encode_field(int i, if (err_vals->value->type_descr==NULL) TTCN_error( "internal error: erroneous value typedescriptor missing"); enc_len += err_vals->value->errval->XER_encode( - *err_vals->value->type_descr->xer, p_buf, sub_flavor, indent, 0); + *err_vals->value->type_descr->xer, p_buf, sub_flavor, flavor2, indent, 0); } } // else -> omit } else { ec.set_msg("Component %s: ", fld_name(i)); if (emb_descr) { enc_len += get_at(i)->XER_encode_negtest(emb_descr, *xer_descr(i), p_buf, - sub_flavor, indent, emb_val); + sub_flavor, flavor2, indent, emb_val); } else { // the "real" encoder enc_len += get_at(i)->XER_encode(*xer_descr(i), p_buf, - sub_flavor, indent, emb_val); + sub_flavor, flavor2, indent, emb_val); } } @@ -4561,7 +4561,7 @@ int Record_Type::encode_field(int i, if (err_vals->after->type_descr==NULL) TTCN_error( "internal error: erroneous after typedescriptor missing"); enc_len += err_vals->after->errval->XER_encode( - *err_vals->after->type_descr->xer, p_buf, sub_flavor, indent, 0); + *err_vals->after->type_descr->xer, p_buf, sub_flavor, flavor2, indent, 0); } } @@ -4570,7 +4570,7 @@ int Record_Type::encode_field(int i, // XERSTUFF Record_Type::XER_encode_negtest int Record_Type::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr, - const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, unsigned int flavor, int indent, + const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, unsigned int flavor, unsigned int flavor2, int indent, embed_values_enc_struct_t*) const { if (!is_bound()) { @@ -4695,7 +4695,7 @@ int Record_Type::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr, if (ev->before->type_descr==NULL) TTCN_error( "internal error: erroneous before typedescriptor missing"); sub_len += ev->before->errval->XER_encode( - *ev->before->type_descr->xer, p_buf, flavor, indent, 0); + *ev->before->type_descr->xer, p_buf, flavor, flavor2, indent, 0); } } @@ -4708,7 +4708,7 @@ int Record_Type::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr, if (ev->value->type_descr==NULL) TTCN_error( "internal error: erroneous value typedescriptor missing"); sub_len += ev->value->errval->XER_encode( - *ev->value->type_descr->xer, p_buf, flavor, indent, 0); + *ev->value->type_descr->xer, p_buf, flavor, flavor2, indent, 0); } } // else -> omit } else { @@ -4722,7 +4722,7 @@ int Record_Type::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr, // the "real" encoder if (q_uri->is_present()) { p_buf.put_s(11, (cbyte*)" xmlns:b0='"); - sub_len += q_uri->XER_encode(*xer_descr(0), p_buf, flavor | XER_LIST, indent+1, 0); + sub_len += q_uri->XER_encode(*xer_descr(0), p_buf, flavor | XER_LIST, flavor2, indent+1, 0); p_buf.put_c('\''); } } @@ -4738,7 +4738,7 @@ int Record_Type::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr, if (ev->after->type_descr==NULL) TTCN_error( "internal error: erroneous after typedescriptor missing"); sub_len += ev->after->errval->XER_encode( - *ev->after->type_descr->xer, p_buf, flavor, indent, 0); + *ev->after->type_descr->xer, p_buf, flavor, flavor2, indent, 0); } } @@ -4759,7 +4759,7 @@ int Record_Type::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr, if (ev->before->type_descr==NULL) TTCN_error( "internal error: erroneous before typedescriptor missing"); sub_len += ev->before->errval->XER_encode( - *ev->before->type_descr->xer, p_buf, flavor, indent, 0); + *ev->before->type_descr->xer, p_buf, flavor, flavor2, indent, 0); } } @@ -4772,7 +4772,7 @@ int Record_Type::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr, if (ev->value->type_descr==NULL) TTCN_error( "internal error: erroneous value typedescriptor missing"); sub_len += ev->value->errval->XER_encode( - *ev->value->type_descr->xer, p_buf, flavor, indent, 0); + *ev->value->type_descr->xer, p_buf, flavor, flavor2, indent, 0); } } // else -> omit } else { @@ -4787,7 +4787,7 @@ int Record_Type::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr, sub_len += 3; } - sub_len += get_at(1)->XER_encode(*xer_descr(1), p_buf, flavor | XER_LIST, indent+1, 0); + sub_len += get_at(1)->XER_encode(*xer_descr(1), p_buf, flavor | XER_LIST, flavor2, indent+1, 0); } } @@ -4801,7 +4801,7 @@ int Record_Type::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr, if (ev->after->type_descr==NULL) TTCN_error( "internal error: erroneous after typedescriptor missing"); sub_len += ev->after->errval->XER_encode( - *ev->after->type_descr->xer, p_buf, flavor, indent, 0); + *ev->after->type_descr->xer, p_buf, flavor, flavor2, indent, 0); } } @@ -4810,12 +4810,12 @@ int Record_Type::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr, else { // not USE-QNAME if (!exer && (p_td.xer_bits & EMBED_VALUES)) { // The EMBED-VALUES member as an ordinary record of string - sub_len += embed_values->XER_encode(*xer_descr(0), p_buf, flavor, indent+1, 0); + sub_len += embed_values->XER_encode(*xer_descr(0), p_buf, flavor, flavor2, indent+1, 0); } if (!exer && (p_td.xer_bits & USE_ORDER)) { // The USE-ORDER member as an ordinary record of enumerated - sub_len += use_order->XER_encode(*xer_descr(uo_index), p_buf, flavor, indent+1, 0); + sub_len += use_order->XER_encode(*xer_descr(uo_index), p_buf, flavor, flavor2, indent+1, 0); } if (exer && (indent==0 || (flavor & DEF_NS_SQUASHED))) // write namespaces for toplevel only @@ -4856,7 +4856,7 @@ int Record_Type::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr, boolean is_xer_attr_field = xer_descr(i)->xer_bits & XER_ATTRIBUTE; ec_1.set_msg("%s': ", fld_name(i)); // attr - tmp_len = encode_field(i, ev, ed, p_buf, flavor, indent + !omit_tag, 0); + tmp_len = encode_field(i, ev, ed, p_buf, flavor, flavor2, indent + !omit_tag, 0); if (is_xer_attr_field && !exer) sub_len += tmp_len; // do not add if attribute and EXER @@ -4933,7 +4933,7 @@ int Record_Type::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr, ed0_0 = ed0->next_field_emb_descr (0, embed_values_descr_idx); } sub_len += embed_values->encode_element(0, UNIVERSAL_CHARSTRING_xer_, - ev0_0, ed0_0, p_buf, flavor | EMBED_VALUES, indent+!omit_tag, 0); + ev0_0, ed0_0, p_buf, flavor | EMBED_VALUES, flavor2, indent+!omit_tag, 0); } } @@ -5075,7 +5075,7 @@ int Record_Type::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr, // because the tag-stripping effect of USE-NIL has been achieved // by encoding the sub-fields directly). flavor | ((exer && !use_order && (i == field_cnt-1)) ? (p_td.xer_bits & USE_NIL) : 0), - indent + !omit_tag, emb_val); + flavor2, indent + !omit_tag, emb_val); // Now the next embed-values string (NOT affected by USE-ORDER!) if (exer && (p_td.xer_bits & EMBED_VALUES) && 0 != emb_val && @@ -5087,7 +5087,7 @@ int Record_Type::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr, ed0_i = ed0->next_field_emb_descr (emb_val->embval_index, emb_val->embval_err_descr_idx); } embed_values->encode_element(emb_val->embval_index, UNIVERSAL_CHARSTRING_xer_, - ev0_i, ed0_i, p_buf, flavor | EMBED_VALUES, indent + !omit_tag, 0); + ev0_i, ed0_i, p_buf, flavor | EMBED_VALUES, flavor2, indent + !omit_tag, 0); ++emb_val->embval_index; } } //for @@ -5787,7 +5787,7 @@ int Record_Type::JSON_encode(const TTCN_Typedescriptor_t& p_td, JSON_Tokenizer& } int Record_Type::JSON_encode_negtest(const Erroneous_descriptor_t* p_err_descr, - const TTCN_Typedescriptor_t& p_td, + const TTCN_Typedescriptor_t& /*p_td*/, JSON_Tokenizer& p_tok) const { if (!is_bound()) { @@ -5886,7 +5886,7 @@ int Record_Type::JSON_encode_negtest(const Erroneous_descriptor_t* p_err_descr, return enc_len; } -int Record_Type::JSON_decode(const TTCN_Typedescriptor_t& p_td, JSON_Tokenizer& p_tok, boolean p_silent) +int Record_Type::JSON_decode(const TTCN_Typedescriptor_t& /*p_td*/, JSON_Tokenizer& p_tok, boolean p_silent) { json_token_t token = JSON_TOKEN_NONE; size_t dec_len = p_tok.get_next_token(&token, NULL, NULL); @@ -6162,7 +6162,7 @@ void Empty_Record_Type::encode(const TTCN_Typedescriptor_t& p_td, case TTCN_EncDec::CT_XER: { TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); unsigned XER_coding=va_arg(pvar, unsigned); - XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0); + XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0); p_buf.put_c('\n'); break;} case TTCN_EncDec::CT_JSON: { @@ -6344,7 +6344,7 @@ int Empty_Record_Type::TEXT_decode(const TTCN_Typedescriptor_t& p_td, } int Empty_Record_Type::XER_encode(const XERdescriptor_t& p_td, - TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const + TTCN_Buffer& p_buf, unsigned int flavor, unsigned int /*flavor2*/, int indent, embed_values_enc_struct_t*) const { int encoded_length=(int)p_buf.get_len(); int indenting = !is_canonical(flavor); diff --git a/regression_test/XML/EXER-whitepaper/UseUnion.ttcnpp b/regression_test/XML/EXER-whitepaper/UseUnion.ttcnpp index bf455c093571052f3392fd0ee177e49ad44a6a09..5fc67e078c44075f567785c31c06b88db298047e 100644 --- a/regression_test/XML/EXER-whitepaper/UseUnion.ttcnpp +++ b/regression_test/XML/EXER-whitepaper/UseUnion.ttcnpp @@ -358,6 +358,7 @@ type union UUVal { variant (hs) "XSD:token"; variant (f) "XSD:float"; variant (size) "XSD:string"; + variant (vt) "XSD:NCName" variant (cs) "XSD:normalizedString"; variant (ucs) "XSD:Name"; } @@ -404,7 +405,7 @@ const universal charstring str_uu_rec := "\t<UU xmlns:xsd='http://www.w3.org/2001/XMLSchema' xsi:type='xsd:string'>Small</UU>\n" & "\t<UU>1101</UU>\n" & "\t<UU xmlns:xsd='http://www.w3.org/2001/XMLSchema' xsi:type='xsd:boolean'>true</UU>\n" & -"\t<UU>inconc</UU>\n" & +"\t<UU xmlns:xsd='http://www.w3.org/2001/XMLSchema' xsi:type='xsd:NCName'>inconc</UU>\n" & "\t<UU xmlns:xsd='http://www.w3.org/2001/XMLSchema' xsi:type='xsd:float'>1.600000</UU>\n" & "\t<UU xmlns:xsd='http://www.w3.org/2001/XMLSchema' xsi:type='xsd:token'>164FA</UU>\n" & "\t<UU xmlns:xsd='http://www.w3.org/2001/XMLSchema' xsi:type='xsd:hexBinary'>1BC6</UU>\n" & @@ -452,7 +453,7 @@ DECLARE_EXER_ENCODERS(UUNoAttr, uu_no_attr); const UUNoAttr c_uu_na1 := { { hs := '117BA'H }, { size := Huge } }; const universal charstring str_uu_na1 := -"<UUNoAttr xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' uuatr='117BA'>Huge</UUNoAttr>\n\n"; +"<UUNoAttr xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' uuatr='117BA' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xsi:type='xsd:string'>Huge</UUNoAttr>\n\n"; const UUNoAttr c_uu_na2 := { { roi := { 1, 2, 3, 4 } }, { roi := { 5, 6, 7, 8 } } }; diff --git a/regression_test/XML/XSDBaseType/XSDBaseTypeTest.ttcn b/regression_test/XML/XSDBaseType/XSDBaseTypeTest.ttcn index f08a14ac2ac9588dde40a6b2236c8d8eae3861d5..ecf9c2ed7525b99c608aeaa6456ee2a702a9bd68 100644 --- a/regression_test/XML/XSDBaseType/XSDBaseTypeTest.ttcn +++ b/regression_test/XML/XSDBaseType/XSDBaseTypeTest.ttcn @@ -1142,9 +1142,22 @@ module XSDBaseTypeTest { setverdict(fail, match(my_type_result, my_type)); } - // Currently works incorrectly: Bug 507270 - /*my_type := { t := { cs := "cs" } } - expected := "<UseTypeWithUseUnion xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd1='http://www.w3.org/2001/XMLSchema' xsi:type='xsd1:Name'>name</UseTypeWithUseUnion>\n\n"; + // Bug 507270 + my_type := { t := { cs := "cs" } } + expected := "<UseTypeWithUseUnion xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd0='http://www.w3.org/2001/XMLSchema' xsi:type='xsd0:string'>cs</UseTypeWithUseUnion>\n\n"; + + result := enc_UseTypeWithUseUnion(my_type); + if (oct2unichar(result) != expected) { + setverdict(fail, match(oct2unichar(result), expected)); + } + my_type_result := dec_UseTypeWithUseUnion(result); + if (my_type_result != my_type) { + setverdict(fail, match(my_type_result, my_type)); + } + + my_type := { t := { os := 'ABCD'O } } + expected := "<UseTypeWithUseUnion xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd0='http://www.w3.org/2001/XMLSchema' xsi:type='xsd0:hexBinary'>ABCD</UseTypeWithUseUnion>\n\n"; + result := enc_UseTypeWithUseUnion(my_type); if (oct2unichar(result) != expected) { setverdict(fail, match(oct2unichar(result), expected)); @@ -1152,7 +1165,7 @@ module XSDBaseTypeTest { my_type_result := dec_UseTypeWithUseUnion(result); if (my_type_result != my_type) { setverdict(fail, match(my_type_result, my_type)); - }*/ + } setverdict(pass); }