79 lines
1.3 KiB
Modula-2
Vendored
79 lines
1.3 KiB
Modula-2
Vendored
|
|
|
|
---
|
|
|
|
#include <stdarg.h>
|
|
|
|
struct S {
|
|
int x;
|
|
};
|
|
|
|
static int getX(struct S (*callback)(void)) {
|
|
return callback().x;
|
|
}
|
|
|
|
static void applyCallback(struct S s, void (*callback)(struct S)) {
|
|
callback(s);
|
|
}
|
|
|
|
static struct S makeS(int x, ...) {
|
|
return (struct S){ x };
|
|
}
|
|
|
|
enum E {
|
|
ZERO, ONE, TWO
|
|
};
|
|
|
|
static enum E makeE(int ordinal, ...) {
|
|
return ordinal;
|
|
}
|
|
|
|
struct Args {
|
|
char a1;
|
|
char a2;
|
|
short a3;
|
|
int a4;
|
|
long long a5;
|
|
float a6;
|
|
double a7;
|
|
void* a8;
|
|
unsigned char a9;
|
|
unsigned short a10;
|
|
unsigned int a11;
|
|
unsigned long long a12;
|
|
enum E a13;
|
|
struct S a14;
|
|
void* a15;
|
|
};
|
|
|
|
static struct Args getVarargs(int ignore, ...) {
|
|
va_list args;
|
|
va_start(args, ignore);
|
|
|
|
struct Args result = {
|
|
va_arg(args, char),
|
|
va_arg(args, char),
|
|
va_arg(args, short),
|
|
va_arg(args, int),
|
|
va_arg(args, long long),
|
|
va_arg(args, double),
|
|
va_arg(args, double),
|
|
va_arg(args, void*),
|
|
va_arg(args, unsigned char),
|
|
va_arg(args, unsigned short),
|
|
va_arg(args, unsigned int),
|
|
va_arg(args, unsigned long long),
|
|
va_arg(args, enum E),
|
|
va_arg(args, struct S),
|
|
va_arg(args, void*)
|
|
};
|
|
|
|
va_end(args);
|
|
|
|
return result;
|
|
}
|
|
|
|
static int sum(int first, int second) {
|
|
return first + second;
|
|
}
|