markused: remove @[markused] from option and result fns (#24900)

This commit is contained in:
Felipe Pena 2025-07-15 12:37:48 -03:00 committed by GitHub
parent a11b69e2bc
commit 0d8cc4588f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 83 additions and 59 deletions

View File

@ -21,7 +21,6 @@ struct _option {
// derived _option_xxx types // derived _option_xxx types
} }
@[markused]
fn _option_none(data voidptr, mut option _option, size int) { fn _option_none(data voidptr, mut option _option, size int) {
unsafe { unsafe {
*option = _option{ *option = _option{
@ -32,7 +31,6 @@ fn _option_none(data voidptr, mut option _option, size int) {
} }
} }
@[markused]
fn _option_ok(data voidptr, mut option _option, size int) { fn _option_ok(data voidptr, mut option _option, size int) {
unsafe { unsafe {
*option = _option{} *option = _option{}
@ -41,7 +39,6 @@ fn _option_ok(data voidptr, mut option _option, size int) {
} }
} }
@[markused]
fn _option_clone(current &_option, mut option _option, size int) { fn _option_clone(current &_option, mut option _option, size int) {
unsafe { unsafe {
*option = _option{ *option = _option{

View File

@ -17,7 +17,6 @@ struct _result {
// derived Result_xxx types // derived Result_xxx types
} }
@[markused]
fn _result_ok(data voidptr, mut res _result, size int) { fn _result_ok(data voidptr, mut res _result, size int) {
unsafe { unsafe {
*res = _result{} *res = _result{}

View File

@ -31,7 +31,7 @@ pub mut:
type_name bool // var.type_name() type_name bool // var.type_name()
map_update bool // {...foo} map_update bool // {...foo}
interpolation bool // '${foo} ${bar}' interpolation bool // '${foo} ${bar}'
option_or_result bool // has panic call print_options bool // print option type
waiter bool // has thread waiter waiter bool // has thread waiter
print_types map[int]bool // print() idx types print_types map[int]bool // print() idx types
used_fns map[string]bool // filled in by markused used_fns map[string]bool // filled in by markused

View File

@ -1420,8 +1420,6 @@ fn (mut c Checker) check_expr_option_or_result_call(expr ast.Expr, ret_type ast.
} }
fn (mut c Checker) check_or_expr(node ast.OrExpr, ret_type ast.Type, expr_return_type ast.Type, expr ast.Expr) { fn (mut c Checker) check_or_expr(node ast.OrExpr, ret_type ast.Type, expr_return_type ast.Type, expr ast.Expr) {
c.markused_option_or_result(!c.is_builtin_mod && node.kind != .absent && c.mod != 'strings')
if node.kind == .propagate_option { if node.kind == .propagate_option {
if c.table.cur_fn != unsafe { nil } && !c.table.cur_fn.return_type.has_flag(.option) if c.table.cur_fn != unsafe { nil } && !c.table.cur_fn.return_type.has_flag(.option)
&& !c.table.cur_fn.is_main && !c.table.cur_fn.is_test && !c.inside_const { && !c.table.cur_fn.is_main && !c.table.cur_fn.is_test && !c.inside_const {
@ -1823,8 +1821,6 @@ fn (mut c Checker) selector_expr(mut node ast.SelectorExpr) ast.Type {
c.check_or_expr(node.or_block, unwrapped_typ, c.expected_or_type, node) c.check_or_expr(node.or_block, unwrapped_typ, c.expected_or_type, node)
c.expected_or_type = ast.void_type c.expected_or_type = ast.void_type
} }
c.markused_option_or_result(node.or_block.kind != .absent
&& !c.table.used_features.option_or_result)
return field.typ return field.typ
} }
if mut method := c.table.sym(c.unwrap_generic(typ)).find_method_with_generic_parent(field_name) { if mut method := c.table.sym(c.unwrap_generic(typ)).find_method_with_generic_parent(field_name) {

View File

@ -771,8 +771,6 @@ fn (mut c Checker) call_expr(mut node ast.CallExpr) ast.Type {
c.inside_or_block_value = true c.inside_or_block_value = true
c.check_or_expr(node.or_block, typ, c.expected_or_type, node) c.check_or_expr(node.or_block, typ, c.expected_or_type, node)
c.inside_or_block_value = old_inside_or_block_value c.inside_or_block_value = old_inside_or_block_value
} else if node.or_block.kind == .propagate_option || node.or_block.kind == .propagate_result {
c.markused_option_or_result(!c.is_builtin_mod && c.mod != 'strings')
} }
c.expected_or_type = old_expected_or_type c.expected_or_type = old_expected_or_type
c.markused_call_expr(left_type, mut node) c.markused_call_expr(left_type, mut node)

View File

@ -37,9 +37,7 @@ fn (mut c Checker) postfix_expr(mut node ast.PostfixExpr) ast.Type {
c.error('invalid operation: ${node.op.str()} (non-numeric type `${typ_str}`)', c.error('invalid operation: ${node.op.str()} (non-numeric type `${typ_str}`)',
node.pos) node.pos)
} else { } else {
if node.op == .question { if node.op != .question {
c.table.used_features.option_or_result = true
} else {
node.auto_locked, _ = c.fail_if_immutable(mut node.expr) node.auto_locked, _ = c.fail_if_immutable(mut node.expr)
} }
} }

View File

@ -1,14 +1,9 @@
// Copyright (c) 2019-2024 Felipe Pena. All rights reserved.
// Use of this source code is governed by an MIT license that can be found in the LICENSE file.
module checker module checker
import v.ast import v.ast
@[inline]
fn (mut c Checker) markused_option_or_result(check bool) {
if check {
c.table.used_features.option_or_result = true
}
}
@[inline] @[inline]
fn (mut c Checker) markused_comptime_call(check bool, key string) { fn (mut c Checker) markused_comptime_call(check bool, key string) {
if check { if check {
@ -135,7 +130,7 @@ fn (mut c Checker) markused_fn_call(mut node ast.CallExpr) {
c.table.used_features.auto_str = true c.table.used_features.auto_str = true
} else { } else {
if node.args[0].typ.has_option_or_result() { if node.args[0].typ.has_option_or_result() {
c.table.used_features.option_or_result = true c.table.used_features.print_options = true
} }
c.table.used_features.print_types[node.args[0].typ.idx()] = true c.table.used_features.print_types[node.args[0].typ.idx()] = true
if !c.table.used_features.auto_str_ptr && node.args[0].expr is ast.Ident { if !c.table.used_features.auto_str_ptr && node.args[0].expr is ast.Ident {
@ -181,6 +176,9 @@ fn (mut c Checker) markused_string_inter_lit(mut node ast.StringInterLiteral, ft
if ftyp.is_ptr() { if ftyp.is_ptr() {
c.table.used_features.auto_str_ptr = true c.table.used_features.auto_str_ptr = true
} }
if ftyp.has_option_or_result() {
c.table.used_features.print_options = true
}
c.table.used_features.interpolation = true c.table.used_features.interpolation = true
} }

View File

@ -184,7 +184,7 @@ pub fn mark_used(mut table ast.Table, mut pref_ pref.Preferences, ast_files []&a
core_fns << '__new_array_with_array_default' core_fns << '__new_array_with_array_default'
core_fns << ref_array_idx_str + '.set' core_fns << ref_array_idx_str + '.set'
} }
if table.used_features.option_or_result { if table.used_features.print_options {
include_panic_deps = true include_panic_deps = true
core_fns << '_option_ok' core_fns << '_option_ok'
core_fns << '_result_ok' core_fns << '_result_ok'
@ -386,10 +386,6 @@ pub fn mark_used(mut table ast.Table, mut pref_ pref.Preferences, ast_files []&a
all_fn_root_names << 'panic_debug' all_fn_root_names << 'panic_debug'
all_fn_root_names << 'tos3' all_fn_root_names << 'tos3'
} }
if table.used_features.option_or_result {
all_fn_root_names << 'panic_option_not_set'
all_fn_root_names << 'panic_result_not_set'
}
if pref_.is_test { if pref_.is_test {
all_fn_root_names << 'main.cb_assertion_ok' all_fn_root_names << 'main.cb_assertion_ok'
all_fn_root_names << 'main.cb_assertion_failed' all_fn_root_names << 'main.cb_assertion_failed'
@ -534,9 +530,23 @@ pub fn mark_used(mut table ast.Table, mut pref_ pref.Preferences, ast_files []&a
} }
} }
if walker.used_panic > 0 {
walker.mark_fn_as_used('panic_option_not_set')
walker.mark_fn_as_used('panic_result_not_set')
}
if walker.used_none > 0 || table.used_features.auto_str { if walker.used_none > 0 || table.used_features.auto_str {
walker.mark_fn_as_used('_option_none') walker.mark_fn_as_used('_option_none')
} }
if walker.used_option > 0 {
walker.mark_fn_as_used('_option_clone')
walker.mark_fn_as_used('_option_ok')
}
if walker.used_result > 0 {
walker.mark_fn_as_used('_result_ok')
}
if (walker.used_option + walker.used_result + walker.used_none) > 0 {
walker.mark_const_as_used('none__')
}
if trace_skip_unused_fn_names { if trace_skip_unused_fn_names {
for key, _ in walker.used_fns { for key, _ in walker.used_fns {

View File

@ -17,7 +17,10 @@ pub mut:
used_structs map[string]bool used_structs map[string]bool
used_fields map[string]bool used_fields map[string]bool
used_ifaces map[string]bool used_ifaces map[string]bool
used_none int used_none int // _option_none
used_option int // _option_ok
used_result int // _result_ok
used_panic int // option/result propagation
n_asserts int n_asserts int
pref &pref.Preferences = unsafe { nil } pref &pref.Preferences = unsafe { nil }
mut: mut:
@ -343,6 +346,9 @@ fn (mut w Walker) expr(node_ ast.Expr) {
ast.CastExpr { ast.CastExpr {
w.expr(node.expr) w.expr(node.expr)
w.expr(node.arg) w.expr(node.arg)
if node.typ.has_flag(.option) {
w.used_option++
}
} }
ast.ChanInit { ast.ChanInit {
w.expr(node.cap_expr) w.expr(node.cap_expr)
@ -609,6 +615,12 @@ pub fn (mut w Walker) a_struct_info(sname string, info ast.Struct) {
} }
if ifield.typ != 0 { if ifield.typ != 0 {
fsym := w.table.sym(ifield.typ) fsym := w.table.sym(ifield.typ)
if ifield.typ.has_flag(.option) {
w.used_option++
if !ifield.has_default_expr {
w.used_none++
}
}
match fsym.info { match fsym.info {
ast.Struct { ast.Struct {
w.a_struct_info(fsym.name, fsym.info) w.a_struct_info(fsym.name, fsym.info)
@ -660,6 +672,11 @@ pub fn (mut w Walker) fn_decl(mut node ast.FnDecl) {
if node.no_body { if node.no_body {
return return
} }
if node.return_type.has_flag(.option) {
w.used_option++
} else if node.return_type.has_flag(.result) {
w.used_result++
}
w.mark_fn_as_used(fkey) w.mark_fn_as_used(fkey)
w.stmts(node.stmts) w.stmts(node.stmts)
w.defer_stmts(node.defer_stmts) w.defer_stmts(node.defer_stmts)
@ -754,6 +771,11 @@ pub fn (mut w Walker) call_expr(mut node ast.CallExpr) {
if !node.is_method || receiver_typ == stmt.receiver.typ { if !node.is_method || receiver_typ == stmt.receiver.typ {
w.stmts(stmt.stmts) w.stmts(stmt.stmts)
} }
if node.return_type.has_flag(.option) {
w.used_option++
} else if node.return_type.has_flag(.result) {
w.used_result++
}
} }
} }
@ -784,6 +806,12 @@ pub fn (mut w Walker) const_fields(cfields []ast.ConstField) {
pub fn (mut w Walker) or_block(node ast.OrExpr) { pub fn (mut w Walker) or_block(node ast.OrExpr) {
if node.kind == .block { if node.kind == .block {
w.stmts(node.stmts) w.stmts(node.stmts)
} else if node.kind == .propagate_option {
w.used_option++
w.used_panic++
} else if node.kind == .propagate_result {
w.used_result++
w.used_panic++
} }
} }