diff --git a/build.bat b/build.bat index 381b44c..b8948d2 100644 --- a/build.bat +++ b/build.bat @@ -5,9 +5,15 @@ where cmake >NUL 2>NUL IF %ERRORLEVEL% == 0 GOTO build SET PATH=%PATH%;C:\Program Files\CMake\bin\ +:: VS2026 +SET PATH=%PATH%;C:\Program Files\Microsoft Visual Studio\18\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\ +SET PATH=%PATH%;C:\Program Files\Microsoft Visual Studio\18\Professional\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\ +SET PATH=%PATH%;C:\Program Files\Microsoft Visual Studio\18\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\ +:: VS2022 SET PATH=%PATH%;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\ SET PATH=%PATH%;C:\Program Files\Microsoft Visual Studio\2022\Professional\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\ SET PATH=%PATH%;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\ +:: VS2019 SET PATH=%PATH%;C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\ SET PATH=%PATH%;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\ SET PATH=%PATH%;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\ diff --git a/compiler/back-ends/c++-gen/gen-code.c b/compiler/back-ends/c++-gen/gen-code.c index 7a068b3..f04c715 100644 --- a/compiler/back-ends/c++-gen/gen-code.c +++ b/compiler/back-ends/c++-gen/gen-code.c @@ -2212,8 +2212,7 @@ void PrintChoiceDefCodeJsonEnc(FILE* src, FILE* hdr, Module* m, CxxRules* r, Typ fprintf(src, "void %s::JEnc(SJson::Value& b) const\n", td->cxxTypeDefInfo->className); fprintf(src, "{\n"); /* print local vars */ - fprintf(src, "\tb = SJson::Value(SJson::objectValue);\n\n"); - fprintf(src, "\tSJson::Value tmp;\n\n"); + fprintf(src, "\tb = SJson::Value(SJson::objectValue);\n"); /* print local vars */ @@ -2234,9 +2233,7 @@ void PrintChoiceDefCodeJsonEnc(FILE* src, FILE* hdr, Module* m, CxxRules* r, Typ /* encode content */ fprintf(src, "\t\t\t%s", varName); fprintf(src, "%s", getAccessor(cxxtri->isPtr)); - fprintf(src, "JEnc(tmp);\n"); - fprintf(src, "\t\t\tb[\"%s\"] = tmp;\n", varName); - + fprintf(src, "JEnc(b[\"%s\"]);\n", varName); fprintf(src, "\t\tbreak;\n"); } } @@ -2262,7 +2259,6 @@ void PrintChoiceDefCodeJsonDec(FILE* src, FILE* hdr, Module* m, CxxRules* r, Typ fprintf(src, "\tif (!b.isObject())\n"); fprintf(src, "\t\treturn false;\n\n"); - fprintf(src, "\tSJson::Value tmp;\n"); FOR_EACH_LIST_ELMT(e, choice->basicType->a.choice) { @@ -3409,11 +3405,9 @@ void PrintSeqDefCodeJsonEnc(FILE* src, FILE* hdr, Module* m, TypeDef* td, Type* fprintf(hdr, "\tvoid JEnc(SJson::Value& b) const override;\n"); fprintf(src, "void %s::JEnc(SJson::Value& b) const\n", td->cxxTypeDefInfo->className); fprintf(src, "{\n"); - fprintf(src, "\tb = SJson::Value(SJson::objectValue);\n\n"); - fprintf(src, "\tSJson::Value tmp;\n\n"); + fprintf(src, "\tb = SJson::Value(SJson::objectValue);\n"); NamedType* e; - bool bFirst = true; FOR_EACH_LIST_ELMT(e, seq->basicType->a.sequence) { const CxxTRI* cxxtri = e->type->cxxTypeRefInfo; @@ -3424,10 +3418,6 @@ void PrintSeqDefCodeJsonEnc(FILE* src, FILE* hdr, Module* m, TypeDef* td, Type* if (e->type->basicType->choiceId != BASICTYPE_EXTENSION) { - if (bFirst) - bFirst = false; - else - fprintf(src, "\n"); /* print optional test if nec */ if (e->type->defaultVal != NULL) { @@ -3442,7 +3432,6 @@ void PrintSeqDefCodeJsonEnc(FILE* src, FILE* hdr, Module* m, TypeDef* td, Type* case BASICTYPE_INTEGER: case BASICTYPE_ENUMERATED: fprintf(src, "\tif ( %s(%s) && *%s != %d )\n", cxxtri->optTestRoutineName, varName, varName, defVal->basicValue->a.integer); - fprintf(src, "\t{\n"); break; case BASICTYPE_BITSTRING: { @@ -3456,13 +3445,11 @@ void PrintSeqDefCodeJsonEnc(FILE* src, FILE* hdr, Module* m, TypeDef* td, Type* { // check for default bit. fprintf(src, "\tif ( %s(%s) && (! %s->soloBitCheck(%s::%s)) )\n", cxxtri->optTestRoutineName, varName, varName, cxxtri->className, defBitStr); - fprintf(src, "\t{\n"); } else { // if default is empty then check for empty fprintf(src, "\tif ( %s(%s) && (! %s->IsEmpty()) ){", cxxtri->optTestRoutineName, varName, varName); - fprintf(src, "\t{\n"); } // RWC;ALLOW "}" alignment using editor... @@ -3474,7 +3461,6 @@ void PrintSeqDefCodeJsonEnc(FILE* src, FILE* hdr, Module* m, TypeDef* td, Type* break; case BASICTYPE_BOOLEAN: fprintf(src, "\tif (%s(%s) && *%s != %s)\n", cxxtri->optTestRoutineName, varName, varName, defVal->basicValue->a.boolean ? "true" : "false"); - fprintf(src, "\t{\n"); // RWC;ALLOW "}" alignment using editor... break; default: @@ -3485,7 +3471,6 @@ void PrintSeqDefCodeJsonEnc(FILE* src, FILE* hdr, Module* m, TypeDef* td, Type* else if (e->type->optional) { fprintf(src, "\tif (%s(%s))\n", cxxtri->optTestRoutineName, varName); - fprintf(src, "\t{\n"); // RWC;ALLOW "}" alignment using editor... } @@ -3494,12 +3479,7 @@ void PrintSeqDefCodeJsonEnc(FILE* src, FILE* hdr, Module* m, TypeDef* td, Type* /* encode content */ fprintf(src, "%s%s", szIndent, varName); fprintf(src, "%s", getAccessor(cxxtri->isPtr)); - fprintf(src, "JEnc(tmp);\n"); - fprintf(src, "%sb[\"%s\"] = tmp;\n", szIndent, varName); - - /* close optional test if nec */ - if (e->type->optional || e->type->defaultVal != NULL) - fprintf(src, "\t}\n"); + fprintf(src, "JEnc(b[\"%s\"]);\n", varName); } } @@ -3517,7 +3497,6 @@ void PrintSeqDefCodeJsonDec(FILE* src, FILE* hdr, Module* m, TypeDef* td, Type* fprintf(src, "\tClear();\n\n"); fprintf(src, "\tif (!b.isObject())\n"); fprintf(src, "\t\treturn false;\n\n"); - fprintf(src, "\tSJson::Value tmp;\n"); NamedType* e; FOR_EACH_LIST_ELMT(e, seq->basicType->a.sequence) diff --git a/compiler/back-ends/ts-gen/gluecode/SNACCROSE.ts b/compiler/back-ends/ts-gen/gluecode/SNACCROSE.ts index e05e2d6..6ab15f3 100644 --- a/compiler/back-ends/ts-gen/gluecode/SNACCROSE.ts +++ b/compiler/back-ends/ts-gen/gluecode/SNACCROSE.ts @@ -3,7 +3,7 @@ /* * SNACCROSE.ts * "SNACC-ROSE" ASN.1 stubs. - * This file was generated by estos esnacc (V6.0.26, 17.04.2025) + * This file was generated by estos esnacc (V6.0.36, 12.01.2026) * based on Coral WinSnacc written by Deepak Gupta * NOTE: This is a machine generated file - editing not recommended */ diff --git a/compiler/back-ends/ts-gen/gluecode/SNACCROSE_Converter.ts b/compiler/back-ends/ts-gen/gluecode/SNACCROSE_Converter.ts index 1acd131..84d4257 100644 --- a/compiler/back-ends/ts-gen/gluecode/SNACCROSE_Converter.ts +++ b/compiler/back-ends/ts-gen/gluecode/SNACCROSE_Converter.ts @@ -3,7 +3,7 @@ /* * SNACCROSE_Converter.ts * "SNACC-ROSE" ASN.1 stubs. - * This file was generated by estos esnacc (V6.0.26, 17.04.2025) + * This file was generated by estos esnacc (V6.0.36, 12.01.2026) * based on Coral WinSnacc written by Deepak Gupta * NOTE: This is a machine generated file - editing not recommended */ diff --git a/cpp-lib/include/SNACCROSE.h b/cpp-lib/include/SNACCROSE.h index da81c21..ec00693 100644 --- a/cpp-lib/include/SNACCROSE.h +++ b/cpp-lib/include/SNACCROSE.h @@ -2,7 +2,7 @@ // // SNACCROSE.h - class definitions for ASN.1 module SNACC-ROSE // -// This file was generated by estos esnacc (V6.0.26, 17.04.2025) +// This file was generated by estos esnacc (V6.0.36, 12.01.2026) // based on Coral WinSnacc written by Deepak Gupta // NOTE: This is a machine generated file - editing not recommended // @@ -245,6 +245,7 @@ class ROSEError : public AsnType // [PrintCxxListClass] class ROSEAuthList : public AsnSeqOf { +public: ROSEAuthList* Clone() const override; const char* typeName() const override; }; diff --git a/cpp-lib/jsoncpp/include/value.h b/cpp-lib/jsoncpp/include/value.h index 27b8ddd..c3871f3 100644 --- a/cpp-lib/jsoncpp/include/value.h +++ b/cpp-lib/jsoncpp/include/value.h @@ -956,7 +956,7 @@ inline const Value& Value::back() const { return *(--end()); } inline Value& Value::back() { return *(--end()); } -} // namespace Sson +} // namespace SJson #pragma pack(pop) diff --git a/cpp-lib/jsoncpp/json_value.cpp b/cpp-lib/jsoncpp/json_value.cpp index 877fbec..a11a01a 100644 --- a/cpp-lib/jsoncpp/json_value.cpp +++ b/cpp-lib/jsoncpp/json_value.cpp @@ -357,7 +357,6 @@ Value::Value(ValueType type) { initBasic(type); switch (type) { case nullValue: - break; case intValue: case uintValue: value_.int_ = 0; @@ -1033,6 +1032,7 @@ void Value::releasePayload() { case arrayValue: case objectValue: delete value_.map_; + value_.map_ = nullptr; break; default: JSON_ASSERT_UNREACHABLE; diff --git a/cpp-lib/src/SNACCROSE.cpp b/cpp-lib/src/SNACCROSE.cpp index 67a6794..f1a8531 100644 --- a/cpp-lib/src/SNACCROSE.cpp +++ b/cpp-lib/src/SNACCROSE.cpp @@ -2,7 +2,7 @@ // // SNACCROSE.cpp - class member functions for ASN.1 module SNACC-ROSE // -// This file was generated by estos esnacc (V6.0.26, 17.04.2025) +// This file was generated by estos esnacc (V6.0.36, 12.01.2026) // based on Coral WinSnacc written by Deepak Gupta // NOTE: This is a machine generated file - editing not recommended // @@ -214,18 +214,13 @@ void ROSERejectChoice::BDec(const AsnBuf& _b, AsnLen& bytesDecoded) void ROSERejectChoice::JEnc(SJson::Value& b) const { b = SJson::Value(SJson::objectValue); - - SJson::Value tmp; - switch (choiceId) { case invokedIDCid: - invokedID->JEnc(tmp); - b["invokedID"] = tmp; + invokedID->JEnc(b["invokedID"]); break; case invokednullCid: - invokednull->JEnc(tmp); - b["invokednull"] = tmp; + invokednull->JEnc(b["invokednull"]); break; default: throw EXCEPT("Choice is empty", ENCODE_ERROR); @@ -238,7 +233,6 @@ bool ROSERejectChoice::JDec(const SJson::Value& b){ if (!b.isObject()) return false; - SJson::Value tmp; if (b.isMember("invokedID")) { choiceId = invokedIDCid; @@ -460,14 +454,8 @@ void ROSEResultSeq::BDec(const AsnBuf& _b, AsnLen& bytesDecoded) void ROSEResultSeq::JEnc(SJson::Value& b) const { b = SJson::Value(SJson::objectValue); - - SJson::Value tmp; - - resultValue.JEnc(tmp); - b["resultValue"] = tmp; - - result.JEnc(tmp); - b["result"] = tmp; + resultValue.JEnc(b["resultValue"]); + result.JEnc(b["result"]); } // [PrintSeqDefCodeJsonDec] @@ -477,7 +465,6 @@ bool ROSEResultSeq::JDec(const SJson::Value& b){ if (!b.isObject()) return false; - SJson::Value tmp; if (b.isMember("resultValue")) { if (!resultValue.JDec(b["resultValue"])) @@ -704,14 +691,8 @@ void ROSEAuth::BDec(const AsnBuf& _b, AsnLen& bytesDecoded) void ROSEAuth::JEnc(SJson::Value& b) const { b = SJson::Value(SJson::objectValue); - - SJson::Value tmp; - - method.JEnc(tmp); - b["method"] = tmp; - - authdata.JEnc(tmp); - b["authdata"] = tmp; + method.JEnc(b["method"]); + authdata.JEnc(b["authdata"]); } // [PrintSeqDefCodeJsonDec] @@ -721,7 +702,6 @@ bool ROSEAuth::JDec(const SJson::Value& b){ if (!b.isObject()) return false; - SJson::Value tmp; if (b.isMember("method")) { if (!method.JDec(b["method"])) @@ -1031,26 +1011,12 @@ void ROSEError::BDec(const AsnBuf& _b, AsnLen& bytesDecoded) void ROSEError::JEnc(SJson::Value& b) const { b = SJson::Value(SJson::objectValue); - - SJson::Value tmp; - if (NOT_NULL(sessionID)) - { - sessionID->JEnc(tmp); - b["sessionID"] = tmp; - } - - invokedID.JEnc(tmp); - b["invokedID"] = tmp; - - error_value.JEnc(tmp); - b["error_value"] = tmp; - + sessionID->JEnc(b["sessionID"]); + invokedID.JEnc(b["invokedID"]); + error_value.JEnc(b["error_value"]); if (NOT_NULL(error)) - { - error->JEnc(tmp); - b["error"] = tmp; - } + error->JEnc(b["error"]); } // [PrintSeqDefCodeJsonDec] @@ -1060,7 +1026,6 @@ bool ROSEError::JDec(const SJson::Value& b){ if (!b.isObject()) return false; - SJson::Value tmp; if (b.isMember("sessionID")) { delete sessionID; @@ -1362,17 +1327,9 @@ void ROSEAuthRequest::BDec(const AsnBuf& _b, AsnLen& bytesDecoded) void ROSEAuthRequest::JEnc(SJson::Value& b) const { b = SJson::Value(SJson::objectValue); - - SJson::Value tmp; - - auth.JEnc(tmp); - b["auth"] = tmp; - + auth.JEnc(b["auth"]); if (NOT_NULL(context)) - { - context->JEnc(tmp); - b["context"] = tmp; - } + context->JEnc(b["context"]); } // [PrintSeqDefCodeJsonDec] @@ -1382,7 +1339,6 @@ bool ROSEAuthRequest::JDec(const SJson::Value& b){ if (!b.isObject()) return false; - SJson::Value tmp; if (b.isMember("auth")) { if (!auth.JDec(b["auth"])) @@ -1635,17 +1591,9 @@ void ROSEAuthResult::BDec(const AsnBuf& _b, AsnLen& bytesDecoded) void ROSEAuthResult::JEnc(SJson::Value& b) const { b = SJson::Value(SJson::objectValue); - - SJson::Value tmp; - - authList.JEnc(tmp); - b["authList"] = tmp; - + authList.JEnc(b["authList"]); if (NOT_NULL(context)) - { - context->JEnc(tmp); - b["context"] = tmp; - } + context->JEnc(b["context"]); } // [PrintSeqDefCodeJsonDec] @@ -1655,7 +1603,6 @@ bool ROSEAuthResult::JDec(const SJson::Value& b){ if (!b.isObject()) return false; - SJson::Value tmp; if (b.isMember("authList")) { if (!authList.JDec(b["authList"])) @@ -2099,44 +2046,18 @@ void ROSEInvoke::BDec(const AsnBuf& _b, AsnLen& bytesDecoded) void ROSEInvoke::JEnc(SJson::Value& b) const { b = SJson::Value(SJson::objectValue); - - SJson::Value tmp; - if (NOT_NULL(sessionID)) - { - sessionID->JEnc(tmp); - b["sessionID"] = tmp; - } - - invokeID.JEnc(tmp); - b["invokeID"] = tmp; - + sessionID->JEnc(b["sessionID"]); + invokeID.JEnc(b["invokeID"]); if (NOT_NULL(linked_ID)) - { - linked_ID->JEnc(tmp); - b["linked_ID"] = tmp; - } - + linked_ID->JEnc(b["linked_ID"]); if (NOT_NULL(operationName)) - { - operationName->JEnc(tmp); - b["operationName"] = tmp; - } - + operationName->JEnc(b["operationName"]); if (NOT_NULL(authentication)) - { - authentication->JEnc(tmp); - b["authentication"] = tmp; - } - - operationID.JEnc(tmp); - b["operationID"] = tmp; - + authentication->JEnc(b["authentication"]); + operationID.JEnc(b["operationID"]); if (NOT_NULL(argument)) - { - argument->JEnc(tmp); - b["argument"] = tmp; - } + argument->JEnc(b["argument"]); } // [PrintSeqDefCodeJsonDec] @@ -2146,7 +2067,6 @@ bool ROSEInvoke::JDec(const SJson::Value& b){ if (!b.isObject()) return false; - SJson::Value tmp; if (b.isMember("sessionID")) { delete sessionID; @@ -2546,23 +2466,11 @@ void ROSEResult::BDec(const AsnBuf& _b, AsnLen& bytesDecoded) void ROSEResult::JEnc(SJson::Value& b) const { b = SJson::Value(SJson::objectValue); - - SJson::Value tmp; - if (NOT_NULL(sessionID)) - { - sessionID->JEnc(tmp); - b["sessionID"] = tmp; - } - - invokeID.JEnc(tmp); - b["invokeID"] = tmp; - + sessionID->JEnc(b["sessionID"]); + invokeID.JEnc(b["invokeID"]); if (NOT_NULL(result)) - { - result->JEnc(tmp); - b["result"] = tmp; - } + result->JEnc(b["result"]); } // [PrintSeqDefCodeJsonDec] @@ -2572,7 +2480,6 @@ bool ROSEResult::JDec(const SJson::Value& b){ if (!b.isObject()) return false; - SJson::Value tmp; if (b.isMember("sessionID")) { delete sessionID; @@ -2889,26 +2796,19 @@ void RejectProblem::BDec(const AsnBuf& _b, AsnLen& bytesDecoded) void RejectProblem::JEnc(SJson::Value& b) const { b = SJson::Value(SJson::objectValue); - - SJson::Value tmp; - switch (choiceId) { case generalProblemCid: - generalProblem->JEnc(tmp); - b["generalProblem"] = tmp; + generalProblem->JEnc(b["generalProblem"]); break; case invokeProblemCid: - invokeProblem->JEnc(tmp); - b["invokeProblem"] = tmp; + invokeProblem->JEnc(b["invokeProblem"]); break; case returnResultProblemCid: - returnResultProblem->JEnc(tmp); - b["returnResultProblem"] = tmp; + returnResultProblem->JEnc(b["returnResultProblem"]); break; case returnErrorProblemCid: - returnErrorProblem->JEnc(tmp); - b["returnErrorProblem"] = tmp; + returnErrorProblem->JEnc(b["returnErrorProblem"]); break; default: throw EXCEPT("Choice is empty", ENCODE_ERROR); @@ -2921,7 +2821,6 @@ bool RejectProblem::JDec(const SJson::Value& b){ if (!b.isObject()) return false; - SJson::Value tmp; if (b.isMember("generalProblem")) { choiceId = generalProblemCid; @@ -3351,35 +3250,15 @@ void ROSEReject::BDec(const AsnBuf& _b, AsnLen& bytesDecoded) void ROSEReject::JEnc(SJson::Value& b) const { b = SJson::Value(SJson::objectValue); - - SJson::Value tmp; - if (NOT_NULL(sessionID)) - { - sessionID->JEnc(tmp); - b["sessionID"] = tmp; - } - - invokedID.JEnc(tmp); - b["invokedID"] = tmp; - + sessionID->JEnc(b["sessionID"]); + invokedID.JEnc(b["invokedID"]); if (NOT_NULL(reject)) - { - reject->JEnc(tmp); - b["reject"] = tmp; - } - + reject->JEnc(b["reject"]); if (NOT_NULL(details)) - { - details->JEnc(tmp); - b["details"] = tmp; - } - + details->JEnc(b["details"]); if (NOT_NULL(authentication)) - { - authentication->JEnc(tmp); - b["authentication"] = tmp; - } + authentication->JEnc(b["authentication"]); } // [PrintSeqDefCodeJsonDec] @@ -3389,7 +3268,6 @@ bool ROSEReject::JDec(const SJson::Value& b){ if (!b.isObject()) return false; - SJson::Value tmp; if (b.isMember("sessionID")) { delete sessionID; @@ -3748,26 +3626,19 @@ void ROSEMessage::BDec(const AsnBuf& _b, AsnLen& bytesDecoded) void ROSEMessage::JEnc(SJson::Value& b) const { b = SJson::Value(SJson::objectValue); - - SJson::Value tmp; - switch (choiceId) { case invokeCid: - invoke->JEnc(tmp); - b["invoke"] = tmp; + invoke->JEnc(b["invoke"]); break; case resultCid: - result->JEnc(tmp); - b["result"] = tmp; + result->JEnc(b["result"]); break; case errorCid: - error->JEnc(tmp); - b["error"] = tmp; + error->JEnc(b["error"]); break; case rejectCid: - reject->JEnc(tmp); - b["reject"] = tmp; + reject->JEnc(b["reject"]); break; default: throw EXCEPT("Choice is empty", ENCODE_ERROR); @@ -3780,7 +3651,6 @@ bool ROSEMessage::JDec(const SJson::Value& b){ if (!b.isObject()) return false; - SJson::Value tmp; if (b.isMember("invoke")) { choiceId = invokeCid; diff --git a/version.h b/version.h index b55dfd3..9caf2a6 100644 --- a/version.h +++ b/version.h @@ -1,8 +1,8 @@ #ifndef VERSION_H #define VERSION_H -#define VERSION "6.0.35" -#define VERSION_RC 6, 0, 35 -#define RELDATE "15.12.2025" +#define VERSION "6.0.36" +#define VERSION_RC 6, 0, 36 +#define RELDATE "12.01.2026" #endif // VERSION_H