1
0
forked from alex-eg/sex

fix pub function prototypes

This commit is contained in:
alex-eg
2025-06-14 17:10:09 +03:00
parent bb3d7c1d3e
commit 1229f89153
2 changed files with 22 additions and 5 deletions

View File

@@ -13,7 +13,8 @@
(struct foo
((float a)
(int b)
((const char *) c)))
((const char *) c)
((fn bool ((bool val))) not)))
,(list-T '(int))
,(make-list-T '(int) #f)
@@ -38,3 +39,8 @@
,(list-for-each '((printf "%d " v) l v))
(printf "\n")
0)
(pub fn segs-renderer* create-renderer ())
(pub fn void clear-command-buffer ((segs-renderer *r)))
(pub fn void add-render-command ((segs-renderer *r) ((fn void ()) command)))
(pub fn void commit-command-buffer ((segs-renderer *r)))

View File

@@ -80,10 +80,21 @@
form))
acc)))))
(define (normalize-fn-form form)
;; (fn ret-type name arglist body) -> normal function
;; (fn ret-type name arglist) -> prototype
(if (>= (length form) 5)
form
(cons 'prototype (cdr form))))
(define (walk-function form static acc)
(if static
(append (walk-generic (list 'static form) (list)) acc)
(append (walk-generic (cdr form) (list)) acc)))
(append (walk-generic (list 'static (normalize-fn-form form))
(list))
acc)
(append (walk-generic (normalize-fn-form (cdr form))
(list))
acc)))
(define (walk-struct form acc)
(let ((name (unkebabify (cadr form))))
@@ -94,11 +105,11 @@
(case (cadr form)
((fn)
(append
(walk-generic (list 'extern (cons 'prototype (cddr form))) (list))
(list (cons 'extern (walk-function form #f (list))))
acc))
((var)
(append
(walk-generic (list 'extern (cdr form)) (list))
(list (cons 'extern (walk-generic (cdr form) (list))))
acc))
(else (error "Extern what?"))))