Re: [armedbear-devel] [armedbear-cvs] r12908 - trunk/abcl/examples/pure-lisp-to-java
Hi Ville, You're aware it's 2010 by now? :-) Bye, Erik. On Mon, Aug 30, 2010 at 7:57 PM, Ville Voutilainen < vvoutilainen@common-lisp.net> wrote:
Author: vvoutilainen Date: Mon Aug 30 13:57:43 2010 New Revision: 12908
Log: Add an example for using a java class with CLASSPATH, invoking java functions from lisp code and finding the java class automagically as it's in CLASSPATH.
Added: trunk/abcl/examples/pure-lisp-to-java/ trunk/abcl/examples/pure-lisp-to-java/Main.java (contents, props changed) trunk/abcl/examples/pure-lisp-to-java/README trunk/abcl/examples/pure-lisp-to-java/lispfunctions.lisp (contents, props changed)
Added: trunk/abcl/examples/pure-lisp-to-java/Main.java
============================================================================== --- (empty file) +++ trunk/abcl/examples/pure-lisp-to-java/Main.java Mon Aug 30 13:57:43 2010 @@ -0,0 +1,39 @@ +/* + * Main.java + * + * Copyright (C) 2008 Ville Voutilainen + * $Id$ + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +import org.armedbear.lisp.*; + +public class Main +{ + /** + * This example creates an Interpreter instance, loads our + * lisp code from a file and then looks up a function defined + * in the loaded lisp file and executes the function. + * + * The function takes a single parameter and invokes a java method + * on the object provided. We provide our Main object as the parameter. + * + */ + public static int addTwoNumbers(int a, int b) + { + return a + b; + } +}
Added: trunk/abcl/examples/pure-lisp-to-java/README
============================================================================== --- (empty file) +++ trunk/abcl/examples/pure-lisp-to-java/README Mon Aug 30 13:57:43 2010 @@ -0,0 +1,38 @@ +ABCL Examples Building and Running Instructions +=============================================== + +To compile + + cmd$ javac -cp ../../dist/abcl.jar Main.java + +where the "../../../dist/abcl.jar" represents the path to your +abcl.jar file, which is built via the Ant based build. This path +could be slightly different depending on how the system was +constructed, and possibly due to operating system conventions for +specifying relative paths. However you resolve this locally, we'll +refer to this as '$ABCL_ROOT/dist/abcl.jar' for the rest of these +instructions. + +This compiles the Java source file "Main.java" into a JVM runtime or +class file named "Main.class". + +To run the example (Main.class for example) from a Unix-like OS use: + + cmd$ export CLASSPATH=. + cmd$ $ABCL_ROOT/abcl + +then, in abcl repl, use: +(load "lispfunctions") +(void-function) + +or in Windows use: + + cmd$ set CLASSPATH=. + cmd$ $ABCL_ROOT/abcl + +then, in abcl repl, use: +(load "lispfunctions") +(void-function) + +This will result in the Main class being found from the CLASSPATH, and you +can invoke the functions of the Main class from lisp code.
Added: trunk/abcl/examples/pure-lisp-to-java/lispfunctions.lisp
============================================================================== --- (empty file) +++ trunk/abcl/examples/pure-lisp-to-java/lispfunctions.lisp Mon Aug 30 13:57:43 2010 @@ -0,0 +1,34 @@ +;;; lispfunctions.lisp +;;; +;;; Copyright (C) 2008 Ville Voutilainen +;;; $Id$ +;;; +;;; This program is free software; you can redistribute it and/or +;;; modify it under the terms of the GNU General Public License +;;; as published by the Free Software Foundation; either version 2 +;;; of the License, or (at your option) any later version. +;;; +;;; This program is distributed in the hope that it will be useful, +;;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with this program; if not, write to the Free Software +;;; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +; we need to get the +; 1) class (Main) +; 2) classes of the parameters (int) +; 3) method reference (getting that requires the class +; of our object and the classes of the parameters + +; After that we can invoke the function with jcall, +; giving the method reference, the object and the parameters. +; The result is a lisp object (no need to do jobject-lisp-value), +; unless we invoke the method +; with jcall-raw. +(defun void-function () + (let* ((result (jstatic "addTwoNumbers" "Main" 2 4))) + (format t "in void-function, result of calling addTwoNumbers(2, 4): ~a~%" result))) +
_______________________________________________ armedbear-cvs mailing list armedbear-cvs@common-lisp.net http://common-lisp.net/cgi-bin/mailman/listinfo/armedbear-cvs
On 31 August 2010 21:59, Erik Huelsmann <ehuels@gmail.com> wrote:
Hi Ville, You're aware it's 2010 by now? :-)
Yes, and those source files are a derived work of something copyrighted in 2008. So there. :P I noticed it after committing and just didn't think it's something worth changing. ;)
participants (2)
-
Erik Huelsmann
-
Ville Voutilainen