diff --git a/make-rule-no-cml.scm b/make-rule-no-cml.scm index f21932d..622694c 100644 --- a/make-rule-no-cml.scm +++ b/make-rule-no-cml.scm @@ -39,27 +39,48 @@ (wants-build?-result rule-result-wants-build?) (build-func-result rule-result-build-func)) +;;; a named function mainly for tracing purposes +(define (apply-build-func build-required? rule prereqs prereqs-results cooked-state) + (let ((build-func (rule-build-func rule))) + (if (null? prereqs) + (build-func build-required? cooked-state) + (apply build-func + (append (list build-required?) + prereqs-results (list cooked-state)))))) + +;;; a named function mainly for tracing purposes +(define (apply-wants-build? rule prereqs prereqs-results init-state) + (let ((wants-build? (rule-wants-build? rule))) + (if (null? prereqs) + (wants-build? init-state) + (apply wants-build? (append prereqs-results (list init-state)))))) + (define (rule-make rule init-state rule-set) - (let* ((pre-results (map (lambda (prereq) - (if (assq prereq (rule-set-rules rule-set)) - (rule-make prereq init-state rule-set) - (error "prerequisite is not in rule-set!"))) - (rule-prereqs rule))) - (wants-build?-result (if (null? prereqs-results) - ((rule-wants-build? rule) init-state) - (apply (rule-wants-build? rule) - (append prereqs-results - (list init-state))))) + (let* ((prereqs (rule-prereqs rule)) + (prereqs-results (map (lambda (prereq) + (if (assq prereq (rule-set-rules rule-set)) + (rule-make prereq init-state rule-set) + (error "prerequisite is not in rule-set!"))) + prereqs)) + (wants-build?-result (apply-wants-build? rule prereqs + prereqs-results init-state)) +;;; (wants-build?-result (if (null? prereqs) +;;; ((rule-wants-build? rule) init-state) +;;; (apply (rule-wants-build? rule) +;;; (append prereqs-results +;;; (list init-state))))) (build-required? (car wants-build?-result)) (cooked-state (cdr wants-build?-result))) (if build-required? - (if (null? prereqs-results) - (make-rule-result wants-build?-result - ((rule-build-func rule) - build-required? cooked-state)) - (make-rule-result wants-build?-result - (apply (rule-build-func rule) - (append (list build-required?) - prereqs-results - (list cooked-state))))) + (let* ((build-func (rule-build-func rule)) +;;; (build-func-result (if (null? prereqs) +;;; (build-func build-required? cooked-state) +;;; (apply build-func +;;; (append (list build-required?) +;;; prereqs-results +;;; (list cooked-state))))) + (build-func-result (apply-build-func build-required? rule prereqs + prereqs-results cooked-state)) + (end-state (cdr build-func-result))) + (make-rule-result wants-build?-result build-func-result)) (make-rule-result wants-build?-result #f))))