checker: handle different pointer levels
parent
9593ad20f9
commit
15ba53be21
|
@ -28,8 +28,6 @@ pub fn (mut c Checker) check_basic(got table.Type, expected table.Type) bool {
|
|||
t := c.table
|
||||
got_idx := t.unalias_num_type(got).idx()
|
||||
exp_idx := t.unalias_num_type(expected).idx()
|
||||
// got_is_ptr := got.is_ptr()
|
||||
exp_is_ptr := expected.is_ptr()
|
||||
// exp_is_optional := expected.has_flag(.optional)
|
||||
// got_is_optional := got.has_flag(.optional)
|
||||
// if (exp_is_optional && !got_is_optional) || (!exp_is_optional && got_is_optional) {
|
||||
|
@ -37,6 +35,7 @@ pub fn (mut c Checker) check_basic(got table.Type, expected table.Type) bool {
|
|||
//}
|
||||
// println('check: $got_type_sym.name, $exp_type_sym.name')
|
||||
// # NOTE: use idxs here, and symbols below for perf
|
||||
// got_is_ptr := got.is_ptr()
|
||||
if got_idx == exp_idx {
|
||||
// this is returning true even if one type is a ptr
|
||||
// and the other is not, is this correct behaviour?
|
||||
|
@ -45,6 +44,7 @@ pub fn (mut c Checker) check_basic(got table.Type, expected table.Type) bool {
|
|||
if got_idx == table.none_type_idx && expected.has_flag(.optional) {
|
||||
return false
|
||||
}
|
||||
exp_is_ptr := expected.is_ptr()
|
||||
// allow pointers to be initialized with 0. TODO: use none instead
|
||||
if exp_is_ptr && got_idx == table.int_type_idx {
|
||||
return true
|
||||
|
@ -261,6 +261,13 @@ pub fn (mut c Checker) check_types(got table.Type, expected table.Type) bool {
|
|||
if got == expected {
|
||||
return true
|
||||
}
|
||||
got_is_ptr := got.is_ptr()
|
||||
exp_is_ptr := expected.is_ptr()
|
||||
if got_is_ptr && exp_is_ptr {
|
||||
if got.nr_muls() != expected.nr_muls() {
|
||||
return false
|
||||
}
|
||||
}
|
||||
exp_idx := expected.idx()
|
||||
got_idx := got.idx()
|
||||
if exp_idx == got_idx {
|
||||
|
|
Loading…
Reference in New Issue