Next: Run-Time Compiler Back-End, Previous: Parser, Up: Compiler [Contents][Index]
The code generation back-end is provided by the (rpc compiler)
module. Given an XDR/RPC description, it returns a list of
S-expressions, each of which is a top-level Scheme expression
implementing an element of the input description. These expressions are
meant to be dumped to a Scheme file; this is what the command-line
interface of the compiler does (see grpc-compile
).
Here is an example XDR/RPC description and the resulting client code, as
obtained, e.g., with grpc-compile --xdr --constants --client
:
const max = 010; struct foo { int x; float y<max>; }; => (define max 8) (define foo (make-xdr-struct-type (list xdr-integer (make-xdr-vector-type xdr-float max))))
As can be seen here, the generated code uses the run-time support routines described earlier (see Implementation of XDR); an optimization would consist in generating specialized code that does not depend on the run-time support, but it is not implemented yet.
This front-end consists of two procedures:
These procedures return a list of top-level Scheme expressions implementing input for an RPC client or, respectively, a server.
input can be either an input port, a string, or an AST as returned
by rpc-language->sexp
(see Parser). If type-defs? is
#t
, then type definition code is produced; if
constant-defs? is #t
, then constant definition code is
produced.
Both procedures can raise error conditions having a sub-type of
&compiler-error
.