From attila.lendvai at gmail.com Sun Nov 1 10:23:30 2009 From: attila.lendvai at gmail.com (Attila Lendvai) Date: Sun, 1 Nov 2009 11:23:30 +0100 Subject: [cl-walker-devel] CL-Walker changes In-Reply-To: <200910312231.18146.angavrilov@gmail.com> References: <200910312231.18146.angavrilov@gmail.com> Message-ID: hi! > I'm planning to use cl-walker for a project, and > made a few changes. They can be found over here: good to hear, and good luck with it! please note though, that we are at the final phase of normalizing and refactoring all our projects including cl-walker, whose new codebase is at dwim.hu http://dwim.hu/darcsweb/darcsweb.cgi 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. -- attila From attila.lendvai at gmail.com Sun Nov 1 10:54:34 2009 From: attila.lendvai at gmail.com (Attila Lendvai) Date: Sun, 1 Nov 2009 11:54:34 +0100 Subject: [cl-walker-devel] CL-Walker changes In-Reply-To: <200911011339.53695.angavrilov@gmail.com> References: <200910312231.18146.angavrilov@gmail.com> <200911011339.53695.angavrilov@gmail.com> Message-ID: >> 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? > > Hm, that one has a LOT of dependencies, and, for instance, > ContextL does not even build on ECL... well, yes. but the problem is not with code reuse (dependencies) but with broken/non-existent lib infrastructure in cl. we would be happy if you used/extended hu.dwim.walker, but the decision is of course yours. but you must know that we will not support cl-walker anymore, and we'll set up a simple webpage that notes the situation and points to dwim.hu. we are willing to make steps to help your with the issues, but the depnednecies won't go lower in hu.dwim.walker (with one exception: contextl *could* be hidden behind a macro and make it possible to load the walker with and without contextl support into two separate packages, but this is too much effort for us for very little gain (for us)). you can catch me on irc, on #lisp if you want to discuss it in a more interactive manner. -- attila From angavrilov at gmail.com Sun Nov 1 18:07:32 2009 From: angavrilov at gmail.com (Alexander Gavrilov) Date: Sun, 1 Nov 2009 21:07:32 +0300 Subject: [cl-walker-devel] CL-Walker changes In-Reply-To: References: <200910312231.18146.angavrilov@gmail.com> <200911011339.53695.angavrilov@gmail.com> Message-ID: <200911012107.32404.angavrilov@gmail.com> > we are willing to make steps to help your with the issues, but the > depnednecies won't go lower in hu.dwim.walker (with one exception: > contextl *could* be hidden behind a macro and make it possible to load > the walker with and without contextl support into two separate > packages, but this is too much effort for us for very little gain (for > us)). I think I'll first try to fix ContextL or ECL to make them work together. The author of ECL said that it might be not very hard. Alexander From angavrilov at gmail.com Wed Nov 4 14:42:53 2009 From: angavrilov at gmail.com (Alexander Gavrilov) Date: Wed, 4 Nov 2009 17:42:53 +0300 Subject: [cl-walker-devel] CL-Walker changes In-Reply-To: References: <200910312231.18146.angavrilov@gmail.com> Message-ID: <200911041742.53729.angavrilov@gmail.com> > 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 * 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 **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 * 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 **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 * 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 **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 * 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 **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 " + "Tam?s Borb?ly " + "Levente M?sz?ros ") + :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 ") :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 * 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 **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 * Reduce dependencies by using a simpler version of util. Wed Nov 4 16:51:27 MSK 2009 Alexander Gavrilov * 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 * 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 * 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 **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 **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 **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 **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 From attila.lendvai at gmail.com Thu Nov 5 01:49:34 2009 From: attila.lendvai at gmail.com (Attila Lendvai) Date: Thu, 5 Nov 2009 02:49:34 +0100 Subject: [cl-walker-devel] CL-Walker changes In-Reply-To: <200911041742.53729.angavrilov@gmail.com> References: <200910312231.18146.angavrilov@gmail.com> <200911041742.53729.angavrilov@gmail.com> Message-ID: >> 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... thanks! all pushed to the repos with some further fixes. -- attila From attila.lendvai at gmail.com Sun Nov 8 21:43:51 2009 From: attila.lendvai at gmail.com (Attila Lendvai) Date: Sun, 8 Nov 2009 22:43:51 +0100 Subject: [cl-walker-devel] CL-Walker changes In-Reply-To: <200911081453.48039.angavrilov@gmail.com> References: <200910312231.18146.angavrilov@gmail.com> <200911041742.53729.angavrilov@gmail.com> <200911081453.48039.angavrilov@gmail.com> Message-ID: > Next bunch. Note that some of the changes are not > backward-compatible. that's not an issue with us as long as the changes improve the codebase. > I now plan to make the environment interface > extract information about type declarations from > the compiler context. ok, looking forward to the changes! i've pushed all of your changes, although i've recorded a few of mine afterwards. they are mostly about expanding abbreviated names. (we basically don't abbreviate anything anywhere in our codebase) if the long names are annoying then i suggest using the fuzzy completion in slime, it works like a charm! happy hacking, -- attila From attila.lendvai at gmail.com Sat Nov 14 18:01:27 2009 From: attila.lendvai at gmail.com (Attila Lendvai) Date: Sat, 14 Nov 2009 19:01:27 +0100 Subject: [cl-walker-devel] CL-Walker changes In-Reply-To: <200911141858.21222.angavrilov@gmail.com> References: <200910312231.18146.angavrilov@gmail.com> <200911081453.48039.angavrilov@gmail.com> <200911141858.21222.angavrilov@gmail.com> Message-ID: > While investigating the environment interaction code, > I made a number of fixes for shadowing and specials. thanks! pushed them to the official repo. please also pull it to avoid conflicts, there are some small changes. and there's something i didn't do without asking your opinion: now that you pointed out that it's not really variables and symbol macros, but a variable namespace (and similarly not functions and macros but function namespace)... i think in the light of these the API should be changed a little. certain functions doesn't make much sense anymore, some of the suspicious points follow: some renames: iterate-variables-in-lexenv -> iterate-variable-namespace-in-lexenv iterate-functions-in-lexenv -> iterate-function-namespace-in-lexenv ;; TODO delme? this may be obsolete, because its interface ;; is too naiive about scanning the complex function and/or ;; variable namespace... or merge :function and :macro? similarly ;; merge :variable and :symbol-macro? - lookup-in-lexenv the utility of these is questionable: - do/find/collect-symbol-macros-in-lexenv - do/find/collect-macros-in-lexenv - ... because it's about the namespace, and callers should be prepared to encounter all possible elements of the namespace. maybe they should be replaced by: - do/find/collect-function-namespace-elements-in-lexenv - do/find/collect-variable-namespace-elements-in-lexenv i'm not planning to do any of these changes, and in fact i'm not planning to make big changes to walker in the following days/weeks. so feel free to make changes! and a note: please record the changes to the tests/ directory as standalone darcs patches, because if someone is looking for regression or just wants to stay away from API changes, then they can still benefit from the extended test suite. patches in darcs have no order as long as they don't depend on each other (dependency is based on the line diffs), or if the dependency is explicitly given when they were recorded. similarly it's a good idea to record changes to high-traffic files into separate patches. typical example is missing dependency in the .asd, or shaping package.lisp. thanks again for the changes, -- attila