Module: dfmc-modeling 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 //// The boot framework. define abstract class <&expander> () constant slot expander-definition, required-init-keyword: definition:; constant slot expander-macro-object, required-init-keyword: macro-object:; end class; define class <¯o> (<&expander>) end class; define compiler-sideways method compute-form-model-object (definition :: <¯o-definition>, variable :: ) => (model :: <¯o>) make(<¯o>, definition: definition, macro-object: form-macro-object(definition)) end method; define class <&converter> (<&expander>) end class; define compiler-sideways method compute-form-model-object (definition :: <&converter-definition>, variable :: ) => (model :: <&converter>) make(<&converter>, definition: definition, macro-object: form-macro-object(definition)); end method; define class <&definer> (<&expander>) end; define compiler-sideways method compute-form-model-object (definition :: <&definition-definition>, variable :: ) => (model :: <&definer>) make(<&definer>, definition: definition, macro-object: form-macro-object(definition)) end method; /// PROXIES FOR MODELS define class () constant slot dood-proxy-binding :: , required-init-keyword: binding:; end class; define sealed domain make (subclass()); define sealed domain initialize (); define class () end class; define method model-definition (x :: <&expander>) => (res) expander-definition(x) end method; define method dood-make-binding-value-proxy (dood :: , object) => (proxy) make(, binding: model-variable-binding(object)) end method; define method dood-restore-proxy (dood :: , proxy :: ) => (object) with-dood-context (dood-root(dood)) untracked-binding-model-object-if-computed(dood-proxy-binding(proxy)) end with-dood-context; end method; // define method dood-disk-object // (dood :: , object :: <&expander>) // => (proxy :: type-union(, <&expander>)) // dood-as-proxy(dood, object, dood-make-binding-value-proxy) // end method; define class () end class; define method dood-make-expander-proxy (dood :: , object) => (proxy) make(, binding: model-variable-binding(object)) end method; define method dood-restore-proxy (dood :: , proxy :: ) => (object) with-dood-context (dood-root(dood)) let binding = dood-proxy-binding(proxy); let form = untracked-binding-definition(binding); with-dependent ($top-level-processing of form) compute-and-install-form-model-objects(form); untracked-binding-model-object-if-computed(binding); end with-dependent; end with-dood-context; end method; define method dood-disk-object (dood :: , object :: <&expander>) => (proxy :: type-union(, <&expander>)) dood-as-proxy(dood, object, dood-make-expander-proxy) end method; /* /// BINDING DEFINITIONS define class () end class; define method dood-make-binding-definition-proxy (dood :: , object) => (proxy) make(, binding: form-variable-binding(object)) end method; define method dood-restore-proxy (dood :: , proxy :: ) => (object) untracked-binding-definition(dood-proxy-binding(proxy)) end method; define method dood-disk-object (dood :: , object :: ) => (proxy :: type-union(, )) dood-as-proxy(dood, object, dood-make-binding-definition-proxy) end method; define method dood-disk-object (dood :: , object :: ) => (proxy :: type-union(, )) dood-as-proxy(dood, object, dood-make-binding-definition-proxy) end method; */ // eof