From 65ab902705efccd95be048a7badeca6558000355 Mon Sep 17 00:00:00 2001 From: tserg <8017125+tserg@users.noreply.github.com> Date: Sun, 29 Oct 2023 11:27:12 +0800 Subject: [PATCH] fix constants dict persistence bug --- vyper/semantics/analysis/module.py | 4 +++- vyper/semantics/namespace.py | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/vyper/semantics/analysis/module.py b/vyper/semantics/analysis/module.py index 53f11ccc03..ddf0e958c3 100644 --- a/vyper/semantics/analysis/module.py +++ b/vyper/semantics/analysis/module.py @@ -71,9 +71,11 @@ def _add_constants_to_namespace(module_nodes: list[vy_ast.VyperNode], ns: Namesp continue val = prefold(c.value) - ns.add_constant(name, val) + # note that if a constant is redefined, its value will be overwritten, + # but it is okay because the syntax error is handled downstream if val is not None: + ns.add_constant(name, val) derived_nodes += 1 const_var_decls.remove(c) diff --git a/vyper/semantics/namespace.py b/vyper/semantics/namespace.py index e22c1c417c..8683e61e01 100644 --- a/vyper/semantics/namespace.py +++ b/vyper/semantics/namespace.py @@ -77,6 +77,8 @@ def enter_scope(self): if len(self._scopes) == 1: # add mutable vars (`self`) to the initial scope self.update(environment.get_mutable_vars()) + # reset constants + self._constants = {} return self