v2: fix type aliases & add check
parent
8ac0739858
commit
895a1711cb
|
@ -1848,7 +1848,6 @@ fn (p mut Parser) type_decl() ast.TypeDecl {
|
||||||
}
|
}
|
||||||
p.check(.key_type)
|
p.check(.key_type)
|
||||||
name := p.check_name()
|
name := p.check_name()
|
||||||
mut is_sum := false
|
|
||||||
mut sum_variants := []table.Type
|
mut sum_variants := []table.Type
|
||||||
// type SumType = A | B | c
|
// type SumType = A | B | c
|
||||||
if p.tok.kind == .assign {
|
if p.tok.kind == .assign {
|
||||||
|
@ -1860,13 +1859,7 @@ fn (p mut Parser) type_decl() ast.TypeDecl {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
p.check(.pipe)
|
p.check(.pipe)
|
||||||
is_sum = true
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else {
|
|
||||||
p.parse_type()
|
|
||||||
}
|
|
||||||
if is_sum {
|
|
||||||
p.table.register_type_symbol(table.TypeSymbol{
|
p.table.register_type_symbol(table.TypeSymbol{
|
||||||
kind: .sum_type
|
kind: .sum_type
|
||||||
name: p.prepend_mod(name)
|
name: p.prepend_mod(name)
|
||||||
|
@ -1874,10 +1867,14 @@ fn (p mut Parser) type_decl() ast.TypeDecl {
|
||||||
variants: sum_variants
|
variants: sum_variants
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
} else {
|
}
|
||||||
|
// type MyType int
|
||||||
|
else {
|
||||||
|
parent_type := p.parse_type()
|
||||||
p.table.register_type_symbol(table.TypeSymbol{
|
p.table.register_type_symbol(table.TypeSymbol{
|
||||||
kind: .alias
|
kind: .alias
|
||||||
name: p.prepend_mod(name)
|
name: p.prepend_mod(name)
|
||||||
|
parent_idx: table.type_idx(parent_type)
|
||||||
info: table.Alias{
|
info: table.Alias{
|
||||||
foo: ''
|
foo: ''
|
||||||
}
|
}
|
||||||
|
|
|
@ -421,6 +421,11 @@ pub fn (t &Table) check(got, expected Type) bool {
|
||||||
if got_type_sym.kind == .array && got_type_sym.name == 'array_void' && exp_type_sym.kind == .array {
|
if got_type_sym.kind == .array && got_type_sym.name == 'array_void' && exp_type_sym.kind == .array {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
// type alias
|
||||||
|
if (got_type_sym.kind == .alias && got_type_sym.parent_idx == exp_idx) ||
|
||||||
|
(exp_type_sym.kind == .alias && exp_type_sym.parent_idx == got_idx) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
// sum type
|
// sum type
|
||||||
if got_type_sym.kind == .sum_type {
|
if got_type_sym.kind == .sum_type {
|
||||||
sum_info := got_type_sym.info as SumType
|
sum_info := got_type_sym.info as SumType
|
||||||
|
|
Loading…
Reference in New Issue