src/method-aggregate.lisp: Expose number of methods to custom combination.
authorMark Wooding <mdw@distorted.org.uk>
Sun, 30 Aug 2015 09:58:38 +0000 (10:58 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Fri, 4 Sep 2015 10:23:18 +0000 (11:23 +0100)
This permits pre-allocating an array for collecting results, for
example.  Suggested by Tony Finch.

src/method-aggregate.lisp

index 9d0a6dd..e374924 100644 (file)
     :before :fragment
     :first :fragment
     :each :fragment
-    :after :fragment))
+    :after :fragment
+    :count :id))
 
 (defmethod compute-aggregating-message-kernel
     ((message aggregating-message) (combination (eql :custom))
      codegen target methods arg-names
      &key (retvar "sod_ret") (valvar "sod_val")
-         decls before each (first each) after)
+         decls before each (first each) after count)
   (let* ((type (c-type-subtype (sod-message-type message)))
         (not-void-p (not (eq type c-type-void))))
     (when not-void-p
       (ensure-var codegen retvar type)
       (ensure-var codegen valvar type))
+    (when count
+      (ensure-var codegen count c-type-int (length methods)))
     (when decls
       (emit-decl codegen decls))
     (labels ((maybe-emit (fragment)