bare func declaration identities (comptime)
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user