semen: add and use fn core prototype getter
This commit is contained in:
28
semen.scm
28
semen.scm
@@ -147,6 +147,12 @@
|
|||||||
(define (fn-header-length fn-form)
|
(define (fn-header-length fn-form)
|
||||||
(if (memq (first fn-form) '(pub extern)) 5 4))
|
(if (memq (first fn-form) '(pub extern)) 5 4))
|
||||||
|
|
||||||
|
(define (fn-core form)
|
||||||
|
;; The (fn name args rettype . body) list, without pub/extern
|
||||||
|
(if (memq (first form) '(pub extern))
|
||||||
|
(cdr form)
|
||||||
|
form))
|
||||||
|
|
||||||
(define (strip-fn-header-comments fn-form)
|
(define (strip-fn-header-comments fn-form)
|
||||||
;; Remove comment forms from the function header
|
;; Remove comment forms from the function header
|
||||||
;; ([pub|extern] fn name arglist rettype) so the positional accessors
|
;; ([pub|extern] fn name arglist rettype) so the positional accessors
|
||||||
@@ -241,28 +247,22 @@ Returns #f if the form is not a function, returns the form otherwise"
|
|||||||
(else #f)))
|
(else #f)))
|
||||||
|
|
||||||
(define (sex-fn-public? fn-form)
|
(define (sex-fn-public? fn-form)
|
||||||
(eq? (car fn-form) 'pub))
|
(eq? (first fn-form) 'pub))
|
||||||
|
|
||||||
(define (sex-fn-return-type fn-form)
|
|
||||||
(assert (sex-fn? fn-form)
|
|
||||||
(fmt #f "Form " fn-form " is not a function"))
|
|
||||||
(if (sex-fn-public? fn-form)
|
|
||||||
(third fn-form)
|
|
||||||
(second fn-form)))
|
|
||||||
|
|
||||||
(define (sex-fn-name fn-form)
|
(define (sex-fn-name fn-form)
|
||||||
(assert (sex-fn? fn-form)
|
(assert (sex-fn? fn-form)
|
||||||
(fmt #f "Form " fn-form " is not a function"))
|
(fmt #f "Form " fn-form " is not a function"))
|
||||||
(if (sex-fn-public? fn-form)
|
(second (fn-core fn-form)))
|
||||||
(fourth fn-form)
|
|
||||||
(third fn-form)))
|
|
||||||
|
|
||||||
(define (sex-fn-arglist fn-form)
|
(define (sex-fn-arglist fn-form)
|
||||||
(assert (sex-fn? fn-form)
|
(assert (sex-fn? fn-form)
|
||||||
(fmt #f "Form " fn-form " is not a function"))
|
(fmt #f "Form " fn-form " is not a function"))
|
||||||
(if (sex-fn-public? fn-form)
|
(third (fn-core fn-form)))
|
||||||
(fifth fn-form)
|
|
||||||
(fourth fn-form)))
|
(define (sex-fn-return-type fn-form)
|
||||||
|
(assert (sex-fn? fn-form)
|
||||||
|
(fmt #f "Form " fn-form " is not a function"))
|
||||||
|
(fourth (fn-core fn-form)))
|
||||||
|
|
||||||
(define (sex-fn-prototype fn-form)
|
(define (sex-fn-prototype fn-form)
|
||||||
"Returns all except body"
|
"Returns all except body"
|
||||||
|
|||||||
Reference in New Issue
Block a user