codegen-pop-block generic
codegen-pop-function generic
codegen-push generic
+ cond-inst class
continue-inst class
convert-stmts function
definst macro
emit-insts generic
ensure-var generic
expr-inst class
+ for-inst class
format-banner-comment function
format-compound-statement macro
format-temporary-name generic
inst-name generic
inst-op generic
inst-type generic
+ inst-update generic
inst-var generic
make-banner-inst function
make-block-inst function
make-break-inst function
make-call-inst function
+ make-cond-inst function
make-continue-inst function
make-do-while-inst function
make-expr-inst function
+ make-for-inst function
make-function-inst function
make-if-inst function
make-return-inst function
block-inst
break-inst
call-inst
+ cond-inst
continue-inst
convert-to-ilayout-inst
do-while-inst
expr-inst
+ for-inst
function-inst
if-inst
return-inst
ilayout-ichains
ilayout
inst-alt
+ cond-inst
if-inst
inst-args
banner-inst
inst-body
block-inst
do-while-inst
+ for-inst
function-inst
while-inst
inst-chain-head
inst-class
convert-to-ilayout-inst
inst-cond
+ cond-inst
do-while-inst
+ for-inst
if-inst
while-inst
inst-conseq
+ cond-inst
if-inst
inst-control
banner-inst
inst-func
call-inst
inst-init
+ for-inst
var-inst
inst-metric
cl:list
block-inst
break-inst
call-inst
+ cond-inst
continue-inst
convert-to-ilayout-inst
do-while-inst
expr-inst
+ for-inst
function-inst
if-inst
return-inst
inst-type
function-inst
var-inst
+inst-update
+ for-inst
inst-var
set-inst
update-inst
call-inst t
chain-offset t
class-pointer t
+ cond-inst t
continue-inst t
convert-to-ilayout-inst t
do-while-inst t
effective-method t
effective-slot t
expr-inst t
+ for-inst t
function-inst t
ichain t
if-inst t
@|set| & @<var> @<expr> & @<var> = @<expr>; \\ \hlx{v}
@|update| & @<var> @<op> @<expr> & @<var> @<op>= @<expr>;
\\ \hlx{v}
+ @|cond| & @<cond> @<conseq> @<alt> & @<cond> ? @<conseq> : @<alt>
+ \\ \hlx{v}
@|return| & @<expr> & return @[@<expr>@];
\\ \hlx{v}
@|break| & --- & break; \\ \hlx{v}
@|if| & @<cond> @<conseq> @|\&optional| @<alt>
& if (@<cond>) @<conseq>
@[else @<alt>@] \\ \hlx{v}
+ @|for| & @<init> @<cond> @<update> @<body> &
+ for (@<init>; @<cond>; @<update>) @<body> \\ \hlx{v}
@|while| & @<cond> @<body> & while (@<cond>) @<body>
\\ \hlx{v}
@|do-while| & @<body> @<cond> & do @<body> while (@<cond>);
;; Special kinds of expressions.
(definst call (stream :export t) (#1=#:func &rest args)
(format stream "~A(~@<~{~A~^, ~_~}~:>)" #1# args))
+(definst cond (stream :export t) (#1=#:cond conseq alt)
+ (format stream "~@<~A ~2I~@_~@<? ~A ~_: ~A~:>~:>" #1# conseq alt))
;; Simple statements.
(definst return (stream :export t) (#1=#:expr)
(write-string "do" stream))
(format stream "while (~A);" #1#))
+(definst for (stream :export t) (init #1=#:cond update body)
+ (format-compound-statement (stream body)
+ (format stream "for (~@<~@[~A~];~@[ ~_~A~];~@[ ~_~A~]~:>)"
+ init #1# update)))
+
;;;--------------------------------------------------------------------------
;;; Code generation.