Skip to content

Commit

Permalink
Handle pointer/optional types correctly
Browse files Browse the repository at this point in the history
Simpler than #7649.
  • Loading branch information
ntrel committed Jan 1, 2021
1 parent 4681ba1 commit 853f7c5
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions vlib/v/gen/auto_eq_methods.v
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,6 @@ fn (mut g Gen) gen_map_equality_fn(left table.Type) string {
g.map_fn_definitions << ptr_typ
left_sym := g.table.get_type_symbol(left)
value_typ := left_sym.map_info().value_type
value_sym := g.table.get_type_symbol(value_typ)
ptr_value_typ := g.typ(value_typ)
g.type_definitions.writeln('static bool ${ptr_typ}_map_eq($ptr_typ a, $ptr_typ b); // auto')
mut fn_builder := strings.new_builder(512)
Expand All @@ -106,7 +105,9 @@ fn (mut g Gen) gen_map_equality_fn(left table.Type) string {
fn_builder.writeln('\t\tif (!DenseArray_has_index(&a.key_values, i)) continue;')
fn_builder.writeln('\t\tvoidptr k = DenseArray_key(&a.key_values, i);')
fn_builder.writeln('\t\tif (!map_exists_1(&b, k)) return false;')
if value_sym.kind == .function {
kind := g.table.type_kind(value_typ)
if kind == .function {
value_sym := g.table.get_type_symbol(value_typ)
func := value_sym.info as table.FnType
ret_styp := g.typ(func.func.return_type)
fn_builder.write('\t\t$ret_styp (*v) (')
Expand All @@ -122,7 +123,7 @@ fn (mut g Gen) gen_map_equality_fn(left table.Type) string {
} else {
fn_builder.writeln('\t\t$ptr_value_typ v = *($ptr_value_typ*)map_get_1(&a, k, &($ptr_value_typ[]){ 0 });')
}
match value_sym.kind {
match kind {
.string {
fn_builder.writeln('\t\tif (!fast_string_eq(*(string*)map_get_1(&b, k, &(string[]){_SLIT("")}), v)) {')
}
Expand Down

0 comments on commit 853f7c5

Please sign in to comment.