v/vlib/v/tests/sumtype_calls_test.v

78 lines
965 B
V
Raw Normal View History

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
type DeclExpr = DeclExprA | DeclExprB
2019-12-24 09:07:26 +01:00
struct BoolExpr {
foo int
}
struct BinExpr {
name string
2019-12-24 09:07:26 +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) {
}
fn handle_decl_expr(de DeclExpr) {
}
2019-12-24 09:07:26 +01:00
fn parse_bool() BoolExpr {
return BoolExpr{}
}
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)
handle_expr(parse_bool())
de := DeclExprA{}
handle_expr(de)
handle_decl_expr(de)
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;
}
*/