From c10095b2d2a30a8f162ff07e7a4c537ce6630494 Mon Sep 17 00:00:00 2001 From: tserg <8017125+tserg@users.noreply.github.com> Date: Mon, 13 Nov 2023 22:51:34 +0800 Subject: [PATCH] fix for semantics --- vyper/semantics/analysis/local.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/vyper/semantics/analysis/local.py b/vyper/semantics/analysis/local.py index 3b50c33485..f7b11210e2 100644 --- a/vyper/semantics/analysis/local.py +++ b/vyper/semantics/analysis/local.py @@ -387,7 +387,8 @@ def visit_For(self, node): validate_expected_type(args[0], IntegerT.any()) type_list = get_common_types(*args) - if not isinstance(args[0], vy_ast.Constant): + arg0_val = args[0]._metadata.get("folded_value") + if not isinstance(arg0_val, vy_ast.Constant): # range(x, x + CONSTANT) if not isinstance(args[1], vy_ast.BinOp) or not isinstance( args[1].op, vy_ast.Add @@ -409,10 +410,11 @@ def visit_For(self, node): ) else: # range(CONSTANT, CONSTANT) - if not isinstance(args[1], vy_ast.Int): + arg1_val = args[1]._metadata.get("folded_value") + if not isinstance(arg1_val, vy_ast.Int): raise InvalidType("Value must be a literal integer", args[1]) validate_expected_type(args[1], IntegerT.any()) - if args[0].value >= args[1].value: + if arg0_val.value >= arg1_val.value: raise StructureException("Second value must be > first value", args[1]) if not type_list: @@ -420,7 +422,8 @@ def visit_For(self, node): else: # iteration over a variable or literal list - if isinstance(node.iter, vy_ast.List) and len(node.iter.elements) == 0: + iter_val = node.iter._metadata.get("folded_value") + if isinstance(iter_val, vy_ast.List) and len(iter_val.elements) == 0: raise StructureException("For loop must have at least 1 iteration", node.iter) type_list = [