[Openmcl-devel] Hemlock IDE available for review

alex crain alexcrain at mail.widgetworks.com
Mon May 23 17:39:35 UTC 2005


I've put together an alpha release of the OpenMCL Hemlock port that 
I've been working on. It isn't
finished and it's buggy but many of the features work and it doesn't 
crash very often. I'd appreciate it
if anyone with a little time would take a look at it and give me some 
feedback or suggestions.

The current feature list includes:
	Listener
	Editor
	Trace Window (not fully functional under 0.14.3)
	Inspector
	Backtrace Viewer
	Symbol Completion
	Syntax highlighting
	integrated documentation browser

It will work with vanilla 0.14.3 although the trace window requires 
some bleeding edge code in order
to be fully functional. I'll be testing it with the bleeding edge code 
and I hope it will be part of 0.14.4.

It's available here: 
http://demo.widgetworks.com/openmcl-Hemlock-052305.tar.gz

This is the readme file in Hemlock.app/README.txt:

How to build hemlock from the 0.14.3 distribution

1) Hemlock will not build with vanilla 0.14.3. You will need to make the
following edits:

a) comment out (#_GetCurrentEventQueue) in 
ccl/examples/objc-runtime.lisp like so...

(def-ccl-pointers cocoa-framework ()
   (run-in-cocoa-process-and-wait
    #'(lambda ()
        ;; We need to load and "initialize" the CoreFoundation library
        ;; in the thread that's going to process events.  Looking up a
        ;; symbol in the library should cause it to be initialized
        (open-shared-library 
"/System/Library/Frameworks/Cocoa.framework/Cocoa")
        ; (#_GetCurrentEventQueue)
        (create-void-nsthread))))


b) replace the definition for %OBJC-DOMAIN-SLOTS-VECTOR in 
ccl/examples/objc-clos.lisp
    with this one:

(defun %objc-domain-slots-vector (p)
        (let* ((type (%macptr-type p))
              (flags (ldb objc-type-flags type))
              (index (ldb objc-type-index type)))
         (declare (fixnum type flags index))
         (ecase flags
           (#.objc-flag-instance (or (gethash p 
*objc-object-slot-vectors*)
                                     ; try to allocate the slot vector 
on demand
                                     (let* ((raw-ptr 
(raw-macptr-for-instance p))
                                            (slot-vector 
(create-foreign-instance-slot-vector (class-of p))))
                                       (when slot-vector
                                         (setf (slot-vector.instance 
slot-vector) raw-ptr)
                                         (setf (gethash raw-ptr 
*objc-object-slot-vectors*) slot-vector)
                                       (register-canonical-objc-instance 
p raw-ptr)
                                       (initialize-instance p))
                                       slot-vector)
                                     (error "~s has no slots." p)))
           (#.objc-flag-class (id->objc-class-slots-vector index))
           (#.objc-flag-metaclass (id->objc-metaclass-slots-vector 
index)))))

2) install the ccl/scripts/openmcl script somewhere in your $path.

3) Unpack the Hemlock distribution

4) Set two enviroment variables (using correct values):

# This the location of the top level ccl distribution
setenv CCL_DEFAULT_DIRECTORY  /Users/alex/Desktop/ccltest/ccl
# This is the Resources directory for the Hemlock distribution
setenv CF_RESOURCES_DIRECTORY 
/Users/alex/Desktop/ccltest/Hemlock.app/Contents/Resources

4) cd to Hemlock.app/Contents and do

    % make

There will be some compiler warnings when hemlock compiles - ignore 
these.

5) Launch Hemlock.app. This will fork off an iconified Terminal window 
which can be used
for debugging. After a very long time, a hemlock listener window should 
appear. do

    ? (ide::compile-ide)

There will be more compiler warnings - ignore these too.

6) Once the system is installed and compiled, it still a little slow to 
boot but nothing
like loading the uncompiled sources.




More information about the Openmcl-devel mailing list