forked from alex-eg/sex
Types, fns and vars are now written in another, better, more intuitive and readable way. Types: "pointer to const char" is "* const char" "array of pointers to volatile int" is "[* volatile int]" Read left to right Vars (as well as fn args, struct fields): (var name type) (struct vec3 ((x float) (y float) (z float)) (fn vec3-add ((v1 vec3) (v2 vec3)) vec3 ...) Also fns are now have return types after arg list. * is now must not be attached to any type name (or variable for that matter)
45 lines
1.0 KiB
Scheme
45 lines
1.0 KiB
Scheme
(include stdlib.h)
|
|
(include stddef.h)
|
|
(include stdio.h)
|
|
|
|
(import list)
|
|
|
|
(struct foo
|
|
((a-field float)
|
|
(b int)
|
|
(c (* const char))
|
|
(not (fn ((val bool)) bool))))
|
|
|
|
(var f (struct foo))
|
|
|
|
(list-T int)
|
|
(make-list-T int #f)
|
|
(add-value-list-T int #f)
|
|
(length-list-T int #f)
|
|
(is-empty-list-T int #f)
|
|
|
|
(extern fn puk ((a int) (b float)) void)
|
|
(pub fn baz () bool
|
|
(return true))
|
|
|
|
(extern var i int)
|
|
(var j int)
|
|
(pub var k int)
|
|
|
|
(pub fn main () int
|
|
(var l (* struct list-int) (make-list-int))
|
|
(printf "Size of the list: %lu\n" (length-list-int l))
|
|
(add-value-list-int l 3)
|
|
(add-value-list-int l 4)
|
|
(printf "Size of the list: %lu\n" (length-list-int l))
|
|
(list-for-each (struct list-int) l int v
|
|
(printf "%d " v))
|
|
(printf "\n")
|
|
(printf "Size of the list: %lu\n" (length-list-int l))
|
|
(printf "%p\n" (cast l->next (* void)))
|
|
(return 0))
|
|
|
|
(pub fn print-list ((l (* const struct list-int))) void
|
|
(list-for-each (const struct list-int) l int v (printf "%d " v))
|
|
(printf "\n"))
|