move Sex to better types

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)
This commit is contained in:
2025-10-21 21:38:41 +03:00
committed by Pavel Kulyov
parent 2228ab3b50
commit 48a3d06925
8 changed files with 318 additions and 59 deletions

View File

@@ -5,12 +5,12 @@
(import list)
(struct foo
((float a-field)
(int b)
((const char *) c)
((fn bool ((bool val))) not)))
((a-field float)
(b int)
(c (* const char))
(not (fn ((val bool)) bool))))
(var (struct foo) f)
(var f (struct foo))
(list-T int)
(make-list-T int #f)
@@ -18,15 +18,16 @@
(length-list-T int #f)
(is-empty-list-T int #f)
(extern fn void puk ((int a) (float b)))
(pub fn bool baz () (return true))
(extern fn puk ((a int) (b float)) void)
(pub fn baz () bool
(return true))
(extern var int i)
(var int j)
(pub var int k)
(extern var i int)
(var j int)
(pub var k int)
(pub fn int main ()
(var (struct list-int) *l (make-list-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)
@@ -35,9 +36,9 @@
(printf "%d " v))
(printf "\n")
(printf "Size of the list: %lu\n" (length-list-int l))
(printf "%p\n" (cast void* l->next))
(printf "%p\n" (cast l->next (* void)))
(return 0))
(pub fn void print-list (((const struct list-int) *l))
(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"))