test88
auto test88 =
q{--- test88
// function pointer
alias i32_funType = i32 function();
alias i32ptr_funType = i32* function();
enum i32_funType funPtrEnum = &i32Fun;
enum i32 function() inlinefunPtrEnum = &i32Fun;
// i32_funType funPtrGlobal = &i32Fun; // TODO: globals are uninitialized now
// i32 function() inlinefunPtrGlobal = &i32Fun; // TODO: globals are uninitialized now
i32 i32Fun() {
return 42;
}
i32_funType retFuncPtr() {
return &i32Fun;
}
i32 test() {
i32_funType funPtr = retFuncPtr(); // call by ptr (may be optimized to direct call later)
i32 function() inlinefunPtr = &i32Fun; // direct call
return funPtr() + inlinefunPtr();
}
i32 test2() {
return funPtrEnum() + inlinefunPtrEnum(); // direct call is performed
}
i32 sum(i32 a, i32 b) { return a + b; }
// pass ptr to function with parameters
i32 callFunc(i32 function(i32, i32) func, i32 a, i32 b) {
return func(a, b);
}
i32 test3() {
return callFunc(&sum, 10, 40);
}
i32 callFunc2(i32 a1, i32 a2, i32 a3, i32 a4, i32 a5, i32 a6, i32 function(i32, i32) func) {
return func(a1, a2);
}
// test push function address
i32 test4() {
return callFunc2(1, 2, 3, 4, 5, 6, &sum);
}
};
tests passing
functionsvariables