chiark / gitweb /
src/: Introduce `deliver-call' to abbreviate function calls.
authorMark Wooding <mdw@distorted.org.uk>
Thu, 7 Jan 2016 19:33:52 +0000 (19:33 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Sun, 29 May 2016 13:40:40 +0000 (14:40 +0100)
This will turn out to be more useful soon.

doc/SYMBOLS
doc/clang.tex
src/codegen-proto.lisp
src/codegen-test.lisp
src/method-proto.lisp

index 2c33ad0ae2a6a7f41c7be3bd4b9e3299f8ab784a..4d7b384f2d519554c1c61398fd0bcf1268dc7b7b 100644 (file)
@@ -364,6 +364,7 @@ codegen-proto.lisp
   continue-inst                                 class
   convert-stmts                                 function
   definst                                       macro
+  deliver-call                                  function
   deliver-expr                                  function
   emit-decl                                     generic
   emit-decls                                    generic
index e8bb1b549aa3c07f5d1a76cfc99cf08544b6351b..3b692d81cc5ef4d21e4820b12d0f95eeca84a4f1 100644 (file)
@@ -982,6 +982,10 @@ Temporary names are represented by objects which implement a simple protocol.
 \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}
 
index e7486fac9ba4c01cbfa9678ad5f6b217d35f0ffc..5364f72b4ef33ce55bc7d6ac3784bb4a9b294f08 100644 (file)
@@ -406,4 +406,9 @@ (defun convert-stmts (codegen target type func)
                  (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 --------------------------------------------------
index 81fa3e0f494ef0878b37092fc9b2145dc433f8bb..da3763b94a229f8d721577726d6ac1bc53b17e4a 100644 (file)
@@ -65,10 +65,8 @@ (defun make-gcd (codegen)
        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
index 12cefc85ba500e44c21db8b8dbd617f3906b6fcc..c8b47ad90d67d674b56f04217c4fc29de3ac5d19 100644 (file)
@@ -296,11 +296,11 @@ (defun invoke-method (codegen target arguments-tail direct-method)
                         (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*))))
-       (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)