[armedbear-devel] [armedbear-cvs] r12908 - trunk/abcl/examples/pure-lisp-to-java
Erik Huelsmann
ehuels at gmail.com
Tue Aug 31 18:59:04 UTC 2010
Hi Ville,
You're aware it's 2010 by now? :-)
Bye,
Erik.
On Mon, Aug 30, 2010 at 7:57 PM, Ville Voutilainen <
vvoutilainen at 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 at common-lisp.net
> http://common-lisp.net/cgi-bin/mailman/listinfo/armedbear-cvs
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/armedbear-devel/attachments/20100831/fac1d87e/attachment.html>
More information about the armedbear-devel
mailing list