diff --git a/src/gen_cpp_Engine.ysl2 b/src/gen_cpp_Engine.ysl2 index df88b67..1356c7d 100644 --- a/src/gen_cpp_Engine.ysl2 +++ b/src/gen_cpp_Engine.ysl2 @@ -99,8 +99,16 @@ tstylesheet { const "name", "name(*[3])"; || jfieldID «$name»_field = getFieldID(env, "«$jtype»", - "«$name»", "«$sig»"); - env->SetObjectField(result_, «$name»_field, «$name»_); + "«$name»", "«$sig»"); + if («$name»_) + env->SetObjectField(result_, «$name»_field, «$name»_); + || + if "$name = 'dst'" + || + else + env->SetObjectField(result_, «$name»_field, src); + || + || || } @@ -126,20 +134,32 @@ tstylesheet { choose { when "$jnitype = 'jbyteArray'" || - jobject «$name»_ = from_stringlist(env, _«$retname»); + jobject «$name»_ = NULL; + if (_«$retname») + «$name»_ = from_stringlist(env, _«$retname»); || otherwise { - || - jclass clazz_«$name»_ = findClass(env, "org/pEp/jniadapter/«$jtype»"); - jmethodID constructor_«$name»_ = env->GetMethodID(clazz_«$name»_, "", "«$sig»"); - assert(constructor_«$name»_); - || - indent(0); - > jobject «$name»_ = env->NewObject(clazz_«$name»_, constructor_«$name»_ - if "$jnitype != ''" > , («$jnitype») _«$retname» - > );\n\n + | jobject «$name»_ = NULL; + indent(0); + if "$retname != 'result'" > if (_«$retname») + > {\n + || + jclass clazz_«$name»_ = findClass(env, "org/pEp/jniadapter/«$jtype»"); + jmethodID constructor_«$name»_ = env->GetMethodID(clazz_«$name»_, "", "«$sig»"); + assert(constructor_«$name»_); + || + + indent(1); + > «$name»_ = env->NewObject(clazz_«$name»_, constructor_«$name»_ + if "$jnitype != ''" > , («$jnitype») _«$retname» + > );\n + + || + } + + || } } }