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 ////// Slot objects define class () end class ; define open generic slot-class (server :: , slot :: ) => (class :: ); define open generic slot-getter (server :: , slot :: ) => (getter :: false-or()); define open generic slot-setter (server :: , slot :: ) => (setter :: false-or()); define open generic slot-type (server :: , slot :: ) => (type :: ); /*---*** Not used yet, do we need it? define open generic slot-init-value (server :: , slot :: ) => (value :: false-or()); */ define open generic user-object-slot-value (server :: , obj :: , slot :: type-union(, ), #key repeated-element) => (value :: false-or()); /*---*** cpage: Remove this function? //---*** What should this return? define open generic slot-init-function (server :: , slot :: ) => (function :: false-or()); */ define open generic slot-init-kind (server :: , slot :: ) => (kind :: false-or()); define open generic slot-init-keyword (server :: , slot :: ) => (keyword :: false-or(), required? :: ); define open generic slot-allocation (server :: , slot :: ) => (keywords :: ); /// Project dispatching methods define method slot-class (project :: , slot :: ) => (class :: ) let server = choose-server(project, slot, error?: #t); slot-class(server, slot) end method slot-class; define method slot-getter (project :: , slot :: ) => (getter :: false-or()) let server = choose-server(project, slot, error?: #t); slot-getter(server, slot) end method slot-getter; define method slot-setter (project :: , slot :: ) => (setter :: false-or()) let server = choose-server(project, slot, error?: #t); slot-setter(server, slot) end method slot-setter; define method slot-type (project :: , slot :: ) => (type :: ) let server = choose-server(project, slot, error?: #t); slot-type(server, slot) end method slot-type; /*---*** cpage: Cannot currently be implemented; remove this function? define method slot-init-value (project :: , slot :: ) => (value :: ) let server = choose-server(project, slot, error?: #t); slot-init-value(server, slot) end method slot-init-value; */ /*---*** cpage: Cannot currently be implemented; remove this function? define method slot-init-function (project :: , slot :: ) => (function) let server = choose-server(project, slot, error?: #t); slot-init-function(server, slot) end method slot-init-function; */ define method slot-init-kind (project :: , slot :: ) => (kind :: false-or()) let server = choose-server(project, slot, error?: #t); slot-init-kind(server, slot) end method slot-init-kind; define method slot-init-keyword (project :: , slot :: ) => (keyword ::false-or(), required? :: ) let server = choose-server(project, slot, error?: #t); slot-init-keyword(server, slot) end method slot-init-keyword; define method slot-allocation (project :: , slot :: ) => (keywords :: ) let server = choose-server(project, slot, error?: #t); slot-allocation(server, slot) end method slot-allocation; /// Implementation define method environment-object-type (server :: , object :: ) => (type :: false-or()) slot-type(server, object) end method environment-object-type; define method environment-object-type-name (object :: ) => (label :: ) "Slot" end method environment-object-type-name; define method user-object-slot-value (server :: , object :: , slot :: , #key repeated-element = 0) => (value :: false-or()) let application = project-application(server); application & user-object-slot-value(application, object, slot, repeated-element: repeated-element) end method user-object-slot-value; define method user-object-slot-value (server :: , object :: , slot :: , #key repeated-element = 0) => (value :: false-or()) let application = project-application(server); application & user-object-slot-value(application, object, slot, repeated-element: repeated-element) end method user-object-slot-value;