MCL 2.0p1 Release Notes


This patch contains minor bug fixes we've accumulated over the
several months since MCL 2.0 was frozen. Most of you can simply install
the patch and ignore the extensive notes below; your experience of using
MCL 2.0 should not change at all because of this patch.

If you have any problems installing or using this patch, please let us
know at 

    bug-mcl@cambridge.apple.com

Thanks for using our Lisp!


Installation

You probably received MCL 2.0p1.fasl in BinHex (.hqx) format. Before you
can install the patch you will need to decode the BinHex, using an 
application (like StuffIt or Compact Pro) that knows how to deal with
BinHex. You can also use the "BinHex" application shipped with MCL 2.0,
in the "Examples:" folder.

To install MCL 2.0p1, create a folder called "patches 2.0" in your 
MCL folder, put the decoded patch file into it, start up MCL, 
then type:

    (ccl::load-patches)
    (save-application "MCL 2.0p1" :init-file "init")

When you start up the new MCL 2.0p1 application, it should know its 
new patch level:

    Welcome to Macintosh Common Lisp Version 2.0p1!



Notes

The following describes some of the contents of this patch. The
"individual patch file" names are for our own bookkeeping. Most 
of this documentation is drawn from comments in the source code;
much of it may seem cryptic, especially if you haven't encountered
the bug yourself. Feel free to skim!


Individual patch file: advise-patch.lisp
Stop :after advice from consing the values list.
Declare it to be dynamic-extent.


Individual patch file: alias-patch.lisp
Make probe-file work for both "foo:bar alias:" and "foo:bar alias".
Make %path-getdirinfo look in desktop folder of all vols for aliases.
Hack pb-resolve-alias to work for aliases on remote vols.


Individual patch file: appleevents-patch.lisp
Add 2 methods (open-application-document and print-application-document)
which are called by open-documents-handler and print-documents-handler
to actually do the open or print of a single file.

open-application-document                       [Generic function]
          application path &optional startup

open-application-document                       [Primary method]
          (application application) path &optional startup

