diff --git a/semen.scm b/semen.scm index 422999f..21fc965 100644 --- a/semen.scm +++ b/semen.scm @@ -144,12 +144,15 @@ (define (comment-form? f) (and (pair? f) (eq? (car f) 'comment))) +(define (fn-header-length fn-form) + (if (memq (first fn-form) '(pub extern)) 5 4)) + (define (strip-fn-header-comments fn-form) ;; Remove comment forms from the function header ;; ([pub|extern] fn name arglist rettype) so the positional accessors ;; below are not shifted. Comments in the body are left in place as ;; ordinary statements and preserved into the generated C. - (let ((header-count (if (memq (car fn-form) '(pub extern)) 5 4))) + (let ((header-count (fn-header-length fn-form))) ;; This always rebuilds the list, so the location has to be carried ;; over explicitly -- otherwise every function loses it (copy-form-source! @@ -265,13 +268,9 @@ Returns #f if the form is not a function, returns the form otherwise" "Returns all except body" (assert (sex-fn? fn-form) (fmt #f "Form " fn-form " is not a function")) - (if (sex-fn-public? fn-form) - (take fn-form 5) - (take fn-form 4))) + (take fn-form (fn-header-length fn-form))) (define (sex-fn-body fn-form) (assert (sex-fn? fn-form) (fmt #f "Form " fn-form " is not a function")) - (if (sex-fn-public? fn-form) - (drop fn-form 5) - (drop fn-form 4))) + (drop fn-form (fn-header-length fn-form)))