summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Benkard <code@mail.matthias.benkard.de>2008-03-02 21:07:15 +0100
committerMatthias Benkard <code@mail.matthias.benkard.de>2008-03-02 21:07:15 +0100
commit6fa02273690d38831f955ac5df0a2643f37230ba (patch)
treec490fcc433cc75f4ec2f644c9de24800e1fdbb90
parentd2df47004e31977221e38c891f1790defeb4973f (diff)
Introduce an Objective-C class for wrapping Lisp values.
darcs-hash:47920ab6598799fca44c964c3fa6a3dfb20389c9
-rw-r--r--Lisp/lisp-value-wrapping.lisp37
-rw-r--r--objective-cl.asd4
2 files changed, 41 insertions, 0 deletions
diff --git a/Lisp/lisp-value-wrapping.lisp b/Lisp/lisp-value-wrapping.lisp
new file mode 100644
index 0000000..cf8e63c
--- /dev/null
+++ b/Lisp/lisp-value-wrapping.lisp
@@ -0,0 +1,37 @@
+;;;; Objective-CL, an Objective-C bridge for Common Lisp.
+;;;; Copyright (C) 2007, 2008 Matthias Andreas Benkard.
+;;;;
+;;;; This program is free software: you can redistribute it and/or
+;;;; modify it under the terms of the GNU Lesser General Public License
+;;;; as published by the Free Software Foundation, either version 3 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
+;;;; Lesser General Public License for more details.
+;;;;
+;;;; You should have received a copy of the GNU Lesser General Public
+;;;; License along with this program. If not, see
+;;;; <http://www.gnu.org/licenses/>.
+
+(in-package #:mulk.objective-cl)
+
+
+(eval-when (:compile-toplevel :load-toplevel :execute)
+ (find-objc-class "NSObject" t))
+
+
+(defclass ns::mlk-lisp-value (ns::ns-object)
+ ((lisp-value :initarg :value
+ :initform nil
+ :accessor lisp-value))
+ (:metaclass ns::+ns-object))
+
+
+(defun make-lisp-value (value)
+ ;; FIXME: The following won't work. Make MAKE-INSTANCE more useful...
+ ;(make-instance 'ns::mlk-lisp-value :value value)
+ (let ((instance (invoke (find-class 'ns::mlk-lisp-value) 'new)))
+ (setf (lisp-value instance) value)
+ instance))
diff --git a/objective-cl.asd b/objective-cl.asd
index 0f9dc2f..efe3c91 100644
--- a/objective-cl.asd
+++ b/objective-cl.asd
@@ -93,6 +93,10 @@
(:file "compiler-macros" :depends-on ("defpackage"
"method-invocation"
"conditions"))
+ (:file "lisp-value-wrapping" :depends-on ("defpackage"
+ "libobjcl"
+ "init"
+ "class-definition"))
(:file "post-init" :depends-on ("defpackage"
"libobjcl"
"init"