Thu Mar  8 05:15:58 UTC 2012  pix@kepibu.org
  * Rename notes.org to README.org
move ./notes.org ./README.org
Mon Jul 20 18:34:17 UTC 2009  pix@kepibu.org
  * see other links, and add reference to cl-syntax-sugar
hunk ./notes.org 111
-trivial-features -- smooths out the unnecessary differences between
-                    implementation *features*
-alexandria -- implements a #'featurep which exactly matches that used by the
-              standard's #+/#- readmacros.
+
+[[http://www.cliki.net/trivial-features][trivial-features]]
+  smooths out the unnecessary differences between implementation *features*
+[[http://common-lisp.net/project/alexandria/][alexandria]]
+  implements a #'featurep which exactly matches that used by the standard's
+  #+/#- readmacros.
+[[http://common-lisp.net/project/cl-syntax-sugar/][cl-syntax-sugar]]
+  Offers a feature-case reader which is almost certainly more useful than
+  portaCL's feature-cond macro.
Mon Jul 20 07:07:16 UTC 2009  pix@kepibu.org
  * Some org-mode syntaxisms
{
hunk ./notes.org 1
-PortaCL: Easing the Creation of CL Portability Libraries
+#+TITLE: PortaCL: Easing the Creation of CL Portability Libraries
hunk ./notes.org 63
-see feature-tests.lisp for usage examples.
+see [[http://repo.kepibu.org/portaCL/feature-tests.lisp][feature-tests.lisp]] for usage examples.
hunk ./notes.org 105
-      (list #+(or) #+package:notexported a b c)
-      (list #+(or) #+notapackage:foo a b c)
+      :(list #+(or) #+package:notexported a b c)
+      :(list #+(or) #+notapackage:foo a b c)
}
Mon Jul 20 06:58:45 UTC 2009  pix@kepibu.org
  * Update bug list to include reader bug
hunk ./notes.org 100
-ASDF systems sometimes try to recursively load themselves a couple hundred
-times.  (Though I've seen that even without loading portaCL, so may not be
-entirely my bug...)
+  * ASDF systems sometimes try to recursively load themselves a couple
+    hundred times.  (Though I've seen that even without loading portaCL, so
+    may not be entirely my bug...)
+  * Constructs similar to the ones below will result in an incorrect
+    package-error:
+      (list #+(or) #+package:notexported a b c)
+      (list #+(or) #+notapackage:foo a b c)
+    NOTE: this bug is shared by the standard readers of at least SBCL,
+    Clisp, and Lispworks; but not by Allegro.
Mon Jul 20 01:31:17 UTC 2009  pix@kepibu.org
  tagged VERSION 0.1.3
{
}
Mon Jul 20 01:31:10 UTC 2009  pix@kepibu.org
  * Bump version
hunk ./portacl.asd 3
-  :version "0.1.2"
+  :version "0.1.3"
Mon Jul 20 01:14:10 UTC 2009  pix@kepibu.org
  * Improved feature readers
  It turns out #+/#- also need to do their thing under *read-suppress*, rather
  than simply skipping two forms.
  
  E.g.,
'(#+(or) #+(not a b) a b c) => '(c)
'(#+(or) #+(and) a b c)     => '(b c)
  
  (Not that such constructions are practically portable anyway, but meh.)
  
  Regardless, this fixes that as best I can.  Unfortunately, it also forces
  the normal package problems within feature expressions:
#+(or) #+(notapackage:foo) 'a  => PACKAGE-ERROR
#+(or) #+(cl:notexported)  'a  => PACKAGE-ERROR
  
  This is, so far as I can tell, portably unavoidable.  However, some (all?)
  implementations /already/ have this problem, so at least it's nothing new.
{
hunk ./reader.lisp 3
+(define-condition suppressed-error (warning)
+  ((original-error     :initarg :error)
+   (feature-expression :initarg :feature))
+  (:report (lambda (c s)
+             (format s "Suppressed an error while testing feature expansion ~S: ~A"
+                     (slot-value c 'feature-expression)
+                     (slot-value c 'original-error)))))
+
hunk ./reader.lisp 12
-(defun feature-reader (stream subchar arg)
+(defun feature-reader (stream fn arg)
hunk ./reader.lisp 14
-  (declare (ignore arg))
+  (when (and arg (not *read-suppress*))
+    (error 'simple-error
+           :format-control "Numeric arg (~D) specified on reader conditional where none allowed."
+           :format-arguments (list arg)))
hunk ./reader.lisp 19
-           (ecase subchar
-             (#\+ (featurep form))
-             (#\- (not (featurep form)))))
+           ;; from CLHS *read-suppress* <http://www.lispworks.com/documentation/HyperSpec/Body/v_rd_sup.htm>:
+           ;; Any standardized reader macro that is defined to read a following
+           ;; object or token will do so, but not signal an error if the object
+           ;; read is not of an appropriate type or syntax.
+           ;;
+           ;; I take that to mean errors thrown during the course of #'featurep
+           ;; should be suppressed.  Some implementations differ.
+           (handler-bind
+               ((error (lambda (c)
+                         (when *read-suppress*
+                           (warn 'suppressed-error :feature form :error c)
+                           (return-from feature-truth nil)))))
+             (funcall fn form)))
hunk ./reader.lisp 35
-      (*read-suppress*
-       (read-form stream)
-       (read-form stream)
-       (values))
hunk ./reader.lisp 36
-        (let ((*package* (find-package :keyword)))
+        (let ((*package* (find-package :keyword))
+              ;; Incorrectly interns symbols, but we need more than just cl:nil :/
+              (*read-suppress* nil))
hunk ./reader.lisp 45
+(defun |#+-reader| (stream subchar arg)
+  (declare (ignore subchar))
+  (feature-reader stream #'featurep arg))
+
+(defun |#--reader| (stream subchar arg)
+  (declare (ignore subchar))
+  (feature-reader stream (complement #'featurep) arg))
+
hunk ./reader.lisp 54
-  (set-dispatch-macro-character #\# #\+ #'feature-reader)
-  (set-dispatch-macro-character #\# #\- #'feature-reader))
+  (set-dispatch-macro-character #\# #\+ #'|#+-reader|)
+  (set-dispatch-macro-character #\# #\- #'|#--reader|))
}
Mon Jul 20 01:09:25 UTC 2009  pix@kepibu.org
  * Better reporting of undefined-feature-tests.
hunk ./feature-tests.lisp 15
-                                   :format-control "Unknown feature test: ~a"
-                                   :format-arguments (list feature))
+                                   :format-control "Unknown feature test: ~s"
+                                   :format-arguments (list (car feature)))
Sun Jul 19 13:58:44 UTC 2009  pix@kepibu.org
  tagged VERSION 0.1.2
{
}
Sun Jul 19 13:58:33 UTC 2009  pix@kepibu.org
  * Bump version
hunk ./portacl.asd 3
-  :version "0.1"
+  :version "0.1.2"
Sun Jul 19 13:58:20 UTC 2009  pix@kepibu.org
  * Use consp to avoid treating nil as a list
hunk ./feature-tests.lisp 23
-    (if (listp feature)
+    (if (consp feature)
Sun Jul 19 12:31:43 UTC 2009  pix@kepibu.org
  tagged VERSION 0.1.1
{
}