[cl-walker-devel] CL-Walker changes

Alexander Gavrilov angavrilov at gmail.com
Wed Nov 4 14:42:53 UTC 2009


> as i've checked your changes, unfortunately we seem to have done/fixed
> similar things as you... could you please port your stuff to the
> hu.dwim.walker repo?
> 
> due to Levy's work on hu.dwim.partial-eval, the walker gets many new
> features nowadays.
> 
> also, it would be a big help if you could use darcs. if you can deal
> with git, then darcs should be really simple. just a darcs record, and
> an ssh account somewhere for the darcs push. or even simpler, just use
> your local repo and a darcs send to package a binary file that we can
> apply using darcs apply -i /tmp/file, including all metainformation of
> your record.

So here is a first bunch of changes...

Alexander
-------------- next part --------------
Wed Nov  4 16:41:20 MSK 2009  Alexander Gavrilov <angavrilov at gmail.com>
  * Remove the seemingly unused dependency on asdf-install.
  
  Also add guards on the use of asdf-system-connections,
  to avoid triggering a bug in ECL's compiler when the
  referenced classes are not defined.

New patches:

[Remove the seemingly unused dependency on asdf-install.
Alexander Gavrilov <angavrilov at gmail.com>**20091104134120
 Ignore-this: 7e4124b715c8dce2ba55af836ad5d944
 
 Also add guards on the use of asdf-system-connections,
 to avoid triggering a bug in ECL's compiler when the
 referenced classes are not defined.
] hunk ./source/package.lisp 11
 
 (defpackage :hu.dwim.asdf
   (:use :asdf
-        :asdf-install
         :common-lisp)
 
   (:export #:hu.dwim.system
hunk ./source/system.lisp 24
 (defclass system-with-readtable (system readtable-function-mixin)
   ())
 
+#+asdf-system-connections
 (defclass system-connection-with-readtable (system-connection readtable-function-mixin)
   ())
 
hunk ./source/system.lisp 31
 (defmethod asdf::module-default-component-class ((class system-with-readtable))
   'cl-source-file-with-readtable)
 
+#+asdf-system-connections
 (defmethod asdf::module-default-component-class ((class system-connection-with-readtable))
   'cl-source-file-with-readtable)
 
hunk ./source/system.lisp 114
 (defclass hu.dwim.documentation-system (system-with-readtable+package)
   ())
 
+#+asdf-system-connections
 (defclass hu.dwim.system-connection (system-connection-with-readtable)
   ())
 
hunk ./source/system.lisp 130
 (defmethod asdf::module-default-component-class ((class hu.dwim.system))
   'hu.dwim.source-file)
 
+#+asdf-system-connections
 (defmethod asdf::module-default-component-class ((class hu.dwim.system-connection))
   'hu.dwim.source-file)
 

Context:

[Fix docu.
levente.meszaros at gmail.com**20091020163221
 Ignore-this: 7bb313b4eee28778891f0b89a2c77a20
] 
[Follow hu.dwim.common-lisp renaming.
levente.meszaros at gmail.com**20091020140847
 Ignore-this: d5eca57032981ddad8d75ae336db433b
] 
[Documentation.
levente.meszaros at gmail.com**20091020123301
 Ignore-this: 8290a5c91271324544dbda37dfbce10f
] 
[Remove operation-done-p, that is already part of asdf.
levente.meszaros at gmail.com**20091009161311
 Ignore-this: c1699015ff5d8eb2c32eb00b4db6be0d
] 
[Moved build-image into a separate project.
levente.meszaros at gmail.com**20090924110305
 Ignore-this: bb86d3c147ba40f8d4620c1803d46bf2
] 
[Removed swank-sprof.lisp loading, because that is already part of slime.
levente.meszaros at gmail.com**20090922094743
 Ignore-this: 768e19b41f5bd00577c941c766dab9c9
] 
[change system load order: files in global/ are added at the end of the list
attila.lendvai at gmail.com**20090921133615
 Ignore-this: 7c3a740477662e903ceb57b197de30d5
] 
[develop-op needs an operation-done-p that constantly returns #f
attila.lendvai at gmail.com**20090921133546
 Ignore-this: 18789f0d4d6bf84756eb60bb6fcb2800
] 
[no default binding for *development-package*
attila.lendvai at gmail.com**20090921132317
 Ignore-this: a1de60e2972c817f5b295f924f09e8de
] 
[Moved stuff from environment.lisp into this system.
levente.meszaros at gmail.com**20090920120738
 Ignore-this: 779e857cb9b2817c456b342d56395344
] 
[export *workspace-directory*
attila.lendvai at gmail.com**20090918153237
 Ignore-this: 354ce2f61f7891b45f56b13ee1cf5c8b
] 
[muffle boring compiler notes when building
attila.lendvai at gmail.com**20090917161205
 Ignore-this: f4085bc8407d359bd4880aa6526a602
] 
[*workspace-directory* was moved to hu.dwim.asdf
attila.lendvai at gmail.com**20090917161140
 Ignore-this: bbaf85df936d792251fb492731fe7d56
] 
[store swank fasl's in the same location as the others
attila.lendvai at gmail.com**20090917161042
 Ignore-this: 7b829ce69d22eb09cedc6e5da0f63d7b
] 
[added with-muffled-boring-compiler-warnings
attila.lendvai at gmail.com**20090917123224
 Ignore-this: dea6dc6a6d23e63e8fb7fae6af33e604
] 
[Fix.
levente.meszaros at gmail.com**20090911125700
 Ignore-this: e8e7816760531bb00d6708b285ca7116
] 
[Fix development image suffix.
levente.meszaros at gmail.com**20090911123228
 Ignore-this: 372b9e10832823cf048b827d22fa8e3f
] 
[Save executable for production.
levente.meszaros at gmail.com**20090911122700
 Ignore-this: 634993d3af1c263c1ce718efcb4caf37
] 
[Decrease the number of different fasls directory names by one.
levente.meszaros at gmail.com**20090908131919
 Ignore-this: bb21bd57cf2f1290d66a32af9da25fbc
] 
[Refactor for build-image.
levente.meszaros at gmail.com**20090908101358
 Ignore-this: aa1aa7d6f26c4e575f724feaab049acb
] 
[Exports.
levente.meszaros at gmail.com**20090825112258
 Ignore-this: f3367798916fc942ecbee4ef90f7b571
] 
[Muffle undefined alien style warnings.
levente.meszaros at gmail.com**20090825112159
 Ignore-this: 20dc2bdd00dd62f69026321915576e33
] 
[Muffle optimization warnings by default.
levente.meszaros at gmail.com**20090823164710
 Ignore-this: f8ec75d4352dd59b23e4cb54fb35db7
] 
[Initial.
levente.meszaros at gmail.com**20090814155225
 Ignore-this: 3c38ff458eb374cacad57f425df54526
] 
Patch bundle hash:
5fd2a84f530aef458fcad64ad0614aef6116fcde
-------------- next part --------------
Wed Nov  4 15:57:14 MSK 2009  Alexander Gavrilov <angavrilov at gmail.com>
  * Allow loading the package with any encoding settings.
  
  Use hex codes for unicode quote characters, so that
  this package does not depend on the encoding used for
  loading the source code.

New patches:

[Allow loading the package with any encoding settings.
Alexander Gavrilov <angavrilov at gmail.com>**20091104125714
 Ignore-this: 37c7edd139f675ebe73e96d1a282ac3b
 
 Use hex codes for unicode quote characters, so that
 this package does not depend on the encoding used for
 loading the source code.
] hunk ./source/string-quote.lisp 9
 
 (in-package :hu.dwim.syntax-sugar)
 
-(define-syntax string-quote (&key (start-character #\?) (end-character #\?) transformer)
+(define-syntax string-quote (&key (start-character #.(code-char #xFF62)) (end-character #.(code-char #xFF63)) transformer)
   "A simple string quote that unconditionally reads all characters until END-CHARACTER into a string."
   (bind ((reader (make-string-quote-reader end-character transformer)))
     (set-macro-character start-character reader t *readtable*)))

Context:

[follow walker refactor
attila.lendvai at gmail.com**20091027135536
 Ignore-this: 2026416fddc472605e5db9cf1a2b38f5
] 
[de-bitrot some tests
attila.lendvai at gmail.com**20091027135520
 Ignore-this: 9c0450cffd179a9fe8994370b7b37e6
] 
[Follow hu.dwim.common split
levente.meszaros at gmail.com**20091020163515
 Ignore-this: 7ccc9ee2bd8080dd72ac996ffdf05a38
] 
[Fix docu
levente.meszaros at gmail.com**20091020163420
 Ignore-this: ab7a4d713e37c48f72fa78cf5f71838a
] 
[Follow hu.dwim.common-lisp renaming.
levente.meszaros at gmail.com**20091020141008
 Ignore-this: d47a594d488b88089c4c824059a8dabb
] 
[Documentation.
levente.meszaros at gmail.com**20091020123311
 Ignore-this: c14f693157c9de937641f536ddb3aa40
] 
[Follow logger.
levente.meszaros at gmail.com**20091009161717
 Ignore-this: 76f332455c03060cf66fb60a73662183
] 
[Remove obsolete documentation code.
levente.meszaros at gmail.com**20090924121208
 Ignore-this: 45efa47bee564fa02e2f7a25cb1c6ef9
] 
[Eliminate some unused duplicates.
levente.meszaros at gmail.com**20090922131402
 Ignore-this: 338fa7d5ee182897fa7a7fa916664795
] 
[Get rid of aif, awhen, aprog1 we're using anaphora.
levente.meszaros at gmail.com**20090922125011
 Ignore-this: cefe8fe754d8018c1b041ce5b63aa21a
] 
[In package hu.dwim.asdf
levente.meszaros at gmail.com**20090908101942
 Ignore-this: b068ecdad8d7b7db83f1c440c4b60028
] 
[Refactor for dwim.hu
levente.meszaros at gmail.com**20090814092820
 Ignore-this: d037e817fbd28d61f81efca35402900f
] 
[qq reader returns (values result matched?) that can be used when customizing with the :toplevel-reader-wrapper
attila.lendvai at gmail.com**20090411180636
 Ignore-this: 74490d2d2f0eda79f32c38ef212dc15d
] 
[factor out maybe-funcall-setup-readtable-function
attila.lendvai at gmail.com**20090308205909
 Ignore-this: c6598a853346f7af8086f57f2a800d77
] 
[renamed to *quasi-quote-lexical-depth*
attila.lendvai at gmail.com**20090228153611
 Ignore-this: 594e78376f907d81180dba62b0593d73
] 
[follow cl-walker walk-ast rename
attila.lendvai at gmail.com**20081230135656
 Ignore-this: e3f04766224260764759543ab206b5df
] 
[fix qq reader thinko
attila.lendvai at gmail.com**20081229222531
 Ignore-this: d2a54b3ab738bda5bcb17db8eb45ae6e
] 
[fix nested qq reader bug and add log statements. the interesting change is small, getting the previous unquote reader in read-quasi-quote, the rest is logging and indenting
attila.lendvai at gmail.com**20081226180008
 Ignore-this: 6fb58dad7a72583aa0171a3c31def381
] 
[added :unquote-readtable-case to the qq syntax
attila.lendvai at gmail.com**20081214154547
 Ignore-this: 9a22ab89a7c9f9ce1e85a8d3f5657dc9
] 
[TAG 2008-11-27
attila.lendvai at gmail.com**20081127150509
 Ignore-this: 130c861e19237f1634b690048054d730
] 
Patch bundle hash:
a04b03b9ee300d067621e76419ea547eb428c2c8
-------------- next part --------------
Wed Nov  4 17:28:40 MSK 2009  Alexander Gavrilov <angavrilov at gmail.com>
  * Allow Closer-MOP to shadow some standard names.
  
  In most implementations Closer-MOP replaces some of
  the system definitions with its own. This requires
  using shadowing import, and ignoring import conflicts
  in automated code.

New patches:

[Allow Closer-MOP to shadow some standard names.
Alexander Gavrilov <angavrilov at gmail.com>**20091104142840
 Ignore-this: b8555383af7ac2ab66a0dfd836e2f512
 
 In most implementations Closer-MOP replaces some of
 the system definitions with its own. This requires
 using shadowing import, and ignoring import conflicts
 in automated code.
] hunk ./source/common.lisp 16
               (funcall filter symbol))
       ;; do take care of the symbol nil: (list nil)!
       (let ((symbol (or symbol (list nil))))
-        (import symbol target-package)
-        (export symbol target-package)))))
+        (ignore-errors
+          (import symbol target-package)
+          (export symbol target-package))))))
 
 (defun export-external-symbols-of-used-packages (package &key filter)
   (dolist (used-package (package-use-list (find-package package)))
hunk ./source/package.lisp 17
         :iterate
         :metabang-bind)
 
+  (:shadowing-import-from :closer-mop
+                          #:standard-generic-function
+                          #:defgeneric
+                          #:ensure-generic-function
+                          #:remove-method
+                          #:find-method)
+
   (:export #:export-external-symbols
            #:export-external-symbols-of-used-packages))

Context:

[Initial.
levente.meszaros at gmail.com**20091020163606
 Ignore-this: 59b607773dd7f62f847f4182a72d5bf3
] 
Patch bundle hash:
47cf6f6c29b0806565daaf9009eaac5a8639dc09
-------------- next part --------------
Wed Nov  4 16:00:52 MSK 2009  Alexander Gavrilov <angavrilov at gmail.com>
  * Reduce dependencies of the core package.
  
  Separate a base package that does not have so many
  dependencies; especially on iolib, since it appears
  to have very limited OS portability.
  
  Also note that the reader case macro does not quite
  work if the body refers to symbols in non-existant
  packages, hence the addition of an ordinary guard.

New patches:

[Reduce dependencies of the core package.
Alexander Gavrilov <angavrilov at gmail.com>**20091104130052
 Ignore-this: d60010dfe92362b2bc4c69eab55b23cb
 
 Separate a base package that does not have so many
 dependencies; especially on iolib, since it appears
 to have very limited OS portability.
 
 Also note that the reader case macro does not quite
 work if the body refers to symbols in non-existant
 packages, hence the addition of an ordinary guard.
] addfile ./hu.dwim.util-base.asd
hunk ./hu.dwim.util-base.asd 1
+;;; -*- mode: Lisp; Syntax: Common-Lisp; -*-
+;;;
+;;; Copyright (c) 2009 by the authors.
+;;;
+;;; See LICENCE for details.
+
+(load-system :hu.dwim.asdf)
+
+(in-package :hu.dwim.asdf)
+
+(defsystem :hu.dwim.util-base
+  :class hu.dwim.system
+  :setup-readtable-function-name "hu.dwim.util::setup-readtable"
+  :author ("Attila Lendvai <attila.lendvai at gmail.com>"
+           "Tam?s Borb?ly <tomi.borbely at gmail.com>"
+           "Levente M?sz?ros <levente.meszaros at gmail.com>")
+  :licence "BSD / Public domain"
+  :description "Various utilities"
+  :depends-on (:cl-fad
+               :trivial-shell
+               :hu.dwim.common
+               :hu.dwim.def
+               :hu.dwim.defclass-star+hu.dwim.def
+               :hu.dwim.syntax-sugar
+               #+#.(cl:when (cl:find-package "SWANK") '(:and))
+               ;; TODO it should be :hu.dwim.syntax-sugar once the readtable supporting package definer is added
+               :hu.dwim.syntax-sugar+swank)
+  :components ((:module "source"
+                :components ((:file "configuration" :depends-on ("package"))
+                             (:file "integer-to-string" :depends-on ("configuration"))
+                             (:file "package")
+                             (:file "string" :depends-on ("configuration"))
+                             (:file "util" :depends-on ("configuration"))))))
hunk ./hu.dwim.util.asd 18
            "Levente M?sz?ros <levente.meszaros at gmail.com>")
   :licence "BSD / Public domain"
   :description "Various utilities"
-  :depends-on (:cl-fad
+  :depends-on (:hu.dwim.util-base
                :command-line-arguments
hunk ./hu.dwim.util.asd 20
-               :hu.dwim.common
-               :hu.dwim.def
-               :hu.dwim.defclass-star+hu.dwim.def
                :hu.dwim.syntax-sugar+swank ; TODO it should be :hu.dwim.syntax-sugar once the readtable supporting package definer is added
hunk ./hu.dwim.util.asd 21
-               :iolib.syscalls
-               :trivial-shell)
+               :iolib.syscalls)
   :components ((:module "source"
hunk ./hu.dwim.util.asd 23
-                :components ((:file "command-line" :depends-on ("configuration"))
-                             (:file "configuration" :depends-on ("package"))
-                             (:file "dynamic-context" :depends-on ("util"))
-                             (:file "error-handling" :depends-on ("util"))
-                             (:file "integer-to-string" :depends-on ("configuration"))
-                             (:file "package")
-                             (:file "production" :depends-on ("util"))
-                             (:file "string" :depends-on ("configuration"))
-                             (:file "util" :depends-on ("configuration"))))
+                :components ((:file "command-line")
+                             (:file "dynamic-context")
+                             (:file "error-handling")
+                             (:file "production")))
                (:module "integration"
                 :depends-on ("source")
                 :components (#+sbcl (:file "sbcl")))))
hunk ./source/util.lisp 81
 
 (def (macro e) with-thread-name (name &body body)
   (declare (ignorable name))
-  #*((:sbcl
+  #*(#+sbcl
+     (:sbcl
       (with-unique-names (thread previous-name)
         `(let* ((,thread sb-thread:*current-thread*)
                 (,previous-name (sb-thread:thread-name ,thread)))

Context:

[moved integer-to-string here from wui
attila.lendvai at gmail.com**20091101181205
 Ignore-this: 6b4465f29b8b944bbf1ba30da25cb6c0
] 
[smallies to production.lisp: reinstate logging through *debug-io*, etc
attila.lendvai at gmail.com**20091030161410
 Ignore-this: 5b8817bddf63778e85009520a34b7c0
] 
[def constant uses equal test by default
levente.meszaros at gmail.com**20091023134441
 Ignore-this: 6250b49b54543b5bed105c9749e32ca
] 
[Follow hu.dwim.common split
levente.meszaros at gmail.com**20091020163517
 Ignore-this: fbde08fb6ee6282161f91475feaed825
] 
[Fix docu
levente.meszaros at gmail.com**20091020163423
 Ignore-this: 5b1ccd68686345903b4d186ed47dd3af
] 
[Follow hu.dwim.common-lisp renaming.
levente.meszaros at gmail.com**20091020141010
 Ignore-this: 3ecb0c8be921cfefe2fb0151d1ec920d
] 
[Documentation.
levente.meszaros at gmail.com**20091020123312
 Ignore-this: 86df050e391812a4afd391e5f9c60036
] 
[Follow logger
levente.meszaros at gmail.com**20091009161733
 Ignore-this: f6a3bbd95984b661cd4e46194735481
] 
[Revive missing functions.
levente.meszaros at gmail.com**20090924215331
 Ignore-this: 26e63c2c8515137623bdcbaebfd93481
] 
[Remove unused code.
levente.meszaros at gmail.com**20090924110222
 Ignore-this: 6417042d8d284b74900311be517a5ced
] 
[Separate command line option support.
levente.meszaros at gmail.com**20090924110003
 Ignore-this: e9b685df7154c853bc21ed5d9f97ce64
] 
[housekeeping
attila.lendvai at gmail.com**20090921172520
 Ignore-this: cdcef58013a1c1fdfb83673e503319d3
] 
[Fix swank startup.
levente.meszaros at gmail.com**20090915115807
 Ignore-this: 2c6e2cc9aa60b09cdd9b0b2bb54224f9
] 
[Renames.
levente.meszaros at gmail.com**20090915115747
 Ignore-this: 97fd3824aaad71fda11591013144fa9a
] 
[asdf
levente.meszaros at gmail.com**20090914102313
 Ignore-this: fa52da038a9ab58f3e6646b8cfa5d952
] 
[Command line arguments.
levente.meszaros at gmail.com**20090911154124
 Ignore-this: fd6c3076640fd10871374d96de89683a
] 
[String+
levente.meszaros at gmail.com**20090911152730
 Ignore-this: 2f8546d659de2bf131827254070f3929
] 
[Some string utils.
levente.meszaros at gmail.com**20090910101557
 Ignore-this: 6decea85c9e0f99d8fe0ce3ae356c990
] 
[Build image.
levente.meszaros at gmail.com**20090908102300
 Ignore-this: 637e1db1da91876c8bbc188e1768b1a3
] 
[Added CV.
levente.meszaros at gmail.com**20090908102247
 Ignore-this: c7e0038db278c6cdf6d56a25db1ea00c
] 
[Fix asdf
levente.meszaros at gmail.com**20090908102143
 Ignore-this: ea7c9171e3836932a4cf66b40bb46499
] 
[In package hu.dwim.asdf
levente.meszaros at gmail.com**20090908101948
 Ignore-this: 7b76fa53e5cf2f1d05c064d9d74bc540
] 
[Added production support.
levente.meszaros at gmail.com**20090907163551
 Ignore-this: 1a29621c942dc70ed2e0c1b2ff40afc5
] 
[Fix asdf dependency.
levente.meszaros at gmail.com**20090825112231
 Ignore-this: 784a7957979fdc95ecfb7bfa0ed5ed5c
] 
[Copy dwim<>= from old dwim.
levente.meszaros at gmail.com**20090823204517
 Ignore-this: c899d5c1676dd448692b8c3c413c9655
] 
[Kill duplicates in dynamic-context implementation
levente.meszaros at gmail.com**20090823143745
 Ignore-this: d89f346f79e582596192f36c00986c1
] 
[Refactor for dwim.hu
levente.meszaros at gmail.com**20090814162656
 Ignore-this: e0b1a500c0ebbda03b0280d763555512
] 
[Depend on swank for readtable support.
levente.meszaros at gmail.com**20090718110713
 Ignore-this: 4bb0ab3c8ae7bd5d2b495a82696c7964
] 
[Rename asdf system connection.
levente.meszaros at gmail.com**20090709160741
 Ignore-this: e1a165415f14b5c0079d455481e8bdfa
] 
[error handling work, get rid of *debug-context*
attila.lendvai at gmail.com**20090709135712
 Ignore-this: 7f51bb46e4c17b0d96555736ba97ea0e
] 
[asd: follow :hu.dwim.util rename
attila.lendvai at gmail.com**20090709135646
 Ignore-this: 144f835cbd975b2021029c23154137e8
] 
[added ensure-sequence
attila.lendvai at gmail.com**20090709135632
 Ignore-this: c6ea28e3abd89125f67d3c53f12a1217
] 
[Fix integration.
levente.meszaros at gmail.com**20090707145809
 Ignore-this: 1cdaec0d1dcea9be0f6929046a8cc31c
] 
[factored out error handling from wui
attila.lendvai at gmail.com**20090706212508
 Ignore-this: 6b7112c3285fd7b68fbcb2df8cce6f7a
] 
[don't depend on cl-walker
attila.lendvai at gmail.com**20090703105222
 Ignore-this: 72e73fbd07e702a4cc39a78a3e7499d
] 
[Renamed system to hu.dwim.util.
levente.meszaros at gmail.com**20090707144856
 Ignore-this: b05eb6d6baa4a61e1e8707974023bbfa
] 
[Fix bang syntax.
levente.meszaros at gmail.com**20090630130914
 Ignore-this: fefa0e55759b7a6bcd000880cfc163cf
] 
[Initial.
levente.meszaros at gmail.com**20090630125600
 Ignore-this: 8e816ff638ae6be1a3f22a362699f99
] 
Patch bundle hash:
284c0c0226655b62728279cc6b85a78ac2f578f0
-------------- next part --------------
Wed Nov  4 15:55:23 MSK 2009  Alexander Gavrilov <angavrilov at gmail.com>
  * Don't use nested reader conditions.
  
  They break ClozureCL's parser for some reason,
  so it reports a premature end of file.

New patches:

[Don't use nested reader conditions.
Alexander Gavrilov <angavrilov at gmail.com>**20091104125523
 Ignore-this: 7c5c2e6a007952dd4fa24a392171861f
 
 They break ClozureCL's parser for some reason,
 so it reports a premature end of file.
] {
hunk ./source/configuration.lisp 15
 (defun setup-readtable ()
   (enable-sharp-boolean-syntax))
 
+#|
 #+nil
 #+#.(cl:when (cl:find-package "SWANK") '(:and))
 (register-readtable-for-swank
hunk ./source/configuration.lisp 20
  '(:hu.dwim.def) 'setup-readtable)
+|#
}

Context:

[added preliminary struct definer
attila.lendvai at gmail.com**20091029180028
 Ignore-this: b0d5b458e65f7fada300aae7280e8932
] 
[move with-class-definer-options
attila.lendvai at gmail.com**20091029180015
 Ignore-this: 2874fc2b0a64b7b54263e01f828a6ef2
] 
[export function-like-definer-declarations
attila.lendvai at gmail.com**20091028195754
 Ignore-this: 760e679d6634d703819b8d1274852d
] 
[Fix docu.
levente.meszaros at gmail.com**20091020163317
 Ignore-this: ed0a508a5ab233596ff26e18fe50c7f2
] 
[Follow hu.dwim.common-lisp renaming.
levente.meszaros at gmail.com**20091020140926
 Ignore-this: db4896750e165d598d468e6f1bbe1109
] 
[Documentation.
levente.meszaros at gmail.com**20091020123304
 Ignore-this: 3f4b7f21e6667dcd854eb7ef268c3911
] 
[Moved logger integration into logger.
levente.meszaros at gmail.com**20091009161426
 Ignore-this: e691d5379b8a841c55f8c2c4e3900c7f
] 
[added a with-macro test that tests the proper (-body- arg1 arg2) arg order
attila.lendvai at gmail.com**20090929124624
 Ignore-this: 6633c7830997afc10ad7a434e5dfe424
] 
[follow some changes in some tests
attila.lendvai at gmail.com**20090929124605
 Ignore-this: 44f7ea5c8d4c66da277f8e351ef0bc6c
] 
[fix with-macro: then using (-body- some local args) the order got reversed by some changes
attila.lendvai at gmail.com**20090929004017
 Ignore-this: 2368d08fbb73e79e75f3a7fe8b0f1489
] 
[Use equal as a test function in def constant by default.
levente.meszaros at gmail.com**20090924120741
 Ignore-this: b28c43f55dad597f7eec65d35bc980d1
] 
[Eliminate usused duplicates.
levente.meszaros at gmail.com**20090922125702
 Ignore-this: 6c12d56e6c562a89e37e3cfdd7e7bc8b
] 
[Get rid of aif, awhen, aprog1 we're using anaphora.
levente.meszaros at gmail.com**20090922124917
 Ignore-this: 78fc3db26a748941e5feec6deb419816
] 
[Bettern namespace definer.
levente.meszaros at gmail.com**20090917140251
 Ignore-this: ad992ce7eeed63abf2e81741be417984
] 
[In package hu.dwim.asdf
levente.meszaros at gmail.com**20090908101529
 Ignore-this: 7f7f7117ce6e95efc97679e2c51ab8b9
] 
[Added namespace definer.
levente.meszaros at gmail.com**20090826091023
 Ignore-this: a862abf5075d40cf68954f50c78df1c8
] 
[Tell swank about the readtable.
levente.meszaros at gmail.com**20090826091008
 Ignore-this: 2880585bdac827d090f562955c3e5e3
] 
[Refactor for dwim.hu
levente.meszaros at gmail.com**20090814155554
 Ignore-this: 77d7142cb4f590bc2a94457108339b4b
] 
[More liberal handling of literal AST nodes for qq in with-macros.
levente.meszaros at gmail.com**20090617181412
 Ignore-this: 43e0583601bda91b130e2ad4c3793d5c
] 
[Some more stefil integration.
levente.meszaros at gmail.com**20090617181400
 Ignore-this: 79c30583a1db505fd46bb84563c09028
] 
[Added cl-yalog integration.
levente.meszaros at gmail.com**20090617181345
 Ignore-this: 19bce08db868adf61270de1dc7e52058
] 
[Version 1.0.
levente.meszaros at gmail.com**20090617181307
 Ignore-this: 595ffee31519f3eff463e0fd2e59cb14
] 
[fix with-macro definer regression
attila.lendvai at gmail.com**20090226100840
 Ignore-this: 94b19ed5b642b53af6b801474a70e5a2
] 
[fix with-macro definer when passing values from the with-macro body to the user body
attila.lendvai at gmail.com**20090225172819
 Ignore-this: cdf04043daef0c58819277333cf3b5ad
] 
[in debug mode declaim notinline
attila.lendvai at gmail.com**20090225172805
 Ignore-this: b592f3ee56d1059e4b78a877682c0c0c
] 
[clearer error message for missing definers
attila.lendvai at gmail.com**20090130094101
 Ignore-this: 24f72dda038f41765cdad00ee3b14106
] 
[with-macro supports the "d" flag
attila.lendvai at gmail.com**20090117145910
 Ignore-this: fc11051ee7ce406f0a1a8ed484c37311
] 
[do the exporting in an eval-when
attila.lendvai at gmail.com**20090117145843
 Ignore-this: 9efdcef6fa27e6ee81d74453351d3062
] 
[be more tolerant to missing (-body-) in with-macro (cl-qq bodies may contain CLOS AST instances where it cannot descent)
attila.lendvai at gmail.com**20081214202116
 Ignore-this: 95aa0f678f97ca08f68031a2c45520f1
] 
[&rest support for with-macro
attila.lendvai at gmail.com**20081207153004
 Ignore-this: afa27dcecc39d8e725b2eb364ba586ec
] 
[test for &rest support of with-macro
attila.lendvai at gmail.com**20081207142100
 Ignore-this: 5f7b92c1e83a786eb9612736c6b3c724
] 
[with-macro: now supports (-body- (macro-body-variable-name fn-lexical-variable-name)) format. see tests for details in the following patch
attila.lendvai at gmail.com**20081207120639
 Ignore-this: e1c110ea14a2eaee0885f0b5dd4ccb6c
] 
[with-macro tests
attila.lendvai at gmail.com**20081207120617
 Ignore-this: 56219f40bc8f8cd983b24c41ef6769f5
] 
[TAG 2008-11-27
attila.lendvai at gmail.com**20081127150329
 Ignore-this: 324fbf5b086987945987709499158ae3
] 
Patch bundle hash:
3751cc274d38c1a085bbb85e8d0f9537d8d5c586
-------------- next part --------------
Wed Nov  4 16:49:15 MSK 2009  Alexander Gavrilov <angavrilov at gmail.com>
  * Reduce dependencies by using a simpler version of util.

Wed Nov  4 16:51:27 MSK 2009  Alexander Gavrilov <angavrilov at gmail.com>
  * Relax some of the lexenv test conditions.
  
  - The order of some of the names is not important
    and changes between implementations.
  - ECL adds gensym-named blocks around the code.

Wed Nov  4 17:15:46 MSK 2009  Alexander Gavrilov <angavrilov at gmail.com>
  * Reimplement support for OpenMCL aka Clozure CL.
  
  The environment there does not contain information
  about tags and blocks, so the relevant operations are
  stubs. Also, during compilation special variable
  proclamations are stored in a special definition
  context, so special-variable-name? needs a lexenv
  to be fully correct.

Wed Nov  4 17:21:24 MSK 2009  Alexander Gavrilov <angavrilov at gmail.com>
  * Add support for ECL.
  
  This implementation does not support the read-only
  flag parameter of load-time-value.

New patches:

[Reduce dependencies by using a simpler version of util.
Alexander Gavrilov <angavrilov at gmail.com>**20091104134915
 Ignore-this: 7404ba3233f8433067167d501db5eb2f
] hunk ./hu.dwim.walker.asd 23
                :closer-mop
                :hu.dwim.common-lisp
                :hu.dwim.def+contextl
-               :hu.dwim.defclass-star
-               :hu.dwim.util
+               :hu.dwim.defclass-star+hu.dwim.def
+               :hu.dwim.util-base
                :metabang-bind)
   :components ((:file "package" :pathname "source/package")
                (:module "integration"
[Relax some of the lexenv test conditions.
Alexander Gavrilov <angavrilov at gmail.com>**20091104135127
 Ignore-this: ec59f362290b3a38bec8ef863ad0a2d3
 
 - The order of some of the names is not important
   and changes between implementations.
 - ECL adds gensym-named blocks around the code.
] {
hunk ./test/lexenv.lisp 11
 
 (defsuite* (test/lexenv :in test))
 
+(defun equal-any (item &rest args)
+  (some (lambda (a) (equal item a)) args))
+
 ;; TODO would be better to use macroexpand-all for this, because stefil's errors get to compile
 ;; which aborts at the first failure and skips the other assertions
 (defun compile* (form)
hunk ./test/lexenv.lisp 103
                 (z 3))
             (declare (ignore z))
             (macrolet ((dummy (&environment env)
-                         (is (equal '(dummy m1 m2)
-                                    (collect-macros-in-lexenv env)))
+                         (is (equal-any (collect-macros-in-lexenv env)
+                                        '(dummy m1 m2) '(dummy m2 m1)))
                          (bind ((macros 0))
                            (do-macros-in-lexenv (env name fn)
                              (is (and (symbolp name)
hunk ./test/lexenv.lisp 132
                 (z 3))
             (declare (ignore z))
             (macrolet ((dummy (&environment env)
-                         (is (equal '(a b)
-                                    (collect-symbol-macros-in-lexenv env)))
+                         (is (equal-any (collect-symbol-macros-in-lexenv env)
+                                        '(a b) '(b a)))
                          (bind ((symbol-macros 0))
                            (do-symbol-macros-in-lexenv (env name definition)
                              (is (and (symbolp name)
hunk ./test/lexenv.lisp 160
             (declare (ignore z))
             (macrolet ((dummy (&environment env)
                          (is (equal '(b2 b1)
-                                    (collect-blocks-in-lexenv env)))
+                                    (remove-if-not #'symbol-package
+                                                   (collect-blocks-in-lexenv env))))
                          (bind ((blocks 0))
                            (do-blocks-in-lexenv (env name)
hunk ./test/lexenv.lisp 164
-                             (is (and (symbolp name)
-                                      (eq (symbol-package name) ,*package*)))
-                             (incf blocks))
+                             (when (symbol-package name)
+                               (is (and (symbolp name)
+                                        (eq (symbol-package name) ,*package*)))
+                               (incf blocks)))
                            (is (= blocks 2)))
                          (is (find-block-in-lexenv 'b1 env))
                          (is (not (find-block-in-lexenv 'dummy env)))
hunk ./test/lexenv.lisp 189
           t22
             (block b2
               (macrolet ((dummy (&environment env)
-                           (is (equal '(t21 t22 t1 t2)
-                                      (collect-tags-in-lexenv env)))
+                           (is (equal-any (collect-tags-in-lexenv env)
+                                          '(t21 t22 t1 t2) '(t22 t21 t2 t1)))
                            (bind ((tags 0))
                              (do-tags-in-lexenv (env name)
                                (is (and (symbolp name)
}
[Reimplement support for OpenMCL aka Clozure CL.
Alexander Gavrilov <angavrilov at gmail.com>**20091104141546
 Ignore-this: 5cd52ba31db5635e3297c7a38208bc9
 
 The environment there does not contain information
 about tags and blocks, so the relevant operations are
 stubs. Also, during compilation special variable
 proclamations are stored in a special definition
 context, so special-variable-name? needs a lexenv
 to be fully correct.
] {
hunk ./integration/openmcl.lisp 9
 
 (in-package :hu.dwim.walker)
 
-#|
+;;;
+;;; Clozure CL
+;;;
 
hunk ./integration/openmcl.lisp 13
-TODO provide the new api based on this old code. see lexenv-sbcl.lisp for an example.
+(defun make-empty-lexical-environment ()
+  (ccl::new-lexical-environment))
 
hunk ./integration/openmcl.lisp 16
-(defmethod lexical-variables ((environment ccl::lexical-environment))
-  (loop
-     for env = environment
-          then (ccl::lexenv.parent-env env)
-     while (and env
-                (not (ccl::istruct-typep env 'ccl::definition-environment)))
-     for vars = (ccl::lexenv.variables env)
-     when (listp vars)
-     ;; we now weed out all symbol-macros and ignored variables
-     append (remove-if (lambda (var-name)
-                         (let ((decs (assoc var-name (ccl::lexenv.vdecls env))))
-                           (and decs
-                                (eql 'cl:ignore (second decs))
-                                (eql 'cl:t (cddr decs)))))
-                       (mapcar (lambda (var)
-                                 ;; ccl::var-name is a macro, se we can't do #'ccl::var-name directly
-                                 (ccl::var-name var))
-                               (remove-if (lambda (var-spec)
-                                            (and (ccl::var-ea var-spec)
-                                                 (consp (ccl::var-ea var-spec))
-                                                 (eql :symbol-macro (car (ccl::var-ea var-spec)))))
-                                          vars)))))
+;;;
+;;; utilities
+;;;
+
+(defun ccl-defenv-p (env)
+  (ccl::istruct-typep env 'ccl::definition-environment))
+
+(defmacro do-ccl-env-chain ((env-var env-item &key with-defenv) &body code)
+  `(do ((,env-var ,env-item (ccl::lexenv.parent-env ,env-var)))
+       ((or (null ,env-var)
+            ,(if with-defenv
+                 `(consp ,env-var)
+                 `(ccl-defenv-p ,env-var))))
+     , at code))
 
hunk ./integration/openmcl.lisp 31
-(defmethod lexical-functions ((environment ccl::lexical-environment))
+(defun ccl-get-var-decls (var-name env)
   (loop
hunk ./integration/openmcl.lisp 33
-     for env = environment
-          then (ccl::lexenv.parent-env env)
-     while (and env
-                (not (ccl::istruct-typep env 'ccl::definition-environment)))
-     for funs = (ccl::lexenv.functions env)
-     when (listp funs)
-     ;; we now weed out all symbol-macros and ignored variables
-     append (mapcar (lambda (func-spec)
-                      ;; convert the function name to a "real" function name
-                      (let ((name (first func-spec)))
-                        (if (eql (symbol-package (first func-spec))
-                                 (find-package :SETF))
-                            (list 'cl:setf (read-from-string (symbol-name name)))
-                            name)))
-                    (remove-if (lambda (func-spec)
-                                 ;; weed out all the macrolets
-                                 (eql 'ccl::macro (second func-spec)))
-                               funs))))
-|#
+     for dec in (ccl::lexenv.vdecls env)
+     when (eq (car dec) var-name)
+     collect (cdr dec)))
+
+(defun ccl-get-env-vars (env)
+  ;; The variable list field may contain a special
+  ;; barrier sentinel. Ignore it.
+  (let ((lst (ccl::lexenv.variables env)))
+    (if (listp lst) lst)))
+
+(defun ccl-proclaimed-special-p (name &optional lexenv)
+  ;; During compilation the special proclamations are
+  ;; collected in the definition environment.
+  (let* ((defenv (ccl::definition-environment lexenv))
+         (specials (if defenv (ccl::defenv.specials defenv))))
+    (or (ccl::assq name specials)
+        (ccl:proclaimed-special-p name))))
+
+(defun ccl-defined-const-p (name &optional lexenv)
+  (let* ((defenv (ccl::definition-environment lexenv))
+         (consts (if defenv (ccl::defenv.constants defenv))))
+    (ccl::assq name consts)))
+
+(defun ccl-ignored-decl-p (decls)
+  (cdr (ccl::assq 'ignore decls)))
+
+(defun ccl-special-decl-p (decls)
+  (cdr (ccl::assq 'special decls)))
+
+(defun ccl-symbol-macro-p (var-spec)
+  (let ((exp (ccl::var-expansion var-spec)))
+    (and (consp exp)
+         (eql :symbol-macro (car exp)))))
+
+;;;
+;;; iteration
+;;;
+
+(defun iterate-variables-in-lexenv (visitor lexenv
+                                    &key include-ignored? include-specials?
+                                    &aux hide-list)
+  (do-ccl-env-chain (env lexenv)
+    ;; Local functions spawn temporaries; hide them
+    (dolist (func-spec (ccl::lexenv.functions env))
+      (when (eql 'ccl::function (cadr func-spec))
+        (push (cdddr func-spec) hide-list)))
+    ;; Enumerate vars
+    (dolist (var-spec (ccl-get-env-vars env))
+      (let* ((name      (ccl::var-name var-spec))
+             (var-decls (ccl-get-var-decls name env))
+             (macro?    (ccl-symbol-macro-p var-spec))
+             (ignored?  (ccl-ignored-decl-p var-decls))
+             (special?  (ccl-special-decl-p var-decls)))
+        (when (and (not macro?)
+                   (or (not ignored?)
+                       include-ignored?)
+                   (or (not special?)
+                       include-specials?)
+                   (not (member name hide-list)))
+          (funcall visitor name :ignored? ignored? :special? special?))))))
+
+(defun iterate-symbol-macros-in-lexenv (visitor lexenv)
+  (do-ccl-env-chain (env lexenv :with-defenv t)
+    (if (ccl-defenv-p env)
+        (dolist (cell (ccl::defenv.symbol-macros env))
+          (funcall visitor (car cell) (cdr cell)))
+        (dolist (var-spec (ccl-get-env-vars env))
+          (let* ((name      (ccl::var-name var-spec))
+                 (macro?    (ccl-symbol-macro-p var-spec)))
+            (when macro?
+              (funcall visitor name
+                       (cdr (ccl::var-expansion var-spec)))))))))
+
+(defun iterate-functions-in-lexenv (visitor lexenv)
+  (do-ccl-env-chain (env lexenv)
+    (dolist (func-spec (ccl::lexenv.functions env))
+      (let* ((name      (ccl::maybe-setf-name (first func-spec)))
+             (function? (eql 'ccl::function (second func-spec))))
+        (when function?
+          (funcall visitor name))))))
+
+(defun iterate-macros-in-lexenv (visitor lexenv)
+  (do-ccl-env-chain (env lexenv :with-defenv t)
+    ;; lexenv.functions can operate on a defenv
+    (dolist (func-spec (ccl::lexenv.functions env))
+      (let* ((name     (first func-spec))
+             (macro?   (eql 'ccl::macro (second func-spec))))
+        (when macro?
+          (assert (functionp (cddr func-spec)))
+          (funcall visitor name (cddr func-spec)))))))
+
+(defun iterate-blocks-in-lexenv (visitor lexenv)
+  (declare (ignore visitor lexenv))
+  (cerror "ignore and do nothing"
+          "The lexical environment does not contain blocks in Clozure CL"))
+
+(defun iterate-tags-in-lexenv (visitor lexenv)
+  (declare (ignore visitor lexenv))
+  (cerror "ignore and do nothing"
+          "The lexical environment does not contain tags in Clozure CL"))
+
+;;;
+;;; augmentation
+;;;
+
+(defun augment-lexenv-with-variable (name lexenv &key special ignored)
+  (let* ((decls (if special `(special ,name)))
+         (env (ccl:augment-environment lexenv :variable (list name) :declare decls)))
+    ;; augment-environment does not understand ignore decls
+    (when ignored
+      (push (list* name 'ignore t) (ccl::lexenv.vdecls env)))
+    env))
+
+(defun augment-lexenv-with-function (name lexenv)
+  (ccl:augment-environment lexenv :function (list name)))
+
+(defun augment-lexenv-with-macro (name def lexenv)
+  (ccl:augment-environment lexenv :macro (list (list name def))))
+
+(defun augment-lexenv-with-symbol-macro (name def lexenv)
+  (ccl:augment-environment lexenv :symbol-macro (list (list name def))))
+
+(defun augment-lexenv-with-block (name lexenv)
+  (declare (ignore name))
+  ;; Do nothing
+  lexenv)
+
+(defun augment-lexenv-with-tag (name lexenv)
+  (declare (ignore name))
+  ;; Do nothing
+  lexenv)
+
hunk ./source/handler.lisp 77
             (recurse (walker-macroexpand-1 -form- lexenv)))
            ;; FIXME special variable handling is most probably not good as it is:
            ;; check proper behavior regarding the lexenv nesting and the parent walking below for (DECLARE (SPECIAL ...)) entries
-           ((or (special-variable-name? -form-)
+           ((or (special-variable-name? -form- lexenv)
                 (loop
                    :for node = -parent- :then (parent-of node)
                    :while node
hunk ./source/handler.lisp 231
                               (loop
                                 :for binding :in (bindings-of let)
                                 :for name = (name-of binding)
-                                :do (when (and (not (special-variable-name? name))
+                                :for lexenv = (env/lexical-environment -environment-)
+                                :do (when (and (not (special-variable-name? name lexenv))
                                                (not (find-if (lambda (declaration)
                                                                (and (typep declaration 'special-variable-declaration-form)
                                                                     (eq name (name-of declaration))))
hunk ./source/handler.lisp 264
                               (setf (bindings-of let*-form)
                                     (loop
                                       :for entry :in (second -form-)
+                                      :for lexenv = (env/lexical-environment -environment-)
                                       :collect (bind (((name &optional initial-value) (ensure-list entry)))
                                                  (with-form-object (binding 'lexical-variable-binding-form let*-form :name name)
                                                    (setf (initial-value-of binding) (recurse initial-value binding))
hunk ./source/handler.lisp 268
-                                                   (when (and (not (special-variable-name? name))
+                                                   (when (and (not (special-variable-name? name lexenv))
                                                               (not (find-if (lambda (declaration)
                                                                               (and (typep declaration 'special-variable-declaration-form)
                                                                                    (eq name (name-of declaration))))
hunk ./source/infrastructure.lisp 61
   (bind (#+sbcl(sb-ext:*evaluator-mode* :interpret))
     (common-lisp:eval form)))
 
-(def function special-variable-name? (name)
+(def function special-variable-name? (name &optional lexenv)
+  (declare (ignorable lexenv))
   (and (symbolp name)
        (not (keywordp name))
        (not (member name '(t nil) :test #'eq))
hunk ./source/infrastructure.lisp 69
        (or (boundp name)
            #+sbcl(eq (sb-int:info :variable :kind name) :special)
            #+lispworks(eq (common-lisp::variable-information name) :special)
+           #+openmcl (or (ccl-proclaimed-special-p name lexenv)
+                         (ccl-defined-const-p name lexenv))
            ;; This is the only portable way to check if a symbol is
            ;; declared special, without being boundp, i.e. (defvar 'foo).
            ;; Maybe we should make it optional with a compile-time flag?
hunk ./test/lexenv.lisp 148
                          nil))
               (dummy))))))))
 
+#-openmcl
 (deftest test/lexenv/query/blocks ()
   (compile*
    `(block b1
hunk ./test/lexenv.lisp 177
                          nil))
               (dummy))))))))
 
+#-openmcl
 (deftest test/lexenv/query/tags ()
   (compile*
    `(block b1
}
[Add support for ECL.
Alexander Gavrilov <angavrilov at gmail.com>**20091104142124
 Ignore-this: aa0be664c72e4dacbcf932403e57c594
 
 This implementation does not support the read-only
 flag parameter of load-time-value.
] {
addfile ./integration/ecl.lisp
hunk ./hu.dwim.walker.asd 34
                              #+cmu(:file "cmucl")
                              #+lispworks(:file "lispworks")
                              #+openmcl(:file "openmcl")
+                             #+ecl(:file "ecl")
                              #+sbcl(:file "sbcl")))
                (:module "source"
                 :depends-on ("integration")
hunk ./integration/ecl.lisp 1
+;;; -*- mode: Lisp; Syntax: Common-Lisp; -*-
+;;;
+;;; Copyright (c) 2008 by the authors.
+;;;
+;;; See LICENSE for details.
+
+(in-package :hu.dwim.walker)
+
+;;;
+;;; ECL
+;;;
+
+(defun make-empty-lexical-environment ()
+  (c::cmp-env-new))
+
+;;;
+;;; utilities
+;;;
+
+(defun ecl-variable-spec-p (spec)
+  (and (listp spec)
+       (member (second spec) '(:special t))))
+
+(defun ecl-symbol-macro-spec-p (spec)
+  (and (listp spec)
+       (eql (second spec) 'si::symbol-macro)))
+
+(defun ecl-macro-spec-p (spec)
+  (and (listp spec)
+       (eql (second spec) 'si::macro)))
+
+(defun ecl-function-spec-p (spec)
+  (and (listp spec)
+       (eql (second spec) 'c::function)))
+
+(defun ecl-block-spec-p (spec)
+  (and (listp spec)
+       (eql (first spec) :block)))
+
+(defun ecl-tag-spec-p (spec)
+  (and (listp spec)
+       (eql (first spec) :tag)))
+
+(defun ecl-special-var-p (spec)
+  (eql (second spec) :special))
+
+(defun ecl-ignored-var-p (spec)
+  (< (c::var-ref (fourth spec)) 0))
+
+;;;
+;;; iteration
+;;;
+
+(defun iterate-variables-in-lexenv (visitor lexenv
+                                    &key include-ignored? include-specials?)
+  (dolist (spec (c::cmp-env-variables lexenv))
+    (when (ecl-variable-spec-p spec)
+      (let* ((name     (first spec))
+             (special? (ecl-special-var-p spec))
+             (ignored? (ecl-ignored-var-p spec)))
+        (when (and (or (not special?)
+                       include-specials?)
+                   (or (not ignored?)
+                       include-ignored?))
+          (funcall visitor name :ignored? ignored? :special? special?))))))
+
+(defun iterate-symbol-macros-in-lexenv (visitor lexenv)
+  (dolist (spec (c::cmp-env-variables lexenv))
+    (when (ecl-symbol-macro-spec-p spec)
+      (funcall visitor (first spec) (funcall (third spec) nil nil)))))
+
+(defun iterate-functions-in-lexenv (visitor lexenv)
+  (dolist (spec (c::cmp-env-functions lexenv))
+    (when (ecl-function-spec-p spec)
+      (funcall visitor (first spec)))))
+
+(defun iterate-macros-in-lexenv (visitor lexenv)
+  (dolist (spec (c::cmp-env-functions lexenv))
+    (when (ecl-macro-spec-p spec)
+      (assert (functionp (third spec)))
+      (funcall visitor (first spec) (third spec)))))
+
+(defun iterate-blocks-in-lexenv (visitor lexenv)
+  (dolist (spec (c::cmp-env-variables lexenv))
+    (when (ecl-block-spec-p spec)
+      (funcall visitor (second spec)))))
+
+(defun iterate-tags-in-lexenv (visitor lexenv)
+  (dolist (spec (c::cmp-env-variables lexenv))
+    (when (ecl-tag-spec-p spec)
+      (dolist (name (second spec))
+        (funcall visitor name)))))
+
+;;;
+;;; augmentation
+;;;
+
+(defun augment-lexenv-with-variable (name lexenv &key special ignored)
+  (let* ((env (c::cmp-env-copy lexenv))
+         (var (if special
+                  (c::c1make-global-variable name :warn nil :kind 'c::special)
+                  (c::%make-var :name name :kind 'c::lexical
+                                :ref (if ignored -1 0)))))
+    ;; cmp-env-register-var has a bug and would
+    ;; update the wrong environment
+    (push (list (c::var-name var)
+                (if special :special t)
+                t var)
+          (c::cmp-env-variables env))
+    env))
+
+(defun augment-lexenv-with-function (name lexenv)
+  (let* ((env (c::cmp-env-copy lexenv))
+         (fun (c::make-fun :name name)))
+    (c::cmp-env-register-function fun env)
+    env))
+
+(defun augment-lexenv-with-macro (name def lexenv)
+  (let* ((env  (c::cmp-env-copy lexenv)))
+    (c::cmp-env-register-macro name def env)
+    env))
+
+(defun augment-lexenv-with-symbol-macro (name def lexenv)
+  (let* ((env  (c::cmp-env-copy lexenv)))
+    (c::cmp-env-register-symbol-macro name def env)
+    env))
+
+(defun augment-lexenv-with-block (name lexenv)
+  (let* ((env  (c::cmp-env-copy lexenv)))
+    (c::cmp-env-register-block (c::make-blk :name name))
+    env))
+
+(defun augment-lexenv-with-tag (name lexenv)
+  (let* ((env  (c::cmp-env-copy lexenv)))
+    (c::cmp-env-register-tag (c::make-tag :name name))
+    env))
+
hunk ./source/handler.lisp 559
                                              nil))))
 
 (def unwalker load-time-value-form (body read-only)
-  `(load-time-value ,(recurse body) ,read-only))
+  `(load-time-value ,(recurse body) ,@(if read-only '(t))))
hunk ./source/infrastructure.lisp 71
            #+lispworks(eq (common-lisp::variable-information name) :special)
            #+openmcl (or (ccl-proclaimed-special-p name lexenv)
                          (ccl-defined-const-p name lexenv))
+           #+ecl (sys:specialp name)
            ;; This is the only portable way to check if a symbol is
            ;; declared special, without being boundp, i.e. (defvar 'foo).
            ;; Maybe we should make it optional with a compile-time flag?
hunk ./test/walk-unwalk.lisp 207
   (let* ((a b) (b a)) (equal a b)))
 
 (define-walk-unwalk-test test/walk-unwalk/load-time-value
-  (load-time-value *load-pathname* nil))
+  (load-time-value *load-pathname* #-ecl t))
 
 (define-walk-unwalk-test test/walk-unwalk/locally
   (locally (setq *global* (whoops))))
}

Context:

[doc
attila.lendvai at gmail.com**20091102104931
 Ignore-this: 5598c43a8c733b4d62b12fe6ee683ed1
] 
[readme
attila.lendvai at gmail.com**20091102104916
 Ignore-this: 5207aa11486a04f410844a77a99294a7
] 
[housekeeping, plus some tests
attila.lendvai at gmail.com**20091031022142
 Ignore-this: f9963ef516739e19c3206be99ddcf0a9
] 
[don't store the macro expander lambda's, so that the walked form remains fasl savable
attila.lendvai at gmail.com**20091031021923
 Ignore-this: d38a60fd37a52746b055a88fb32b32ab
] 
[fix lambda list parsing, augment the walkenv in parallel with walking
attila.lendvai at gmail.com**20091031021824
 Ignore-this: b95ab70a4d35ce897f2800de70fa2d55
] 
[tests
attila.lendvai at gmail.com**20091030190650
 Ignore-this: 3ae45a5b32e50c47f355dcd058605e8b
] 
[fix: :in ignore-undefined-references should be in an :around method, because layers are the least important in the dispatch
attila.lendvai at gmail.com**20091030190604
 Ignore-this: 45cf2777b02d06543c350300c93bcc05
] 
[fix: lambda list walking did not update the env (thinko in recent refactorings)
attila.lendvai at gmail.com**20091030190528
 Ignore-this: 6a927a7bc776ea4035c354763563e48b
] 
[tests
attila.lendvai at gmail.com**20091030135348
 Ignore-this: 6bab04690f3c6323058530245d4ad563
] 
[fix in walk-implict-progn 
attila.lendvai at gmail.com**20091030130333
 Ignore-this: 8b416e88b644e95b35b32b88ca261a62
] 
[fix eval-when walking: declarations are not allowed there
attila.lendvai at gmail.com**20091030124532
 Ignore-this: 47cef19ab50a8bd60a1348d11f8e6d14
] 
[smarter let/let* walking, introduced lexical-variable-binding-form and lexical-variable-binder-form
attila.lendvai at gmail.com**20091030124403
 Ignore-this: f100acb10ed293c9d0a63a09f69bb917
] 
[housekeeping
attila.lendvai at gmail.com**20091030112516
 Ignore-this: b974817ecc8b64bafc5c87b70488fbde
] 
[renamed to lexical-variable-bindings-form
attila.lendvai at gmail.com**20091030112453
 Ignore-this: 4bf2ef25ef69d6ec2c5da3a9ce050296
] 
[no need for :dummy in the walkenv anymore
attila.lendvai at gmail.com**20091030110033
 Ignore-this: 88d13836c61de6ce8345e6895fe02b1d
] 
[some flet tests
attila.lendvai at gmail.com**20091029160036
 Ignore-this: 9166b3c7d0af6801b521543abf268f4d
] 
[clean up flet/labels code
attila.lendvai at gmail.com**20091029155935
 Ignore-this: 438c8c4343a09efa0b0d48694ed04745
] 
[rename code slot of lexical-application-form to definition to follow convention
attila.lendvai at gmail.com**20091029155914
 Ignore-this: 44cd295c9fedf6b1ccc8ec6b095c1c0
] 
[fix a bug that cleared the walkenv
attila.lendvai at gmail.com**20091029144230
 Ignore-this: 7082009ac5ad5439b04dd72ad6d56ba7
] 
[clean up walkenv naming, use a typed struct for walk-environmnet instead of a cons
attila.lendvai at gmail.com**20091029144010
 Ignore-this: 230bc7a52eda708879b839a31a2681a0
] 
[added some tests
attila.lendvai at gmail.com**20091028204112
 Ignore-this: 18f3b73ed19165620ec93d38e958f07e
] 
[fix: declarations are allowed in flet bodies
attila.lendvai at gmail.com**20091028203955
 Ignore-this: 853cfeda0462de156186215bda9744ff
] 
[definition slot for walked-lexical-function-object-form pointing to the walked lambda in the flet
attila.lendvai at gmail.com**20091028202150
 Ignore-this: 6fd71f912a0b86bd9cb739e0dbd00279
] 
[housekeeping
attila.lendvai at gmail.com**20091028195140
 Ignore-this: 4840658ae38297e362a3ab90fc30f9aa
] 
[a bit of factoring on function arguments
attila.lendvai at gmail.com**20091028195018
 Ignore-this: 14902eb6c3b86d887e6b0f14937c5505
] 
[housekeeping
attila.lendvai at gmail.com**20091026153641
 Ignore-this: f144c172a8381edff02858c5a5d1a4f1
] 
[some renames
attila.lendvai at gmail.com**20091026153552
 Ignore-this: 93f06b116ce1eff8ebe452e6fbc3887d
] 
[renamed to implicit-progn-with-declarations-mixin
attila.lendvai at gmail.com**20091026151254
 Ignore-this: a482e1361b41c3f2f34b1f3fb51ceb95
] 
[drop split-body
attila.lendvai at gmail.com**20091026150844
 Ignore-this: 799721cb4003ef6df1352bec4e53d439
] 
[clean up lambda walking, fix defun docstring bug
attila.lendvai at gmail.com**20091026143148
 Ignore-this: d5cfb9b0ec57235d7bb8d786c8c55a10
] 
[fix &aux walking
attila.lendvai at gmail.com**20091026101726
 Ignore-this: 4a8349a76aec0312e2e08a9b543c7ee6
] 
[point out that the lambda parsing in dubplicates.lisp should be dropped
attila.lendvai at gmail.com**20091026101649
 Ignore-this: 282236eaf73e96b54f7032775df105b1
] 
[follow grand-refactor in tests
attila.lendvai at gmail.com**20091022174346
 Ignore-this: dfaf13525db5aa95ed2111e2ce9eabee
] 
[grand refactor: bring in bind, def and contextl
attila.lendvai at gmail.com**20091022174248
 Ignore-this: a1e9aa9fdec19d1f223e8e85ffd0d141
] 
[TAG Before ContextL refactor
attila.lendvai at gmail.com**20091016115207
 Ignore-this: ef2b8b67be8887fa820635144915e541
] 
[Follow hu.dwim.common split
levente.meszaros at gmail.com**20091020163518
 Ignore-this: 4f52830db0877ed30bd0a1e28f306dd7
] 
[Fix docu
levente.meszaros at gmail.com**20091020163427
 Ignore-this: 5872b2a17244e5ecb3de1f44cb6fcb96
] 
[Follow hu.dwim.common-lisp renaming.
levente.meszaros at gmail.com**20091020141013
 Ignore-this: 7cedbb0bd5b69709fbafef6c4699c3
] 
[asd: record a dependency
attila.lendvai at gmail.com**20091016114010
 Ignore-this: 92034585d84064f4c975ecba4b722814
] 
[Documentation.
levente.meszaros at gmail.com**20091020123312
 Ignore-this: 152972bd74c48a5447ef20eab03fee55
] 
[Fix optional parameter handing when supplied-p-parameter is there.
levente.meszaros at gmail.com**20091013212023
 Ignore-this: 2c81a00d280986822ab44bf965c71d7c
] 
[Add failed test.
levente.meszaros at gmail.com**20091013210323
 Ignore-this: c1fece1cca52612250b6b9ef3e81a460
] 
[Record failed test for defun.
levente.meszaros at gmail.com**20091013193155
 Ignore-this: a4d09bb1c7c3f9c6bbffaa8db4e14efb
] 
[Fix asdf dependency.
levente.meszaros at gmail.com**20090928205824
 Ignore-this: 6bbdadb3a080f6199be1b1ce943c46dc
] 
[fix: bug with clashing declare/lexical variable lookup
attila.lendvai at gmail.com**20091001194500
 Ignore-this: bb8acbc5bce1d086d97e730b69f6f336
] 
[extend lookup so that the type filter can be a list of types
attila.lendvai at gmail.com**20091001192215
 Ignore-this: 7e9e0c338e76bc9d62fca69aaf4d5d9f
] 
[added failing test
attila.lendvai at gmail.com**20090930204914
 Ignore-this: 1b0300c4c8195d7caa2aa4dec8bd6ff0
] 
[record failing &aux test, thanks to Stanislaw Halik
attila.lendvai at gmail.com**20090928195337
 Ignore-this: a97f3b9816928d1ea89572aab2e63fcb
] 
[Eliminate some duplicates.
levente.meszaros at gmail.com**20090922131452
 Ignore-this: 4ca9d180faf8cb533d08257b322b50a7
] 
[Get rid of aif, awhen, aprog1 we're using anaphora.
levente.meszaros at gmail.com**20090922125016
 Ignore-this: 2e5128c64f997bbf680abd6aa4ce3d59
] 
[fix labels and flet walking and unwalking when the body is empty
attila.lendvai at gmail.com**20090914160244
 Ignore-this: 5dd4c3f95f152ce14dfc414e822893fe
] 
[fix: load-time-value's body didn't have its parent slot properly set up
attila.lendvai at gmail.com**20090914155652
 Ignore-this: fef4137677b25f6d6f042111813a7754
] 
[fix test/walk-unwalk/macrolet-over-flet (or some of those)
attila.lendvai at gmail.com**20090914154705
 Ignore-this: a6287c53282394be4a1ec42d8036acbc
 
 based on the fix by Nikolaus Demmel sent to bese-devel at 2009-aug-10.
] 
[tests
attila.lendvai at gmail.com**20090914152612
 Ignore-this: 61de8afe7a20034412f3e77ce09b49cd
] 
[lookup-in-walkenv can be called with NIL as type to look up the innermost definition with the given name
attila.lendvai at gmail.com**20090914152241
 Ignore-this: 7f1b02e6f8faa43d8dbd83c1742fd264
] 
[a walk-unwalk test
attila.lendvai at gmail.com**20090912235252
 Ignore-this: 5fab232e5954e1d27f5806ece149f39
] 
[Generalize form concept in walker to support reader+walker integration.
levente.meszaros at gmail.com**20090908102306
 Ignore-this: 1ed98665b699855d06dd6e59e79aca62
] 
[File header comment.
levente.meszaros at gmail.com**20090908102154
 Ignore-this: 4dfe9efaa2576086705e2649584b7037
] 
[In package hu.dwim.asdf
levente.meszaros at gmail.com**20090908102019
 Ignore-this: e80bc46495c78afb3b7e5a7a5f079322
] 
[Refactor for dwim.hu.
levente.meszaros at gmail.com**20090813152126
 Ignore-this: f616f3e832f660601361811a38466c66
] 
[bah, unsaved file
attila.lendvai at gmail.com**20090717181436
 Ignore-this: 1f6d0a8683f9cf2a14de61b036367249
] 
[fix something with a kludge, comment added
attila.lendvai at gmail.com**20090717175903
 Ignore-this: 79465fd00b92593aacc11d40a026e902
] 
[some print-object stuff
attila.lendvai at gmail.com**20090717174753
 Ignore-this: cd4fce7d684d8c72b3e797c3ecb16c43
] 
[fix (unwalk-form (walk-form :foo)) being walked into a constant-form
attila.lendvai at gmail.com**20090717173602
 Ignore-this: a53e9c438fbef049d43885f2995afe0a
] 
[record some failing tests
attila.lendvai at gmail.com**20090717173548
 Ignore-this: 9ab7f217a29d59bbfa11bae92955a0ba
] 
[added function-definition-form (it's a bit kludgy in that it most probably needs a generic solution)
attila.lendvai at gmail.com**20090713154654
 Ignore-this: 97d380256eee5afd3cb5bf0b3107ff72
] 
[housekeeping
attila.lendvai at gmail.com**20090625164517
 Ignore-this: 427b139cfaf9408705db39f2dd398b9b
] 
[Better printing.
levente.meszaros at gmail.com**20090717172503
 Ignore-this: ed5cbfc353fea006927c7c869315e371
] 
[Version
levente.meszaros at gmail.com**20090717172455
 Ignore-this: fd4deeaf5a222d109ce14c3265190c5f
] 
[hack in another customizable hook for cl-quasi-quote/js: walk-lambda-like (also add a comment about the code quality)
attila.lendvai at gmail.com**20090404214814
 Ignore-this: e8669923337421c84a4dc4baaf8dfefb
] 
[fix let walking (with zero bindings?)
attila.lendvai at gmail.com**20090404202542
 Ignore-this: b3e8358c65bce83e06aeff320bef1350
] 
[fix special-variable-name? for :foo wrongly returning T
attila.lendvai at gmail.com**20090404201340
 Ignore-this: 75cd2f14bd694e62020917a69d6228f1
] 
[only walk &key and &optional default values if it's actually provided
attila.lendvai at gmail.com**20090404201254
 Ignore-this: c7094811ad25588832300e12b98e851d
] 
[fix flet walking, make it less hostile to walker customizations
attila.lendvai at gmail.com**20090112004737
 Ignore-this: fecc2acf329a35230880a7e2bb56461b
] 
[renamed walk-ast to map-ast, visitor at first arg to follow the map-* conventions
attila.lendvai at gmail.com**20081230135718
 Ignore-this: 34836b4cd9a5dced11583d5808df7e5a
] 
[added failing test
attila.lendvai at gmail.com**20081214125815
 Ignore-this: 2b4f1d4f5b02caf0af401a315d892d13
] 
[TAG 2008-11-27
attila.lendvai at gmail.com**20081127150529
 Ignore-this: bfdfabc47b4b3482a6bea05102942a04
] 
Patch bundle hash:
72698296519ef25621493954ca9747f6d93eec0b


More information about the cl-walker-devel mailing list