summaryrefslogtreecommitdiff
path: root/src/runtime/java/jpgf.c
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2017-05-10 14:41:55 +0000
committerkrasimir <krasimir@chalmers.se>2017-05-10 14:41:55 +0000
commita77ae5da300473b315f47202319505ca7c804e62 (patch)
tree5d27d50fb4e1d939172a57661aee096872826152 /src/runtime/java/jpgf.c
parent83117602af5169dac3a714d8a6e32a40508d3e71 (diff)
added Expr.apply
Diffstat (limited to 'src/runtime/java/jpgf.c')
-rw-r--r--src/runtime/java/jpgf.c26
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;