Browse Source

completing

JNI-44
Volker Birk 10 years ago
parent
commit
0aa8c43e4a
  1. 66
      src/gen_cpp_Engine.ysl2
  2. 14
      src/types_java.ysl2

66
src/gen_cpp_Engine.ysl2

@ -46,10 +46,17 @@ tstylesheet {
choose { choose {
when "count(parm[returns|creates]) > 1" { when "count(parm[returns|creates]) > 1" {
apply "parm[returns|creates]", mode=return { apply "parm[returns|creates]", mode=return;
with "retname", "'result'";
apply "parm[1]", mode=return {
with "name" > result
with "jtype" > _«@name»_Result
with "sig" > ()V
with "jnitype" >
} }
apply "parm[returns|creates]", mode=setresult
with "jtype" > _«@name»_Result
} }
when "count(parm[returns|creates]) = 1" choose { when "count(parm[returns|creates]) = 1" choose {
@ -74,29 +81,62 @@ tstylesheet {
} }
|| ||
return result; return result_;
}
||
} }
template "parm", mode=setresult {
param "jtype";
const "sig" call "toSig" with "type", "name(*[2])";
const "name", "name(*[3])";
||
jfieldID «$name»_field = getFieldID(env, "«$jtype»",
"«$name»", "«$sig»");
env->SetObjectField(result_, «$name»_field, «$name»_);
|| ||
} }
template "parm", mode=return { template "parm", mode=return {
param "jtype" call "toJavaDeclare" with "type", "name(*[2])"; param "type", "name(*[2])";
param "name", "concat(name(*[3]), '_')"; param "jtype" call "toJavaDeclare" with "type", "$type";
param "jnitype"; param "name", "name(*[3])";
param "retname"; param "jnitype" choose {
param "sig", "'()V'"; when "$type = 'message'" > jlong
when "$type = 'Color'" > jint
when "$type = 'stringlist'" > jbyteArray
otherwise >
}
param "retname", "$name";
param "sig" choose {
when "$type = 'message'" > (J)V
when "$type = 'Color'" > (I)V
when "$type = 'stringlist'" > (Ljava.lang.Object;)V
otherwise > ()V
}
choose {
when "$jnitype = 'jbyteArray'"
||
jobject «$name»_ = from_stringlist(env, _«$retname»);
|| ||
jclass clazz_«$name» = findClass(env, "org/pEp/jniadapter/«$jtype»");
jmethodID constructor_«$name» = env->GetMethodID(clazz_«$name», "<init>", "«$sig»"); otherwise {
assert(constructor_«$name»); ||
jclass clazz_«$name»_ = findClass(env, "org/pEp/jniadapter/«$jtype»");
jmethodID constructor_«$name»_ = env->GetMethodID(clazz_«$name»_, "<init>", "«$sig»");
assert(constructor_«$name»_);
|| ||
indent(0); indent(0);
> jobject «$name» = env->NewObject(clazz_«$name», constructor_«$name» > jobject «$name»_ = env->NewObject(clazz_«$name»_, constructor_«$name»_
if "$jnitype" > , («$jnitype») _«$retname» if "$jnitype != ''" > , («$jnitype») _«$retname»
> );\n\n > );\n\n
} }
}
}
template "parm", mode=in { template "parm", mode=in {
const "type", "name(*[2])"; const "type", "name(*[2])";

14
src/types_java.ysl2

@ -36,6 +36,20 @@ function "toJavaDeclare" {
otherwise error | # cannot declare "«$type»" otherwise error | # cannot declare "«$type»"
} }
} }
function "toSig" {
param "type";
choose {
when "$type='string'" error | # cannot declare "string"
otherwise {
> L
call "toJavaDeclare" with "type", "$type";
> ;
}
}
}
function "toIntermediate" { function "toIntermediate" {
param "type"; param "type";

Loading…
Cancel
Save