All checks were successful
Sex CI / build-linux (pull_request) Successful in 4m45s
36 lines
1.1 KiB
Scheme
36 lines
1.1 KiB
Scheme
;;; A module. Everything marked `pub' forms its public interface;
|
|
;;; everything else is private to this file.
|
|
;;;
|
|
;;; Importing a module does not link it: it pastes the declarations, so
|
|
;;; the compiled object still has to be handed to the C compiler. See
|
|
;;; greet-app.sex.
|
|
|
|
(include stdio.h)
|
|
|
|
(pub var greet-count int 0)
|
|
|
|
(pub struct greeting
|
|
"A greeting to print."
|
|
((text (* const char)) (times int)))
|
|
|
|
(pub enum mood (cheerful grumpy))
|
|
|
|
(pub typedef greeting-t (struct greeting))
|
|
|
|
;;; Compile-time reflection across the module boundary: both the macro
|
|
;;; and the struct it asks about are exported, and the importing unit
|
|
;;; has to know the struct's fields to expand this.
|
|
(pub defmacro (describe-fields type)
|
|
`(do ,@(map-fields type
|
|
(lambda (name field-type)
|
|
`(printf "%s " ,(symbol->string name))))))
|
|
|
|
(pub fn greet ((name (* const char))) void
|
|
"Print a greeting for NAME."
|
|
(++ greet-count)
|
|
(printf "hello, %s\n" name))
|
|
|
|
;;; Not `pub': invisible to importers, and static in the generated C.
|
|
(fn unused-helper () void
|
|
(printf "private\n"))
|