Files
mercury/samples/java_interface/standalone_java/JavaMain.java
Julien Fischer e67afcbecd Initialise standard library in standalone Java example.
samples/java_interface/standalone_java/JavaMain.java:
     We need to initialise the standard library, otherwise things
     like the stream database won't be set up properly.
2018-11-09 16:48:45 +11:00

82 lines
2.9 KiB
Java

// vim: ts=4 sw=4 et
// The MercuryRuntime class in the jmercury.runtime package provides various
// Mercury runtime services that we may require.
// All Mercury runtime and generated Java code lives in the jmercury package.
//
import jmercury.runtime.MercuryRuntime;
// The library class in the jmercury package contains the initialisation method
// for Mercury's standard library.
import jmercury.library;
// The mercury_lib class is generated by the compiler when we build
// mercury_lib library.
//
import jmercury.mercury_lib;
import static java.lang.System.out;
public class JavaMain {
public static void main(String[] args)
{
// We do not need to do anything to initialise the Java version of the
// Mercury runtime. It will be automatically initialised as the
// relevant classes are loaded by the JVM.
// Initialise the Java version of Mercury's standard library.
//
out.println("JavaMain: initialising Mercury standard library");
library.ML_std_library_init();
out.println("JavaMain: start main");
try {
runProgram(args);
} finally {
// When we have finished calling Mercury procedures then we need
// to tell the Mercury Runtime that we've finished using it.
// The static method finalise() in the MercuryRuntime class does
// this. This call is (currently) mandatory otherwise the JVM
// may not exit cleanly, therefore it should be called in a
// finally block as in this example.
//
// This call will invoke any finalisers specified using
// ':- finalise' declarations in the set of Mercury libraries we
// are using. It also tells the thread pool to shutdown, if the
// thread pool is not running then this does nothing. Set the
// parameter to "true" if the program is aborting (finalisers
// will be skipped).
//
MercuryRuntime.finalise(false);
// The Mercury exit status (as set by io.set_exit_status/1) may
// be read from the MercuryRuntime class.
//
out.println("JavaMain: Mercury exit status = "
+ MercuryRuntime.getExitStatus());
out.println("JavaMain: end main");
}
System.exit(MercuryRuntime.getExitStatus());
}
public static void runProgram(String[] args) {
// This is a call to an exported Mercury procedure that does some I/O.
// The mercury_lib class contains a static method for each procedure
// that is foreign exported to Java.
//
mercury_lib.writeHello();
// This is a call to an exported Mercury function.
//
out.println("3^3 = " + mercury_lib.cube(3));
// Try a parallelised Mercury function.
out.println("fibs(40) = " + mercury_lib.fibs(40));
}
}