Open-application-document is called by the default startup code (which
you get if you do not specify the :TOPLEVEL-FUNCTION keyword to
SAVE-APPLICATION and when MCL receives an Open Document AppleEvent. It
is called with a first argument of *APPLICATION*, a pathname for the
second argument and no third argument (this is a bug in the patch, it
should be called with a third argument of T when called by the startup
code, and no third argument when an Open Document AppleEvent is
received later on).

The method specialized on APPLICATION will edit the file named by PATH
in a Fred window if it is a text file or LOAD it if it is a fasl file.
All other types of files are ignored.

print-application-document                      [Generic function]
           application path &optional startup

print-application-document                      [Primary method]
          (application application) path &optional startup

Same as open-application-document, but is called in response to
a Print Document AppleEvent. The patch does not cause
print-application-document to be called by startup code. Hopefully,
this bug will be fixed by patch 2.

The method specialized on APPLICATION prints the file named by PATH
by opening it in a Fred Window (with ED) and calling WINDOW-HARDCOPY.

Examples:

(defclass my-application (application) ())

(setq *application* (make-instance 'my-application))

(defmethod open-application-document ((app my-application) path &optional startup)
  (declare (ignore startup))
  (open-my-application-document path))

(defmethod print-application-document ((app my-application) path &optional startup)
  (declare (ignore startup))
  (print-my-application-document path))


Individual patch file: ash-compiler-macro-patch.lisp
Make ash compile in-line a little more often.


Individual patch file: big-time-patch.lisp
Make MCL's universal time stuff work for years up to 29936
Also, call get-time-zone minimally. It takes 2.5 milliseconds
to read the parameter RAM!


Individual patch file: c-m-h-patch.lisp
Fix ed-select-top-level-sexp (c-m-h) when at end by giving .
ed-current/next... another arg


Individual patch file: c-return-patch.lisp
Make ed-newline-and-indent kill selection, then get position.


Individual patch file: call-next-method-patch.lisp
Since DEFMETHOD was updated to expand into an FLET of CALL-NEXT-METHOD,
all methods which CALL-NEXT-METHOD have advertised that they give
arguments to CALL-NEXT-METHOD. This causes the method combination code
to generate slower and bigger code. This patch fixes the problem.
Also make DYNAMIC-EXTENT declarations for #'CALL-NEXT-METHOD and
#'NEXT-METHOD-P have an affect.


Individual patch file: check-gf-args-patch.lisp
Make arg checking of a call to a generic function work except for keys.
Also, check for even length tail when calling a function that
accepts keys, even if the exact keys are unknown or &allow-other-key.


Individual patch file: close-step-window-patch.lisp
Make window-close throw iff closing the current step window


Individual patch file: debugger-paste-patch.lisp
Changing the value of a closed over value cell in the debugger
now works correctly.


Individual patch file: declare-inline-patch.lisp
The file compiler no longer forgets the source for
functions that were declared to be inline.


Individual patch file: defgeneric-cerror-patch.lisp
Make defgeneric cerror on a change of lambda-list, just like
defmethod does.


Individual patch file: defmethod-traced-patch
Fix call to find-method so encapsulations will be moved
and (more important) so untracing won't put back the old definition!


Individual patch file: defstruct-patch.lisp
Patch makes the following work "as expected".
#|
(defstruct foo x)

You'll have to proceed through a cerror here.
(defclass foo ()
  ((x :accessor foo-x :initform 1)))

This function should not compile the foo-x in-line
(that's the point of the patch).
(defun bar (foo)
  (foo-x foo))
|#


Individual patch file: directory patch
%one-wild - don't resolve alias unless it matches
directory, %directory, %all-directories avoid indirect circles 
when resolving aliases.
Fix (directory "*:abcd:" :directories t).
Make %file*= - ALWAYS put the length back (fixes a crock in directory)


Individual patch file: disable-selection-patch.lisp
Disable the selection in the old key handler if a new one is
selected by clicking on it with the mouse.
Also, remove some of the blinking caused by set-selection-range.


Individual patch file: dribble-fresh-line-patch.lisp
Make stream-fresh-line work correctly on the DRIBBLE output
and on output file streams.


Individual patch file: earlier-fasl-type-patch.lisp
Set the mac-file-type of a fasl file at creation time
rather than after opening it.
This prevents AUFS from doing character translation on it.


Individual patch file: ensure-on-screen-patch.lisp
Window-ensure-on-screen now calls view-default-position & view-default-size
before using the wired in defaults.


Individual patch file: equal-patch.lisp
Make EQUAL work for non-simple strings and bit-vectors.


Individual patch file: eval-debind-patch.lisp
Fix to destructuring bind.


Individual patch file: eventhook-patch.lisp
Don't bind *EVENTHOOK* to NIL in break-loop.
Instead, keep an *eventhooks-in-progress* list so
that we don't reenter an erroring eventhook.


Individual patch file: find-arg-mactype-patch.lisp
Make DEFTRAP argument types work with or without a colon.


Individual patch file: flush-output-patch.lisp
Make FLUSH-OUTPUT on a file stream do #_FlushVol


Individual patch file: focus-view-patch.lisp
call-with-focused-view becomes a generic function at
Mike Engber's suggestion.


Individual patch file: fred-cursor-patch.lisp
Clicking on a fred-mixin now changes the cursor with
update-cursor, not set-cursor.


Individual patch file: fred-package-patch.lisp
Don't set-fred-package to NIL when initializing a fred window
This prevents clone-window from changing the package.


Individual patch file: get-time-zone-patch.lisp
Return negative numbers for east of GMT (sheesh!)


Individual patch file: hash-table-patch.lisp
Fix infinite loop in do-rehash.
The problem was when an EQUAL (or EQUALP) hash table contained
both a key whose address was used to compute the hash code
and a key the address of one of whose components was used to
compute the hash code. If the EGC was enabled and the former key
was ephemeral, the hash table could get in a state where it did
not rehash after an EGC as it needed to. If a puthash was done
on the former key, a duplicate value was entered in the hash table.
;
clrhash now clears the bits that control rehashing.
;
do-rehash cerror's on duplicate keys and will remove them if
the user continues from the error.
;
Also, puthash no longer makes nhash.vector.deleted-count become
negative for weak hash tables.
This could cause the table to become full and think it didn't
need to grow: infinite loop time.
;
clrhash calls $sp-eventch now and then so it won't be uninterruptable
for long periods when clearing big hash tables under MacVM.
;
grow-hash-table no longer throws away nhash.vector.weak-deletions-count.
Decrementers of nhash.vector.deleted-count also update
nhash.vector.weak-deletions-count, when appropriate.
These two keep weak hash tables from thinking they have more
entries than they really do.


Individual patch file: indent-THE-patch.lisp
(pushnew '(the . 1) *fred-special-indent-alist*
         :key 'car)


Individual patch file: index-stream-patch.lisp
Fix resource contention problem for interface index streams.
Works by saving the stream-position if event processing
uses the *accessing-index-stream*.


Individual patch file: inline-car-cdr-patch.lisp
The following code no longer generates type-unsafe code
#|
(defun my-car (x)
  (the list (car x)))

(defun my-cdr (x)
  (the list (cdr x)))
|#


Individual patch file: set-file-position-patch.lisp
(file-position stream new-position) used to sometimes forget
characters written following the old end of file.

  
Individual patch file: m-g-patch.lisp
Ed-grab-last-input (m-g) now handles negative inputs.


Individual patch file: make-load-form-patch.lisp
Fix make-load-form-saving-slots bug:
#|
(defstruct a-struct slot-a slot-b)

This form no longer causes (%svref nil 4)
(make-load-form-saving-slots (make-a-struct) '(slot-a))

This form now makes load form for no slots instead of all slots
(make-load-form-saving-slots (make-a-struct) nil)
|#


Individual patch file: method-slot-name-patch.lisp
Method-slot-name now looks inside of encapsulations.
This makes tracing accessor methods work correctly.


Individual patch file: open-coded-aref-patch.lisp
Make nx2-vref put the result of the aref below in the right register.
#|
(defun test (data offset)
  (declare (optimize (safety 0) (speed 3)))
  (declare (type (simple-array (unsigned-byte 8) 1) data))
  (ash (aref data offset) 24))
|#


Individual patch file: post-2.0-compiler-patch.lisp
Fix typo in dotimes compiler-macro. 


Individual patch file: pprint-dispatch.lisp


Individual patch file: psetf-patch.lisp
PSETF failed miserably if any of the value forms were not symbols


Individual patch file: radio-button-patch.lisp
It now works to add radion buttons to a view before
adding the view to a window.


Individual patch file: report-eval-abort-patch.lisp
Report an abort of an evaluation from a fred buffer in its mini-buffer.


Individual patch file: require-help-manager-patch.lisp
Don't ignore-errors around auto-requiring the help-manager.
Instead, don't try the require if the file doesn't exist


Individual patch file: save-application-patch.lisp
Close the output file if save-application errors
before quitting.


Individual patch file: set-control-text-patch.lisp
The set-dialog-item-text method for control-dialog-item
should be a primary method, not an after method, so that
users can change the args.


Individual patch file: set-part-color-patch.lisp
(method set-part-color (control-dialog-item t t)) needs to focus


Individual patch file: setf-apply-patch.lisp
(setf (apply #'f ...) value) used to cons.


Individual patch file: setf-GETF-and-THE-patch.lisp
Make define-setf-method's for THE & GETF pass the environment to 
get-setf-method


Individual patch file: table-scrolling-patch.lisp
Make the scroll bars operational on both tables if two table-dialog-item's
are subviews of two different views contained in the same window.
The problem was that #_LClick calls #_FindControl which assumes
all the controls are in the same coordinate system.
This code depends on #_FindControl returning the last control
t finds.


Individual patch file: trace-eql-patch.lisp
Gake trace work for eql methods.


Individual patch file: translate-pathname-patch.lisp
Fixes translate-pathname when to is **.


Individual patch file: trap-doc-patch.lisp
Make documentation work correctly for traps.


Individual patch file: untrace-patch.lisp
Allow (untrace ((:method ..))) as well as (untrace (:method ..)).


Individual patch file: windoid-type-patch.lisp
Make the :window-type initarg do the obvious thing for windoids.


Individual patch file: window-under-patch.lisp
Invisible windows are no longer passed events from windoids.

