Re: f2cl trouble with common block -- function make-<block name> undefined
Robert Dodier <[email protected]> Fri, 27 Jan 2006 08:50:21 -0700
| Newsgroups | gmane.lisp.clocc.general |
|---|---|
| Message-ID | <[email protected]> |
Ray, thanks for your help. I've made some progress.
(1) SBCL loads f2cl successfully (although with many complaints),
and f2cl::f2cl executes successfully, and SBCL loads the
resulting translation successfully. Terrific!
(2) Variables mentioned in DATA statements within
BLOCK DATA aren't initialized. A function named
/BLOCKDATA-<WHATEVER>/ is defined
to initialize the data, but it is not automatically called;
if I call the block data function by hand, then the variables are initializ=
ed.
(3) The program of interest at the moment is LBFGS,
a minimization program. If I call the blockdata function to
initialize the common variables, the LBFGS test program
runs successfully. That's really good news.
Here is an example which exhibits the
problem with initializing common variables.
After loading tmp2.lisp,
(foo) =3D>
OUTPUT 1: BAR IS 0
OUTPUT 2: BAR IS 12345
However, I can force BAR to get initialized --
(/blockdata-mybloc/)
Then
(foo) =3D>
OUTPUT 1: BAR IS 98765
OUTPUT 2: BAR IS 12345
Thanks a lot for your help,
Robert Dodier
PS.
------------------------------------ tmp2.f -------------------------------=
-----
PROGRAM FOO
INTEGER BAR
COMMON /MYCOMN/BAR
WRITE(6,10)BAR
10 FORMAT('OUTPUT 1: BAR IS ',I5)
BAR=3D12345
WRITE(6,20)BAR
20 FORMAT('OUTPUT 2: BAR IS ',I5)
RETURN
END
BLOCK DATA MYBLOC
INTEGER BAR
COMMON /MYCOMN/BAR
DATA BAR/98765/
END
----------------------------------- tmp2.lisp -----------------------------=
-----
;;; Compiled by f2cl version 2.0 beta Date: 2006/01/11 22:57:58
;;; Using Lisp SBCL 0.9.4
;;;
;;; Options: ((:prune-labels nil) (:auto-save t) (:relaxed-array-decls t)
;;; (:coerce-assigns :as-needed) (:array-type ':array)
;;; (:array-slicing t) (:declare-common t)
;;; (:float-format single-float))
(in-package :common-lisp-user)
(defstruct (mycomn (:predicate is-mycomn-p))
(part-0 (make-array 1 :element-type 'f2cl-lib:integer4)
:type
(simple-array f2cl-lib:integer4 (1))))
(let* ()
(defparameter *mycomn-common-block* (make-mycomn)))
(defun foo ()
(let ()
(symbol-macrolet ((bar (aref (mycomn-part-0 *mycomn-common-block*) 0)))
(f2cl-lib:with-multi-array-data
nil
(prog ()
(declare)
(f2cl-lib:fformat 6 ("OUTPUT 1: BAR IS " 1 (("~5D")) "~%") bar)
(setf bar 12345)
(f2cl-lib:fformat 6 ("OUTPUT 2: BAR IS " 1 (("~5D")) "~%") bar)
(go end_label)
end_label
(return nil))))))
;;; Compiled by f2cl version 2.0 beta Date: 2006/01/11 22:57:58
;;; Using Lisp SBCL 0.9.4
;;;
;;; Options: ((:prune-labels nil) (:auto-save t) (:relaxed-array-decls t)
;;; (:coerce-assigns :as-needed) (:array-type ':array)
;;; (:array-slicing t) (:declare-common t)
;;; (:float-format single-float))
(in-package :common-lisp-user)
(defun /blockdata-mybloc/ ()
(let ()
(symbol-macrolet ((bar (aref (mycomn-part-0 *mycomn-common-block*) 0)))
(setf bar 98765))))
-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems? Stop! Download the new AJAX search engine that makes
searching your log files as easy as surfing the web. DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642