diff options
| author | krasimir <krasimir@chalmers.se> | 2017-05-10 14:41:55 +0000 |
|---|---|---|
| committer | krasimir <krasimir@chalmers.se> | 2017-05-10 14:41:55 +0000 |
| commit | a77ae5da300473b315f47202319505ca7c804e62 (patch) | |
| tree | 5d27d50fb4e1d939172a57661aee096872826152 /src/runtime/java/jpgf.c | |
| parent | 83117602af5169dac3a714d8a6e32a40508d3e71 (diff) | |
added Expr.apply
Diffstat (limited to 'src/runtime/java/jpgf.c')
| -rw-r--r-- | src/runtime/java/jpgf.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/runtime/java/jpgf.c b/src/runtime/java/jpgf.c index 560f0e317..026bd9a48 100644 --- a/src/runtime/java/jpgf.c +++ b/src/runtime/java/jpgf.c @@ -1226,8 +1226,32 @@ Java_org_grammaticalframework_pgf_Expr_initStringLit(JNIEnv* env, jclass clazz, return expr; } +JNIEXPORT jlong JNICALL +Java_org_grammaticalframework_pgf_Expr_initApp__Lorg_grammaticalframework_pgf_Expr_2_3Lorg_grammaticalframework_pgf_Expr_2J +(JNIEnv* env, jclass clazz, jobject jfun, jobjectArray args, jlong jpool) +{ + GuPool* pool = l2p(jpool); + PgfExpr expr = gu_variant_from_ptr(get_ref(env, jfun)); + + size_t n_args = (*env)->GetArrayLength(env, args); + for (size_t i = 0; i < n_args; i++) { + PgfExpr fun = expr; + PgfExpr arg = gu_variant_from_ptr(get_ref(env, (*env)->GetObjectArrayElement(env, args, i))); + + PgfExprApp* e = + gu_new_variant(PGF_EXPR_APP, + PgfExprApp, + &expr, pool); + e->fun = fun; + e->arg = arg; + } + + return expr; +} + JNIEXPORT jlong JNICALL -Java_org_grammaticalframework_pgf_Expr_initApp(JNIEnv* env, jclass clazz, jstring jfun, jobjectArray args, jlong jpool) +Java_org_grammaticalframework_pgf_Expr_initApp__Ljava_lang_String_2_3Lorg_grammaticalframework_pgf_Expr_2J +(JNIEnv* env, jclass clazz, jstring jfun, jobjectArray args, jlong jpool) { GuPool* pool = l2p(jpool); PgfExpr expr; |
