Module: environment-protocols Synopsis: Environment protocols Author: Andy Armstrong Copyright: Original Code is Copyright (c) 1995-2004 Functional Objects, Inc. All rights reserved. License: Functional Objects Library Public License Version 1.0 Dual-license: GNU Lesser General Public License Warranty: Distributed WITHOUT WARRANTY OF ANY KIND /// Class objects define class () end class ; define open generic application-object-class (server :: , object :: ) => (class :: false-or()); define open generic do-direct-subclasses (function :: , server :: , class :: , #key client) => (); define open generic do-direct-superclasses (function :: , server :: , class :: , #key client) => (); define open generic do-direct-methods (function :: , server :: , class :: , #key client) => (); define open generic do-all-methods (function :: , server :: , class :: , #key client) => (); define open generic do-direct-slots (function :: , server :: , class :: , #key client) => (); define open generic do-all-slots (function :: , server :: , class :: , #key client) => (); define open generic do-all-superclasses (function :: , server :: , class :: , #key client) => (); define open generic do-init-keywords (function :: , server :: , class :: , #key client, inherited? :: ) => (); /// Project dispatching methods define method application-object-class (project :: , object :: ) => (class :: false-or()) let server = choose-server(project, object, default-server: #"application"); server & application-object-class(server, object) end method application-object-class; define method do-direct-subclasses (function :: , project :: , class :: , #key client) => () let server = choose-server(project, class); server & do-direct-subclasses(function, server, class, client: client) end method do-direct-subclasses; define method do-direct-superclasses (function :: , project :: , class :: , #key client) => () let server = choose-server(project, class); server & do-direct-superclasses(function, server, class, client: client) end method do-direct-superclasses; define method do-direct-methods (function :: , project :: , class :: , #key client) => () let server = choose-server(project, class); server & do-direct-methods(function, server, class, client: client) end method do-direct-methods; define method do-all-methods (function :: , project :: , class :: , #key client) => () let server = choose-server(project, class); server & do-all-methods(function, server, class, client: client) end method do-all-methods; define method do-direct-slots (function :: , project :: , class :: , #key client) => () let server = choose-server(project, class); server & do-direct-slots(function, server, class, client: client) end method do-direct-slots; define method do-all-superclasses (function :: , project :: , class :: , #key client) => () let server = choose-server(project, class); server & do-all-superclasses(function, server, class, client: client) end method do-all-superclasses; define method do-all-slots (function :: , project :: , class :: , #key client) => () let server = choose-server(project, class); server & do-all-slots(function, server, class, client: client) end method do-all-slots; define method do-init-keywords (function :: , project :: , class :: , #key client, inherited? :: = #t) => () let server = choose-server(project, class); server & do-init-keywords(function, server, class, client: client, inherited?: inherited?) end method do-init-keywords; /// Some convenience functions built on these protocols define function class-direct-subclasses (server :: , class :: ) => (classes :: ) collect-environment-objects(do-direct-subclasses, server, class) end function class-direct-subclasses; define function class-direct-superclasses (server :: , class :: ) => (classes :: ) collect-environment-objects(do-direct-superclasses, server, class) end function class-direct-superclasses; define function class-direct-methods (server :: , class :: ) => (methods :: ) collect-environment-objects(do-direct-methods, server, class) end function class-direct-methods; define function class-direct-slots (server :: , class :: ) => (slots :: ) collect-environment-objects(do-direct-slots, server, class) end function class-direct-slots; define function class-slots (server :: , class :: ) => (slots :: ) collect-environment-objects(do-all-slots, server, class) end function class-slots; /// Object printing define method environment-object-type (server :: , object :: ) => (type :: false-or()) application-object-class(server, object) end method environment-object-type; define method environment-object-type-name (object :: ) => (label :: ) "Class" end method environment-object-type-name;