Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- typedef unsigned long size_t;
- int printf(const char *fmt, ...);
- typedef long (*func)();
- typedef struct lambda {
- func function;
- void *captures[32];
- } lambda;
- #define CAPTURE(...) __VA_ARGS__
- #define LAMBDA(name, captures, func...) func \
- lambda name = { (void *)&lambda_function, captures }
- #define lambda_ctx void **captures
- #define ctx(n, type) *(type *)captures[n]
- #define lambda_call(lambda, args...) \
- lambda.function(lambda.captures, args)
- int foo() {
- int x = 11, y = 100;
- char *foo = "Hello World";
- LAMBDA( q,
- CAPTURE({&x, &y, &foo}),
- int lambda_function(lambda_ctx, int x) {
- int a = 100;
- int *p = &ctx(1, int);
- char *str = ctx(2, char *);
- printf("%s\n", str);
- return a + ctx(0, int) + x;
- }
- );
- return (int)lambda_call(q, 20);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement