[m-rev.] for review: delete remaining support for Java native methods
Julien Fischer
jfischer at opturion.com
Mon Jan 20 04:01:12 AEDT 2025
For review by anyone.
The request for review is for the concept, the diff is trivial.
-----------------------
Delete remaining support for Java native methods.
Prior to 2009 some of the standard library predicates were implemented using
Java native methods. These were disabled or replaced by commit 9fc47f5c in
order to give us pure Java versions of the runtime and standard libraries.
However, the machinery for supporting native methods was left in place. This
change deletes that machinery. We are not going to use it again.
library/Mmakefile:
Do not build Native.so. (From the looks of it we never installed it
anyway.)
java/runtime/Native.c:
Delete the C implementations of the native methods ...
java/runtime/Native.java.in:
... and the corresponding Java support for them.
java/runtime/Mmakefile:
Delete this Mmakefile, there is no longer anything for it to do.
configure.ac:
Do not create Native.java.
Julien.
diff --git a/configure.ac b/configure.ac
index d761a11..f8469a4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5497,7 +5497,6 @@ bindist/bindist.INSTALL
bindist/bindist.Makefile
runtime/mercury_dotnet.cs
java/runtime/Constants.java
-java/runtime/Native.java
compiler/COMP_FLAGS
grade_lib/GRADE_LIB_FLAGS
library/LIB_FLAGS
diff --git a/java/runtime/Mmakefile b/java/runtime/Mmakefile
deleted file mode 100644
index 1e96cf4..0000000
--- a/java/runtime/Mmakefile
+++ /dev/null
@@ -1,39 +0,0 @@
-#-----------------------------------------------------------------------------#
-# vim: ts=8 sw=8 noexpandtab ft=make
-#-----------------------------------------------------------------------------#
-
-# Copyright (C) 2004 The University of Melbourne.
-# Copyright (C) 2015, 2018 The Mercury team.
-# This file is distributed under the terms specified in COPYING.LIB.
-#
-# This Makefile compiles the shared object for use with
-# jmercury.runtime.Native.
-#
-
-MERCURY_DIR = ../..
-RUNTIME_DIR = $(MERCURY_DIR)/runtime
-
-include $(MERCURY_DIR)/Mmake.common
-
-NATIVE_PIC = Native.$(EXT_FOR_PIC_OBJECTS)
-NATIVE_SO = Native.$(EXT_FOR_SHARED_LIB)
-
-MAIN_TARGET = $(NATIVE_SO)
-
-PIC_OBJS = $(RUNTIME_DIR)/mercury_timing.$(EXT_FOR_PIC_OBJECTS) \
- $(NATIVE_PIC)
-
-CFLAGS = -I$(RUNTIME_DIR)
-
-$(NATIVE_SO): $(PIC_OBJS)
- $(LINK_SHARED_OBJ) -o $(NATIVE_SO) $(PIC_OBJS)
-
-$(NATIVE_PIC): Native.c
- $(MGNUC) $(ALL_GRADEFLAGS) $(ALL_MGNUCFLAGS) \
- $(CFLAGS_FOR_PIC) -o $(NATIVE_PIC) -c Native.c
-
-clean:
- rm -f $(PIC_OBJS)
-
-realclean:
- rm -f $(PIC_OBJS) $(NATIVE_SO) *.class
diff --git a/java/runtime/Native.c b/java/runtime/Native.c
deleted file mode 100644
index 730fb23..0000000
--- a/java/runtime/Native.c
+++ /dev/null
@@ -1,114 +0,0 @@
-// vim: ts=4 sw=4 expandtab ft=c
-//
-// Copyright (C) 2004, 2006 The University of Melbourne.
-// Copyright (C) 2018 The Mercury team.
-// This file is distributed under the terms specified in COPYING.LIB.
-//
-
-// File: Native.c - Native code for java/runtime/Native.java.
-
-#include <jni.h>
-
-/*
- * Class: Native
- * Method: clock
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_jmercury_runtime_Native_clock(JNIEnv *, jclass);
-
-/*
- * Class: Native
- * Method: clocks_per_sec
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_jmercury_runtime_Native_clocks_1per_1sec(
- JNIEnv *, jclass);
-
-/*
- * Class: Native
- * Method: times
- * Signature: ()[I
- */
-JNIEXPORT jintArray JNICALL Java_jmercury_runtime_Native_times(
- JNIEnv *, jclass);
-
-/*
- * Class: Native
- * Method: clk_tck
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_jmercury_runtime_Native_clk_1tck(JNIEnv *, jclass);
-
-/*
- * Class: Native
- * Method: get_user_cpu_milliseconds
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL
Java_jmercury_runtime_Native_get_1user_1cpu_1milliseconds(
- JNIEnv *, jclass);
-
-#include "mercury_imp.h"
-#include "mercury_timing.h"
-
-#include <time.h>
-#ifdef MR_HAVE_SYS_TYPES_H
- #include <sys/types.h>
-#endif
-#ifdef MR_HAVE_SYS_TIMES_H
- #include <sys/times.h>
-#endif
-#ifdef MR_HAVE_UNISTD_H
- #include <unistd.h>
-#endif
-
-JNIEXPORT jint JNICALL
-Java_jmercury_runtime_Native_clock(JNIEnv *env, jclass obj) {
- return (MR_Integer) clock();
-}
-
-JNIEXPORT jint JNICALL
-Java_jmercury_runtime_Native_clocks_1per_1sec(JNIEnv *env, jclass obj) {
- return CLOCKS_PER_SEC;
-}
-
-JNIEXPORT jintArray JNICALL
-Java_jmercury_runtime_Native_times(JNIEnv *env, jclass obj) {
- jint intarray[5];
- jintArray result;
-
-#ifdef MR_HAVE_POSIX_TIMES
- struct tms t;
-
- intarray[0] = (MR_Integer) times(&t);
- intarray[1] = (MR_Integer) t.tms_utime;
- intarray[2] = (MR_Integer) t.tms_stime;
- intarray[3] = (MR_Integer) t.tms_cutime;
- intarray[4] = (MR_Integer) t.tms_cstime;
-#else
- intarray[0] = -1;
-#endif
-
- result = (*env)->NewIntArray(env, 5);
- if (result != NULL) {
- (*env)->SetIntArrayRegion(env, result, 0, 5, intarray);
- }
-
- return result;
-}
-
-JNIEXPORT jint JNICALL Java_jmercury_runtime_Native_clk_1tck(
- JNIEnv *env, jclass obj)
-{
-#if defined(MR_CLOCK_TICKS_PER_SECOND)
- return MR_CLOCK_TICKS_PER_SECOND;
-#else
- return -1;
-#endif
-}
-
-JNIEXPORT jint JNICALL
-Java_jmercury_runtime_Native_get_1user_1cpu_1milliseconds(
- JNIEnv *env, jclass obj)
-{
- return MR_get_user_cpu_milliseconds();
-}
diff --git a/java/runtime/Native.java.in b/java/runtime/Native.java.in
deleted file mode 100644
index 0f33077..0000000
--- a/java/runtime/Native.java.in
+++ /dev/null
@@ -1,140 +0,0 @@
-// vim: ts=4 sw=4 expandtab ft=java
-//
-// @configure_input@
-//
-// Copyright (C) 2004, 2006 The University of Melbourne.
-// Copyright (C) 2018 The Mercury team.
-// This file is distributed under the terms specified in COPYING.LIB.
-//
-//
-// This class exists to provide any native functionality required by the Java
-// implementation. It uses JNI to access a shared object which it searches
-// for in all the directories listed in the current CLASSPATH.
-//
-// At the moment the only services provided are those relating to timing.
-//
-
-package jmercury.runtime;
-
-public class Native {
- /**
- * SHARED_OBJ is the name of the shared object which contains
- * all the compiled native code.
- */
- private static final java.lang.String SHARED_OBJ =
- "Native. at EXT_FOR_SHARED_LIB@";
-
- /**
- * attemptedLoad records whether or not the user has yet attempted
- * to load the shared library.
- */
- private static boolean attemptedLoad = false;
-
- /**
- * available and isAvailable() are true when native functionality
- * is available. (ie SHARED_OBJ was loaded successfully)
- */
- private static boolean available = false;
-
- /**
- * isAvailable() as the side effect of attempting to load the library
- * if this has not already been done.
- */
- public static boolean isAvailable() {
- if (!attemptedLoad) {
- load_library();
- }
- return available;
- }
-
- static {
- load_library();
- }
-
- /**
- * load_library():
- * Searches all the directories listed in the classpath,
- * (including the directories containing each jar file) for the
- * shared object SHARED_OBJ, and attempts to load this file if found.
- * Also searches in the subdirectory Constants.MR_FULLARCH.
- * Sets available to true if successful, false otherwise.
- */
- private static void load_library() {
- attemptedLoad = true;
-
- java.util.StringTokenizer classpath =
- new java.util.StringTokenizer(
- java.lang.System.getProperty("java.class.path"),
- java.lang.System.getProperty("path.separator")
- );
-
- while (classpath.hasMoreTokens()) {
- java.io.File dir;
- java.io.File entry = new java.io.File(classpath.nextToken());
-
- try {
- if (entry.isDirectory()) {
- dir = entry;
- } else {
- dir = entry.getParentFile();
- }
- if (dir == null) {
- dir = new java.io.File("");
- }
-
- java.io.File match = new java.io.File(dir, SHARED_OBJ);
- if (match.exists() == false) {
- dir = new java.io.File(dir, Constants.MR_FULLARCH);
- match = new java.io.File(dir, SHARED_OBJ);
- }
-
- java.lang.System.load(match.getAbsolutePath());
- available = true;
- return;
- }
- catch (java.lang.Exception e) {
- continue;
- }
- } // while classpath.hasMoreTokens()
-
- return;
- } // load_library()
-
- /**
- * clock():
- * Calls clock() from the <time.h> library.
- */
- public static native int clock();
-
- /**
- * clocks_per_sec():
- * Returns the number of "clocks" per sec as defined by CLOCKS_PER_SEC.
- */
- public static native int clocks_per_sec();
-
- /**
- * times():
- * Calls times() from the <time.h> library. Results are returned
- * in an int array of the form:
- * { <return value>, utime, stime, cutime, cstime }
- * If POSIX times are not available, <return value> will be set to -1,
- * and the other values are undefined.
- * Returns null if the array cannot be constructed.
- */
- public static native int[] times();
-
- /**
- * clk_tck():
- * Returns the number of "clock ticks" per second as defined by
- * sysconf(_SC_CLK_TCK). A `clock_t' value returned by 'times()'
- * can be divided by this value to obtain a time in seconds.
- */
- public static native int clk_tck();
-
- /**
- * get_user_cpu_milliseconds():
- * Native method to return the CPU time consumed by the process,
- * in milliseconds, from an arbitrary initial time.
- */
- public static native int get_user_cpu_milliseconds();
-}
diff --git a/library/Mmakefile b/library/Mmakefile
index 99f88bc..61933b6 100644
--- a/library/Mmakefile
+++ b/library/Mmakefile
@@ -428,12 +428,6 @@ $(RT_LIB_NAME).jar: copy_java_runtime_files
$(JAVAC) $(ALL_JAVACFLAGS) jmercury/runtime/*.java
$(JAR) $(JAR_CREATE_FLAGS) $(RT_LIB_NAME).jar jmercury/runtime/*.class
$(JAR) i $(RT_LIB_NAME).jar
- # -+cd jmercury/runtime && mmake $(NATIVE_SO)
- # -cp jmercury/runtime/$(NATIVE_SO) .
-
-# This shared object was used to implement some standard library methods,
-# but currently not.
-NATIVE_SO = Native.$(EXT_FOR_SHARED_LIB)
#-----------------------------------------------------------------------------#
@@ -566,7 +560,7 @@ realclean_local:
rm -rf jmercury
rm -f mr_int.class mr_float.class mr_char.class
rm -f mr_int\$$*.class mr_float\$$*.class mr_char\$$*.class
- rm -f $(STD_LIB_NAME).jar $(RT_LIB_NAME).jar $(NATIVE_SO)
+ rm -f $(STD_LIB_NAME).jar $(RT_LIB_NAME).jar
#-----------------------------------------------------------------------------#
More information about the reviews
mailing list