1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

gen.c: simplify unwrap_generic method (#15288)

* gen.c: use `nil` instead of `0`
* replace `muttable` => `mut_table`
This commit is contained in:
StunxFS 2022-08-01 04:40:37 -04:00 committed by GitHub
parent b4fd9b5f92
commit b08690d151
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -7,22 +7,24 @@ import v.ast
fn (mut g Gen) unwrap_generic(typ ast.Type) ast.Type {
if typ.has_flag(.generic) {
/*
resolve_generic_to_concrete should not mutate the table.
It mutates if the generic type is for example []T and the
concrete type is an array type that has not been registered
yet. This should have already happened in the checker, since
it also calls resolve_generic_to_concrete. g.table is made
non-mut to make sure no one else can accidentally mutates the table.
*/
mut muttable := unsafe { &ast.Table(g.table) }
if t_typ := muttable.resolve_generic_to_concrete(typ, if unsafe { g.cur_fn != 0 } {
g.cur_fn.generic_names
} else {
[]string{}
}, g.cur_concrete_types)
{
return t_typ
// NOTE: `resolve_generic_to_concrete` should not mutate the table.
//
// It mutates if the generic type is for example `[]T` and the concrete
// type is an array type that has not been registered yet.
//
// This should have already happened in the checker, since it also calls
// `resolve_generic_to_concrete`. `g.table` is made non-mut to make sure
// no one else can accidentally mutates the table.
unsafe {
mut mut_table := &ast.Table(g.table)
if t_typ := mut_table.resolve_generic_to_concrete(typ, if g.cur_fn != nil {
g.cur_fn.generic_names
} else {
[]string{}
}, g.cur_concrete_types)
{
return t_typ
}
}
}
return typ