mirror of
https://github.com/vlang/v.git
synced 2025-09-09 15:27:05 -04:00
markused: cleanup as_cast handling (#23538)
This commit is contained in:
parent
eb1f52a6cd
commit
ea5f25e77b
@ -123,6 +123,7 @@ pub fn mark_used(mut table ast.Table, mut pref_ pref.Preferences, ast_files []&a
|
|||||||
if table.used_features.range_index || pref_.is_shared {
|
if table.used_features.range_index || pref_.is_shared {
|
||||||
core_fns << string_idx_str + '.substr_with_check'
|
core_fns << string_idx_str + '.substr_with_check'
|
||||||
core_fns << string_idx_str + '.substr_ni'
|
core_fns << string_idx_str + '.substr_ni'
|
||||||
|
core_fns << string_idx_str + '.substr'
|
||||||
core_fns << array_idx_str + '.slice_ni'
|
core_fns << array_idx_str + '.slice_ni'
|
||||||
core_fns << array_idx_str + '.get_with_check' // used for `x := a[i] or {}`
|
core_fns << array_idx_str + '.get_with_check' // used for `x := a[i] or {}`
|
||||||
core_fns << array_idx_str + '.clone_static_to_depth'
|
core_fns << array_idx_str + '.clone_static_to_depth'
|
||||||
@ -187,6 +188,7 @@ pub fn mark_used(mut table ast.Table, mut pref_ pref.Preferences, ast_files []&a
|
|||||||
}
|
}
|
||||||
if table.used_features.as_cast {
|
if table.used_features.as_cast {
|
||||||
core_fns << '__as_cast'
|
core_fns << '__as_cast'
|
||||||
|
core_fns << 'new_array_from_c_array'
|
||||||
}
|
}
|
||||||
if table.used_features.anon_fn {
|
if table.used_features.anon_fn {
|
||||||
core_fns << 'memdup_uncollectable'
|
core_fns << 'memdup_uncollectable'
|
||||||
@ -526,13 +528,6 @@ pub fn mark_used(mut table ast.Table, mut pref_ pref.Preferences, ast_files []&a
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if table.used_features.range_index {
|
|
||||||
walker.fn_by_name(string_idx_str + '.substr')
|
|
||||||
}
|
|
||||||
if walker.as_cast_type_names.len > 0 {
|
|
||||||
walker.fn_by_name('new_array_from_c_array')
|
|
||||||
}
|
|
||||||
|
|
||||||
table.used_features.used_fns = walker.used_fns.move()
|
table.used_features.used_fns = walker.used_fns.move()
|
||||||
table.used_features.used_consts = walker.used_consts.move()
|
table.used_features.used_consts = walker.used_consts.move()
|
||||||
table.used_features.used_globals = walker.used_globals.move()
|
table.used_features.used_globals = walker.used_globals.move()
|
||||||
|
@ -22,8 +22,6 @@ mut:
|
|||||||
all_fns map[string]ast.FnDecl
|
all_fns map[string]ast.FnDecl
|
||||||
all_consts map[string]ast.ConstField
|
all_consts map[string]ast.ConstField
|
||||||
all_globals map[string]ast.GlobalField
|
all_globals map[string]ast.GlobalField
|
||||||
//
|
|
||||||
as_cast_type_names map[string]string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn Walker.new(params Walker) &Walker {
|
pub fn Walker.new(params Walker) &Walker {
|
||||||
@ -513,7 +511,6 @@ fn (mut w Walker) expr(node_ ast.Expr) {
|
|||||||
///
|
///
|
||||||
ast.AsCast {
|
ast.AsCast {
|
||||||
w.expr(node.expr)
|
w.expr(node.expr)
|
||||||
w.as_cast(node)
|
|
||||||
}
|
}
|
||||||
ast.AtExpr {}
|
ast.AtExpr {}
|
||||||
ast.BoolLiteral {}
|
ast.BoolLiteral {}
|
||||||
@ -733,37 +730,3 @@ pub fn (mut w Walker) or_block(node ast.OrExpr) {
|
|||||||
w.stmts(node.stmts)
|
w.stmts(node.stmts)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut w Walker) as_cast(node ast.AsCast) {
|
|
||||||
if node.typ == 0 {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if node.typ.has_flag(.generic) {
|
|
||||||
w.as_cast_type_names['some_generic_type'] = 'some_generic_name'
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if node.expr_type == 0 {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if node.expr_type.has_flag(.generic) {
|
|
||||||
w.as_cast_type_names['some_generic_type'] = 'some_generic_name'
|
|
||||||
return
|
|
||||||
}
|
|
||||||
mut expr_type_sym := w.table.sym(node.expr_type)
|
|
||||||
if mut expr_type_sym.info is ast.SumType {
|
|
||||||
w.fill_as_cast_type_names(expr_type_sym.info.variants)
|
|
||||||
} else if mut expr_type_sym.info is ast.Interface && node.expr_type != node.typ {
|
|
||||||
w.fill_as_cast_type_names(expr_type_sym.info.types)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn (mut w Walker) fill_as_cast_type_names(types []ast.Type) {
|
|
||||||
for variant in types {
|
|
||||||
idx := u32(variant).str()
|
|
||||||
if idx in w.as_cast_type_names {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
variant_sym := w.table.sym(variant)
|
|
||||||
w.as_cast_type_names[idx] = variant_sym.name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user