68 lines
1.1 KiB
C
68 lines
1.1 KiB
C
struct IfExpr {
|
|
};
|
|
|
|
struct IntegerLiteral {
|
|
};
|
|
|
|
// Sum type
|
|
typedef struct {
|
|
void* obj;
|
|
int typ;
|
|
} Expr;
|
|
|
|
struct User {
|
|
int age;
|
|
string name;
|
|
};
|
|
|
|
// multi return structs
|
|
// end of definitions #endif
|
|
typedef Option Option_int;
|
|
Option_int get_opt();
|
|
void User_foo(User* u);
|
|
void println(string s);
|
|
void handle_expr(Expr e);
|
|
// TypeDecl
|
|
|
|
Option_int get_opt() {
|
|
return opt_ok(& (int []) { 0 }, sizeof(int));
|
|
}
|
|
|
|
void User_foo(User* u) {
|
|
int age = u->age;
|
|
array_string zzz = array_repeat(new_array_from_c_array(1, 1, sizeof(string), (string[]){
|
|
tos3(""),
|
|
}), u->age);
|
|
}
|
|
|
|
void println(string s) {
|
|
}
|
|
|
|
void handle_expr(Expr e) {
|
|
if (e.typ == _type_idx_IfExpr) {
|
|
IfExpr* it = (IfExpr*)tmp1.obj; // ST it
|
|
println(tos3("if"));
|
|
}
|
|
else if (e.typ == _type_idx_IntegerLiteral) {
|
|
IntegerLiteral* it = (IntegerLiteral*)tmp1.obj; // ST it
|
|
println(tos3("integer"));
|
|
}
|
|
else {
|
|
println(tos3("else"));
|
|
}
|
|
;
|
|
}
|
|
|
|
int main() {
|
|
User user = (User){
|
|
0};
|
|
user.age = 10;
|
|
user.age++;
|
|
user.name = tos3("bob");
|
|
Option_int n = get_opt();
|
|
int a = /*opt*/(*(int*)n.data) + 3;
|
|
handle_expr((IfExpr){
|
|
0});
|
|
return 0;
|
|
}
|