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