diff --git a/src/runtime/java/jpgf.c b/src/runtime/java/jpgf.c index db7765551..4d00b3c4b 100644 --- a/src/runtime/java/jpgf.c +++ b/src/runtime/java/jpgf.c @@ -1054,6 +1054,24 @@ Java_org_grammaticalframework_pgf_Expr_initApp(JNIEnv* env, jclass clazz, jstrin return expr; } +JNIEXPORT jboolean JNICALL +Java_org_grammaticalframework_pgf_Expr_equals(JNIEnv* env, jobject self, jobject other) +{ + jclass self_class = (*env)->GetObjectClass(env, self); + jclass other_class = (*env)->GetObjectClass(env, other); + + if (!(*env)->IsAssignableFrom(env, other_class, self_class)) + return JNI_FALSE; + + PgfExpr e_self = gu_variant_from_ptr(l2p(get_ref(env, self))); + PgfExpr e_other = gu_variant_from_ptr(l2p(get_ref(env, other))); + + if (pgf_expr_eq(e_self, e_other)) + return JNI_TRUE; + else + return JNI_FALSE; +} + JNIEXPORT jstring JNICALL Java_org_grammaticalframework_pgf_Type_getCategory(JNIEnv* env, jobject self) { diff --git a/src/runtime/java/org/grammaticalframework/pgf/Expr.java b/src/runtime/java/org/grammaticalframework/pgf/Expr.java index 753055ff9..f576f681a 100644 --- a/src/runtime/java/org/grammaticalframework/pgf/Expr.java +++ b/src/runtime/java/org/grammaticalframework/pgf/Expr.java @@ -37,6 +37,8 @@ public class Expr implements Serializable { public static native Expr readExpr(String s) throws PGFError; + public native boolean equals(Expr e); + private static native String showExpr(long ref); private static native long initStringLit(String s, long pool);