emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master f6d7a74 074/187: Merge pull request #18 from DarwinAwardWi


From: Michael Albinus
Subject: [elpa] master f6d7a74 074/187: Merge pull request #18 from DarwinAwardWinner/lexbind-fix
Date: Wed, 30 Dec 2015 11:49:46 +0000

branch: master
commit f6d7a74b98bd6fd297de228fa980c8bcd72e430b
Merge: 242ae73 93b05a9
Author: John Wiegley <address@hidden>
Commit: John Wiegley <address@hidden>

    Merge pull request #18 from DarwinAwardWinner/lexbind-fix
    
    Lexbind fix
---
 async-test.el |   21 +++++++++++++++++++++
 async.el      |   18 ++++++++++++++++--
 2 files changed, 37 insertions(+), 2 deletions(-)

diff --git a/async-test.el b/async-test.el
index 379cdf9..a5e83e9 100644
--- a/async-test.el
+++ b/async-test.el
@@ -29,6 +29,7 @@
 
 ;;; Code:
 
+(add-to-list 'load-path (file-name-directory (or load-file-name 
(buffer-file-name))))
 (require 'async)
 (require 'async-file)
 
@@ -130,6 +131,26 @@
    (lambda (result)
      (message "Async process done: %s" result))))
 
+(defun async-test-7 ()
+  (interactive)
+  (message "Starting async-test-7...")
+  (eval
+   '(progn
+      (print
+       (mapcar #'async-get
+               (cl-loop repeat 2 collect
+                        (async-start (lambda () t)))))
+      (print
+       (mapcar #'async-get
+               (cl-loop repeat 2 collect
+                        (async-start '(lambda () t)))))
+      (print
+       (mapcar #'async-get
+               (cl-loop repeat 2 collect
+                        (async-start `(lambda () ,(* 150 2)))))))
+   t)
+  (message "Finished async-test-7 successfully."))
+
 (defsubst async-file-contents (file)
   "Return the contents of FILE, as a string."
   (with-temp-buffer
diff --git a/async.el b/async.el
index 4c79816..c4485d6 100644
--- a/async.el
+++ b/async.el
@@ -260,8 +260,22 @@ passed to FINISH-FUNC).  Call `async-get' on such a future 
always
 returns nil.  It can still be useful, however, as an argument to
 `async-ready' or `async-wait'."
   (require 'find-func)
-  (let ((procvar (make-symbol "proc")))
-    `(let* ((sexp ,start-func)
+  (let* ((procvar (make-symbol "proc"))
+         ;; Evaluate START-FUNC if it isn't aready a function.
+         (start-func
+          (if (functionp start-func)
+              start-func
+            (eval start-func)))
+         (start-func
+          (if (eq (car start-func) 'lambda)
+              (eval start-func t)
+            start-func)))
+    ;; If START-FUNC is a lambda, prevent it from creating a lexical
+    ;; closure by evaluating it in an empty lexical environment.
+    (when (eq (car start-func) 'lambda)
+      (setq start-func
+            (eval start-func t)))
+    `(let* ((sexp #',start-func)
             (,procvar
              (async-start-process
               "emacs" (file-truename



reply via email to

[Prev in Thread] Current Thread [Next in Thread]