This will turn out to be more useful soon.
continue-inst class
convert-stmts function
definst macro
continue-inst class
convert-stmts function
definst macro
deliver-expr function
emit-decl generic
emit-decls generic
deliver-expr function
emit-decl generic
emit-decls generic
\begin{describe}{fun}{deliver-expr @<codegen> @<target> @<expr>}
\end{describe}
\begin{describe}{fun}{deliver-expr @<codegen> @<target> @<expr>}
\end{describe}
+\begin{describe}{fun}
+ {deliver-call @<codegen> @<target> @<func> \&rest @<args>}
+\end{describe}
+
\begin{describe}{fun}{convert-stmts @<codegen> @<target> @<type> @<func>}
\end{describe}
\begin{describe}{fun}{convert-stmts @<codegen> @<target> @<type> @<func>}
\end{describe}
(emit-inst codegen (make-return-inst nil)))
(t (funcall func target))))
(emit-inst codegen (make-return-inst nil)))
(t (funcall func target))))
+(export 'deliver-call)
+(defun deliver-call (codegen target func &rest args)
+ "Emit a statement to call FUNC with ARGS and deliver the result to TARGET."
+ (deliver-expr codegen target (make-call-inst func args)))
+
;;;----- That's all, folks --------------------------------------------------
;;;----- That's all, folks --------------------------------------------------
do (ensure-var codegen name c-type-int init))
(ensure-var codegen "g" c-type-int
(make-call-inst "gcd" (list "u" "v" "&a")))
do (ensure-var codegen name c-type-int init))
(ensure-var codegen "g" c-type-int
(make-call-inst "gcd" (list "u" "v" "&a")))
- (emit-inst codegen (make-expr-inst
- (make-call-inst "printf"
- (list "\"%d*%d == %d (mod %d)\\n\""
- "a" "u" "g" "v"))))
+ (deliver-call codegen :void "printf"
+ "\"%d*%d == %d (mod %d)\\n\"" "a" "u" "g" "v")
(deliver-expr codegen :return 0)
(codegen-pop-function codegen "main"
(c-type (fun int
(deliver-expr codegen :return 0)
(codegen-pop-function codegen "main"
(c-type (fun int
(emit-inst codegen
(make-va-copy-inst *sod-tmp-ap*
*sod-ap*))
(emit-inst codegen
(make-va-copy-inst *sod-tmp-ap*
*sod-ap*))
- (deliver-expr codegen var
- (make-call-inst function arguments))
+ (apply #'deliver-call codegen var
+ function arguments)
(emit-inst codegen
(make-va-end-inst *sod-tmp-ap*))))
(emit-inst codegen
(make-va-end-inst *sod-tmp-ap*))))
- (deliver-expr codegen target (make-call-inst function arguments)))))
+ (apply #'deliver-call codegen target function arguments))))
(export 'ensure-ilayout-var)
(defun ensure-ilayout-var (codegen super)
(export 'ensure-ilayout-var)
(defun ensure-ilayout-var (codegen super)