From: Tomohiro M. <to...@cx...> - 2012-09-05 04:40:37
|
> OK, so, in the interests of getting my hand back in, here's the absolute > minimum patch I could make to allow experimentation to begin. There is > almost certainly stuff that is actively broken in this, where there are > hard-coded assumptions about the slots of the package structure (you'll > see in the diff that I found one or two of those) but I got a very silly > package class to work: > > (defstruct (fooble-package (:include package))) > (defmethod sb-package:package-name ((x fooble-package)) "FOO") > (defmethod sb-package:find-symbol (x (y fooble-package)) > (values nil :external)) > > and then > > (find-symbol "WHATEVER" (make-fooble-package)) => NIL, :EXTERNAL. > > Hopefully that's enough to get you started. Probably the next thing to > hook in is something in DEFPACKAGE / MAKE-PACKAGE which can create named > packages of different classes. Thank you! I was struggled to make PACKAGE a standard-class metaobject. Now I find out that why I failed. Your approach seems to be not perfect but I think it is a great point to get things started. I made a branch for this project so that other people can experiment the feature. https://github.com/m2ym/sbcl/tree/user-extensible-packages I will continue to work on the branch to make some other functions be able work with your patch. By the way, I'd like to know how difficult it is to change structure classes to standard classes. The following code should work, in the future: (defclass hierarchical-package (standard-package) ()) (defclass locally-renamed-package (standard-package) ()) (defclass my-fancy-package (hierarchical-package locally-renamed-package) ()) Regards, Tomohiro |