bare func declaration identities (comptime)

This commit is contained in:
2026-07-18 14:05:55 +02:00
parent 85693e57e1
commit e889a99e55
8 changed files with 512 additions and 74 deletions
+40 -4
View File
@@ -10,7 +10,12 @@ Point :: struct {
}
Callback_Config :: struct {
call @func(value i32) i32
call func(value i32) i32
}
Callback_Choice :: union(enum) {
call func(value i32) i32
empty void
}
Box :: union(enum) {
@@ -90,11 +95,11 @@ decrement_c c_func(value i32) i32 {
return value - 1
}
apply_comptime func($callback @func(value i32) i32, value i32) i32 {
apply_comptime func($callback func(value i32) i32, value i32) i32 {
return callback(value)
}
apply_comptime_c func($callback *c_func(value i32) i32, value i32) i32 {
apply_comptime_c func($callback c_func(value i32) i32, value i32) i32 {
return callback(value)
}
@@ -102,10 +107,29 @@ apply_comptime_config func($config Callback_Config, value i32) i32 {
return config.call(value)
}
apply_comptime_array func($callbacks [2]func(value i32) i32, value i32) i32 {
return callbacks[0](value) + callbacks[1](value)
}
apply_comptime_optional func($callback ?func(value i32) i32, value i32) i32 {
return callback?(value)
}
apply_comptime_choice func($choice Callback_Choice, value i32) i32 {
return match choice {
.call |callback|: callback(value)
.empty: value
}
}
call_native func(callback @func(value i32) i32, value i32) i32 {
return callback(value)
}
materialize_callback func($callback func(value i32) i32, value i32) i32 {
return call_native(callback, value)
}
call_fallible func(callback @func(flag bool) i32 ! Error, flag bool) i32 ! Error {
return try callback(flag)
}
@@ -208,6 +232,9 @@ main func() i32 {
comptime_literal i32 :: $apply_comptime(func(value i32) i32 { return value + 2 }, 12)
comptime_c_callback i32 :: $apply_comptime_c(decrement_c, 15)
comptime_config i32 :: $apply_comptime_config(Callback_Config {call = increment}, 15)
comptime_array i32 :: $apply_comptime_array([increment, double], 3)
comptime_optional i32 :: $apply_comptime_optional(increment, 16)
comptime_choice i32 :: $apply_comptime_choice(Callback_Choice {call = double}, 9)
fallible_ok i32 :: $call_fallible(may_fail, false) catch 0
fallible_err i32 :: $call_fallible(may_fail, true) catch |e| {
result i32 :: match e {
@@ -268,7 +295,8 @@ main func() i32 {
return 17
}
if comptime_callback != 13 or comptime_literal != 14 or
comptime_c_callback != 14 or comptime_config != 16 {
comptime_c_callback != 14 or comptime_config != 16 or
comptime_array != 10 or comptime_optional != 17 or comptime_choice != 18 {
return 18
}
if apply_comptime(increment, 20) != 21 or apply_comptime(increment, 21) != 22 or
@@ -282,5 +310,13 @@ main func() i32 {
apply_comptime_config(Callback_Config {call = increment}, 20) != 21 {
return 21
}
if apply_comptime_array([increment, double], 4) != 13 or
apply_comptime_optional(increment, 4) != 5 or
apply_comptime_choice(Callback_Choice {call = double}, 4) != 8 {
return 22
}
if materialize_callback(increment, 30) != 31 {
return 23
}
return 0
}