From: Brendan Hansen Date: Tue, 28 Jul 2020 04:15:56 +0000 (-0500) Subject: testing with 'first-class' procedures X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=5d262bbab6cb25b16b5fbbbe7f5e771706f48c01;p=onyx.git testing with 'first-class' procedures --- diff --git a/progs/arrays.onyx b/progs/arrays.onyx index 982b12bb..9353aa68 100644 --- a/progs/arrays.onyx +++ b/progs/arrays.onyx @@ -22,12 +22,12 @@ min :: proc #overloaded { } // NOTE: in-place insertion sort -sort :: proc (src: []i32, len: i32) { +sort :: proc (src: []i32, len: i32, cmp: proc (i32, i32) -> i32) { for i: 0, len { smallest := i; for j: i + 1, len - if src[j] < src[smallest] smallest = j; + if cmp(src[j], src[smallest]) < 0 smallest = j; tmp :: src[smallest]; src[smallest] = src[i]; @@ -53,22 +53,23 @@ str_test :: proc #export { for y: 0, 5 for x: 0, 5 print(x + y * 5); } -// Don't need to bind this function to a symbol -proc #export "main2" { - print(__heap_start as i32); +abs_i32 :: proc (n: i32) -> i32 { + if n < 0 return -n; + return n; +} +// Don't need to bind this function to a symbol +proc #export "main" { len :: 10; global_arr = alloc(sizeof [10]i32) as []i32; - other_arr := alloc((len * 4) as u32) as []i32; - - print(global_arr as i32); - print(other_arr as i32); for i: 0, len global_arr[i] = (len - i) * 10; print(global_arr, len); - sort(global_arr, len); + sort(global_arr, len, proc (a: i32, b: i32) -> i32 { + return abs_i32(a - 50) - abs_i32(b - 50); + }); print(1234567); print(global_arr, len); @@ -101,7 +102,7 @@ alloc_2darr :: proc (rows: u32, cols: u32) -> []^i32 { return arr; } -multi_arr_test :: proc #export "main" { +multi_arr_test :: proc #export "main2" { arrs := alloc_2darr(10, 10); for y: 0, 10 for x: 0, 10 arrs[y][x] = x + y * 10; diff --git a/progs/fcf.onyx b/progs/fcf.onyx index f8eea8f8..92585188 100644 --- a/progs/fcf.onyx +++ b/progs/fcf.onyx @@ -49,10 +49,11 @@ proc #export "main" { funcs[0] = add; funcs[1] = sub; + funcs[2] = mul; funcs[3] = div; funcs[4] = mod; - print(funcs[0](10, 3)); + for i: 0, 5 print(funcs[i](10, 3)); dc := __heap_start as ^DeferredCall; dc.func = mod;