2020-05-03 13:12:05 +02:00
|
|
|
struct Foo {
|
|
|
|
}
|
2019-12-24 09:07:26 +01:00
|
|
|
|
2020-05-03 13:12:05 +02:00
|
|
|
type Expr = BinExpr | BoolExpr | DeclExprA | DeclExprB | Foo | UnaryExpr
|
2020-02-26 05:15:38 +01:00
|
|
|
|
|
|
|
type DeclExpr = DeclExprA | DeclExprB
|
2019-12-24 09:07:26 +01:00
|
|
|
|
|
|
|
struct BoolExpr {
|
|
|
|
foo int
|
|
|
|
}
|
|
|
|
|
|
|
|
struct BinExpr {
|
2020-01-03 14:42:48 +01:00
|
|
|
name string
|
2019-12-24 09:07:26 +01:00
|
|
|
}
|
|
|
|
|
2020-02-26 05:15:38 +01:00
|
|
|
struct DeclExprA {
|
|
|
|
name string
|
|
|
|
}
|
|
|
|
|
|
|
|
struct DeclExprB {
|
|
|
|
name string
|
|
|
|
}
|
|
|
|
|
2019-12-28 14:11:05 +01:00
|
|
|
fn expr1() Expr {
|
|
|
|
mut e := Expr{}
|
2020-05-03 13:12:05 +02:00
|
|
|
e = BinExpr{
|
|
|
|
name: 'binexpr'
|
|
|
|
}
|
2019-12-28 14:11:05 +01:00
|
|
|
return e
|
2020-04-12 01:41:26 +02:00
|
|
|
// return BinExpr{}
|
2019-12-28 14:11:05 +01:00
|
|
|
}
|
|
|
|
|
2020-01-06 16:13:12 +01:00
|
|
|
fn expr() Expr {
|
2019-12-28 14:11:05 +01:00
|
|
|
return BinExpr{}
|
|
|
|
}
|
|
|
|
|
2019-12-24 09:07:26 +01:00
|
|
|
struct UnaryExpr {
|
|
|
|
}
|
|
|
|
|
|
|
|
fn handle_expr(e Expr) {
|
|
|
|
}
|
|
|
|
|
2020-02-26 05:15:38 +01:00
|
|
|
fn handle_decl_expr(de DeclExpr) {
|
|
|
|
}
|
|
|
|
|
2019-12-24 09:07:26 +01:00
|
|
|
fn parse_bool() BoolExpr {
|
|
|
|
return BoolExpr{}
|
|
|
|
}
|
|
|
|
|
2020-01-03 14:42:48 +01:00
|
|
|
fn test_sum_type_cast() {
|
|
|
|
a := expr1()
|
|
|
|
b := a as BinExpr
|
|
|
|
assert b.name == 'binexpr'
|
|
|
|
}
|
|
|
|
|
2019-12-22 02:34:37 +01:00
|
|
|
fn test_sum_types() {
|
2019-12-24 09:07:26 +01:00
|
|
|
b := parse_bool()
|
|
|
|
handle_expr(b)
|
2021-05-13 16:54:48 +02:00
|
|
|
handle_expr(parse_bool())
|
|
|
|
|
2020-02-26 05:15:38 +01:00
|
|
|
de := DeclExprA{}
|
|
|
|
handle_expr(de)
|
|
|
|
handle_decl_expr(de)
|
2021-05-13 16:54:48 +02:00
|
|
|
handle_expr(DeclExprA{})
|
|
|
|
handle_decl_expr(DeclExprA{})
|
2019-12-24 09:07:26 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
#define ExprType_BoolExpr 0
|
|
|
|
#define ExprType_BinExpr 1
|
|
|
|
#define ExprType_UnaryExpr 2
|
|
|
|
|
|
|
|
struct Expr {
|
|
|
|
int typ;
|
|
|
|
void* obj;
|
|
|
|
}
|
|
|
|
*/
|