Add lambdas.

This commit is contained in:
Christoffer Lerno
2023-01-23 00:41:05 +01:00
committed by Christoffer Lerno
parent c9e1e2d763
commit b508a43f8f
47 changed files with 1116 additions and 487 deletions

View File

@@ -0,0 +1,45 @@
// #target: macos-x64
module test;
import std::io;
define Callback1 = fn double(double x);
define Callback2 = fn int(int y);
macro test2(y)
{
var $Type = $typeof(y);
return fn $Type($typeof(y) x) { return x * x; };
}
macro test($Type)
{
$Type z = fn (x) { return x * x; };
return z;
}
fn void main()
{
io::printfn("val: %d", test(Callback2)(3));
io::printfn("val: %s", test(Callback1)(3.3));
io::printfn("val: %s", test(Callback1)(3.3));
io::printfn("val: %d", test2(1)(3));
io::printfn("val: %d", test2(1)(3));
io::printfn("val: %s", test2(1.0)(3.3));
}
/* #expect: test.ll
store ptr @"test_test$lambda1", ptr %z, align 8
%1 = call i32 %0(i32 3)
store ptr @"test_test$lambda2", ptr %z3, align 8
%7 = call double %6(double 3.300000e+00)
store ptr @"test_test$lambda2", ptr %z10, align 8
%13 = call double %12(double 3.300000e+00)
%18 = call i32 @"test_test2$lambda3"(i32 3)
%23 = call i32 @"test_test2$lambda3"(i32 3)
%28 = call double @"test_test2$lambda4"(double 3.300000e+00)
define internal double @"test_test2$lambda4"(double %0) #0 {
define internal i32 @"test_test2$lambda3"(i32 %0) #0 {
define internal double @"test_test$lambda2"(double %0) #0 {
define internal i32 @"test_test$lambda1"(i32 %0) #0 {