From 58e351efbf1c6af30bcdc176ac7befc9b324d8ec Mon Sep 17 00:00:00 2001 From: Bastien Guerry Date: Thu, 17 Mar 2011 09:52:01 +0100 Subject: [PATCH] * org-taskjuggler.el (org-taskjuggler-compute-task-leafiness): (org-taskjuggler-assign-resource-ids): Replace recursive implementation with an iterative one. That way we can avoid to have ask users to increase `max-lisp-eval-depth'. --- lisp/org-taskjuggler.el | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/lisp/org-taskjuggler.el b/lisp/org-taskjuggler.el index d897a8f2a..bc19b0a2e 100644 --- a/lisp/org-taskjuggler.el +++ b/lisp/org-taskjuggler.el @@ -399,20 +399,23 @@ a path to the current task." "Figure out if each task is a leaf by looking at it's level, and the level of its successor. If the successor is higher (ie deeper), then it's not a leaf." - (cond - ((null tasks) nil) - ;; if a task has no successors it is a leaf - ((null (car (cdr tasks))) - (cons (cons (cons "leaf-node" t) (car tasks)) - (org-taskjuggler-compute-task-leafiness (cdr tasks)))) - ;; if the successor has a lower level than task it is a leaf - ((<= (cdr (assoc "level" (car (cdr tasks)))) (cdr (assoc "level" (car tasks)))) - (cons (cons (cons "leaf-node" t) (car tasks)) - (org-taskjuggler-compute-task-leafiness (cdr tasks)))) - ;; otherwise examine the rest of the tasks - (t (cons (car tasks) (org-taskjuggler-compute-task-leafiness (cdr tasks)))))) - -(defun org-taskjuggler-assign-resource-ids (resources &optional unique-ids) + (let (new-list) + (while (car tasks) + (let ((task (car tasks)) + (successor (car (cdr tasks)))) + (cond + ;; if a task has no successors it is a leaf + ((null successor) + (push (cons (cons "leaf-node" t) task) new-list)) + ;; if the successor has a lower level than task it is a leaf + ((<= (cdr (assoc "level" successor)) (cdr (assoc "level" task))) + (push (cons (cons "leaf-node" t) task) new-list)) + ;; otherwise examine the rest of the tasks + (t (push task new-list)))) + (setq tasks (cdr tasks))) + (nreverse new-list))) + +(defun org-taskjuggler-assign-resource-ids (resources) "Given a list of resources return the same list, assigning a unique id to each resource." (cond -- 2.11.4.GIT