From 0c0f4ae57ed044b96f922fb66d324df171256e1d Mon Sep 17 00:00:00 2001 From: tserg <8017125+tserg@users.noreply.github.com> Date: Mon, 15 Jan 2024 14:45:51 +0800 Subject: [PATCH] apply bts suggestion --- vyper/semantics/analysis/utils.py | 3 --- vyper/semantics/types/base.py | 5 +++++ vyper/semantics/types/module.py | 2 +- vyper/semantics/types/user.py | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/vyper/semantics/analysis/utils.py b/vyper/semantics/analysis/utils.py index 563ded8e23..3e818fa246 100644 --- a/vyper/semantics/analysis/utils.py +++ b/vyper/semantics/analysis/utils.py @@ -648,9 +648,6 @@ def check_modifiability(node: vy_ast.VyperNode, modifiability: Modifiability) -> call_type = get_exact_type_from_node(node.func) # structs and interfaces - if isinstance(call_type, TYPE_T): - call_type = call_type.typedef - if hasattr(call_type, "check_modifiability_for_call"): return call_type.check_modifiability_for_call(node, modifiability) diff --git a/vyper/semantics/types/base.py b/vyper/semantics/types/base.py index 14949f693f..b15eca8ab2 100644 --- a/vyper/semantics/types/base.py +++ b/vyper/semantics/types/base.py @@ -334,6 +334,11 @@ def __init__(self, typedef): def __repr__(self): return f"type({self.typedef})" + def check_modifiability_for_call(self, node, modifiability): + if hasattr(self.typedef, "_ctor_modifiability_for_call"): + return self.typedef._ctor_modifiability_for_call(node, modifiability) + raise StructureException("Value is not callable", node) + # dispatch into ctor if it's called def fetch_call_return(self, node): if hasattr(self.typedef, "_ctor_call_return"): diff --git a/vyper/semantics/types/module.py b/vyper/semantics/types/module.py index 0cf85e9b9f..4063b8e162 100644 --- a/vyper/semantics/types/module.py +++ b/vyper/semantics/types/module.py @@ -84,7 +84,7 @@ def _ctor_arg_types(self, node): def _ctor_kwarg_types(self, node): return {} - def check_modifiability_for_call(self, node: vy_ast.Call, modifiability: Modifiability) -> bool: + def _ctor_modifiability_for_call(self, node: vy_ast.Call, modifiability: Modifiability) -> bool: return check_modifiability(node.args[0], modifiability) # TODO x.validate_implements(other) diff --git a/vyper/semantics/types/user.py b/vyper/semantics/types/user.py index 9d6ac8c5f1..92a455e3d8 100644 --- a/vyper/semantics/types/user.py +++ b/vyper/semantics/types/user.py @@ -421,5 +421,5 @@ def _ctor_call_return(self, node: vy_ast.Call) -> "StructT": return self - def check_modifiability_for_call(self, node: vy_ast.Call, modifiability: Modifiability) -> bool: + def _ctor_modifiability_for_call(self, node: vy_ast.Call, modifiability: Modifiability) -> bool: return all(check_modifiability(v, modifiability) for v in node.args[0].values)