278 lines
4.6 KiB
C
278 lines
4.6 KiB
C
typedef enum {
|
|
Color_red, // 0
|
|
Color_green, // 1
|
|
Color_blue, // 2
|
|
} Color;
|
|
|
|
struct Two {
|
|
};
|
|
|
|
struct User {
|
|
int age;
|
|
string name;
|
|
};
|
|
|
|
struct One {
|
|
Two two;
|
|
};
|
|
|
|
// multi return structs
|
|
typedef struct {
|
|
int arg0;
|
|
string arg1;
|
|
} multi_return_int_string;
|
|
// end of definitions #endif
|
|
#define _const_pi 3
|
|
int _const_pi2; // inited later
|
|
string int_str(int* x) { return tos3("TODO_str"); }
|
|
void foo(int a);
|
|
void User_inc_age(User* u, int n);
|
|
int get_int(string a);
|
|
bool get_bool();
|
|
int get_int2();
|
|
void myuser();
|
|
multi_return_int_string multi_return();
|
|
void variadic(varg_int a);
|
|
void ensure_cap(int required, int cap);
|
|
void println(string s);
|
|
void matches();
|
|
#define _const_path_sep 10
|
|
void end();
|
|
int function1();
|
|
void foo(int a);
|
|
void init_user();
|
|
User get_user();
|
|
void puts(string s);
|
|
void function2();
|
|
void init_array();
|
|
#define _const_localmod__pub_int_const 20
|
|
void localmod__pub_foo();
|
|
int localmod__get_int_10();
|
|
// variadic structs
|
|
struct varg_int {
|
|
int len;
|
|
int args[0];
|
|
};
|
|
|
|
// >> typeof() support for sum types
|
|
// << typeof() support for sum types
|
|
|
|
//
|
|
int main(int argc, char** argv) {
|
|
_vinit();
|
|
int a = 10;
|
|
a++;
|
|
int negative = -a;
|
|
2 < 3;
|
|
a == 1;
|
|
a++;
|
|
foo(3);
|
|
int ak = 10;
|
|
int mypi = _const_pi;
|
|
Color color = Color_red;
|
|
localmod__pub_foo();
|
|
int ten = localmod__get_int_10();
|
|
println(int_str(_const_localmod__pub_int_const));
|
|
int g = ((int)(3.0));
|
|
byte* bytes = ((byte*)(0));
|
|
User* user_ptr = (User*)memdup(&(User){ .age = 0,
|
|
.name = tos3(""),
|
|
}, sizeof(User));
|
|
return 0;
|
|
}
|
|
|
|
void foo(int a) {
|
|
while (true) {
|
|
}
|
|
for (int i = 0;
|
|
i < 10; i++) {
|
|
}
|
|
array_int nums = new_array_from_c_array(3, 3, sizeof(int), (int[3]){
|
|
1, 2, 3,
|
|
});
|
|
array_int nums2 = array_slice(nums, 0, 2);
|
|
array_int nums3 = array_slice(nums, 1, 2);
|
|
array_int nums4 = array_slice(nums, 1, nums.len);
|
|
int number = (*(int*)array_get(nums, 0));
|
|
array_set(&nums, 1, &(int[]) { 10 });
|
|
array_bool bools = new_array_from_c_array(2, 2, sizeof(bool), (bool[2]){
|
|
true, false,
|
|
});
|
|
array_User users = new_array_from_c_array(1, 1, sizeof(User), (User[1]){
|
|
(User){
|
|
.age = 0,
|
|
.name = tos3(""),
|
|
},
|
|
});
|
|
bool b = (*(bool*)array_get(bools, 0));
|
|
array_string mystrings = new_array_from_c_array(2, 2, sizeof(string), (string[2]){
|
|
tos3("a"), tos3("b"),
|
|
});
|
|
string s = (*(string*)array_get(mystrings, 0));
|
|
int x = 0;
|
|
x = get_int2();
|
|
int n = get_int2();
|
|
bool q = true || false;
|
|
bool b2 = (*(bool*)array_get(bools, 0)) || true;
|
|
bool b3 = get_bool() || true;
|
|
int f = *(int*)array_first(nums);
|
|
array_int c = array_clone(&nums);
|
|
string d = tos3("d");
|
|
println(string_add(s, d));
|
|
}
|
|
|
|
void User_inc_age(User* u, int n) {
|
|
printf("%d", u->age);
|
|
u->age += n;
|
|
}
|
|
|
|
int get_int(string a) {
|
|
return 10;
|
|
}
|
|
|
|
bool get_bool() {
|
|
return true;
|
|
}
|
|
|
|
int get_int2() {
|
|
string a = tos3("hello");
|
|
return get_int(a);
|
|
}
|
|
|
|
void myuser() {
|
|
int x = 1;
|
|
int q = x | 0x1004;
|
|
User user = (User){
|
|
.age = 30,
|
|
.name = tos3(""),
|
|
};
|
|
int age = user.age + 1;
|
|
int boo = 2;
|
|
int boo2 = boo + 1;
|
|
bool b = age > 0;
|
|
bool b2 = user.age > 0;
|
|
User user2 = (User){
|
|
.age = 20,
|
|
.name = tos3(""),
|
|
};
|
|
user2.age = 20 + boo;
|
|
}
|
|
|
|
multi_return_int_string multi_return() {
|
|
return (multi_return_int_string){.arg0=4,.arg1=tos3("four")};
|
|
}
|
|
|
|
void variadic(varg_int a) {
|
|
int x = _const_path_sep;
|
|
int y = (true ? 1 : 0);
|
|
}
|
|
|
|
void ensure_cap(int required, int cap) {
|
|
if (required < cap) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
void println(string s) {
|
|
}
|
|
|
|
void matches() {
|
|
int a = 100;
|
|
if (a == 10) {
|
|
println(tos3("10"));
|
|
}
|
|
else if (a == 20) {
|
|
int k = a + 1;
|
|
}
|
|
else {
|
|
}
|
|
;
|
|
string x = (a == 10) ? tos3("ten") : (a == 30) ? tos3("thirty") : tos3("unknown");
|
|
int xx = (a == 10) ? 100 : (a == 30) ? 300 : 0;
|
|
println((a == 10) ? tos3("ten") : tos3("not ten"));
|
|
}
|
|
|
|
void end() {
|
|
int i = 2;
|
|
int key = 10;
|
|
bool x = i != -1 && key == 10;
|
|
int e = 2 + 3 * 4;
|
|
}
|
|
|
|
int function1() {
|
|
int a = 10 + 1;
|
|
int b = a + 1;
|
|
return 0;
|
|
}
|
|
|
|
|
|
void foo(int a) {
|
|
}
|
|
|
|
void init_user() {
|
|
User user = (User){
|
|
.name = tos3("Bob"),
|
|
.age = 0,
|
|
};
|
|
}
|
|
|
|
User get_user() {
|
|
User user = (User){
|
|
.age = 0,
|
|
.name = tos3(""),
|
|
};
|
|
return user;
|
|
}
|
|
|
|
void puts(string s) {
|
|
}
|
|
|
|
void function2() {
|
|
int x = 0;
|
|
f64 f = 10.1;
|
|
string s = tos3("hi");
|
|
int m = 10;
|
|
x += 10;
|
|
x += 1;
|
|
m += 2;
|
|
function1();
|
|
if (true) {
|
|
foo(10);
|
|
x += 8;
|
|
}
|
|
if (false) {
|
|
foo(1);
|
|
} else {
|
|
puts(tos3("else"));
|
|
foo(100);
|
|
}
|
|
while (true) {
|
|
init_user();
|
|
}
|
|
bool e = 1 + 2 > 0;
|
|
bool e2 = 1 + 2 < 0;
|
|
int j = 0;
|
|
}
|
|
|
|
void init_array() {
|
|
array_int nums = new_array_from_c_array(3, 3, sizeof(int), (int[3]){
|
|
4, 2, 3,
|
|
});
|
|
}
|
|
|
|
void localmod__pub_foo() {
|
|
int a = 10;
|
|
}
|
|
|
|
int localmod__get_int_10() {
|
|
return 10;
|
|
}
|
|
|
|
|
|
void _vinit() {
|
|
_const_pi2 = _const_pi;
|
|
}
|
|
|
|
|
|
|