Module: dfmc-back-end Author: Jonathan Bachrach, Keith Playford 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 define variable *retract-dfm?* = #t; define compiler-open generic emit-all (back-end :: , record, #rest flags, #key, #all-keys); // TODO: I guess emit-code should be exported too, but each back-end // currently just defines a local emit-code generic. // define compiler-open generic emit-code // (back-end :: , object) => (); define compiler-open generic emit-object // structure (back-end :: , stream, object); define compiler-open generic emit-reference // reference (back-end :: , stream, object); define compiler-open generic emit-indirect-reference // reference (back-end :: , stream, object); define compiler-open generic emit-name-internal // binding name (back-end :: , stream, object); define compiler-open generic string-emitter // binding name (back-end :: , stream, object); define compiler-open generic back-end-word-size (back-end :: ) => (number-bytes :: ); define compiler-open generic back-end-record-repeated-object-sizes? (back-end :: ) => (well? :: ); define compiler-open generic back-end-lambda-size (back-end :: , lambda :: <&lambda>) => (number-bytes :: ); define method back-end-record-repeated-object-sizes? (back-end :: ) => (well? :: ) #f end method; define method back-end-lambda-size (back-end :: , lambda :: <&lambda>) => (number-bytes :: ) 0 end method; define compiler-open generic initialize-back-end (back-end :: ) => (); define method initialize-back-end (back-end :: ) => () #f end method; define macro with-back-end-initialization { with-back-end-initialization (?back-end:expression) ?:body end } => { let back-end = ?back-end; // initialize back-end variables on entry initialize-back-end(back-end); ?body; // free back-end variables on exit initialize-back-end(back-end); } end macro; define inline sideways method word-size () => (number-bytes :: ) back-end-word-size(current-back-end()) end method; define compiler-open generic print-method (stream :: , o :: <&lambda>, #key css); define compiler-open generic print-method-out (o :: <&lambda>, #key css); define compiler-open generic print-referenced-object (o :: , stream :: ) => (); define thread variable *current-environment* = #f; // eof