def replace_user_defined_constants(vyper_module: vy_ast.Module) -> int: """ Find user-defined constant assignments, and replace references to the constants with their literal values. Arguments --------- vyper_module : Module Top-level Vyper AST node. Returns ------- int Number of nodes that were replaced. """ changed_nodes = 0 for node in vyper_module.get_children(vy_ast.AnnAssign): if not isinstance(node.target, vy_ast.Name): # left-hand-side of assignment is not a variable continue if node.get("annotation.func.id") != "constant": # annotation is not wrapped in `constant(...)` continue changed_nodes += replace_constant(vyper_module, node.target.id, node.value, False) return changed_nodes
def replace_user_defined_constants(vyper_module: vy_ast.Module) -> int: """ Find user-defined constant assignments, and replace references to the constants with their literal values. Arguments --------- vyper_module : Module Top-level Vyper AST node. Returns ------- int Number of nodes that were replaced. """ changed_nodes = 0 for node in vyper_module.get_children(vy_ast.AnnAssign): if not isinstance(node.target, vy_ast.Name): # left-hand-side of assignment is not a variable continue if node.get("annotation.func.id") != "constant": # annotation is not wrapped in `constant(...)` continue # Extract type definition from propagated annotation constant_annotation = node.get("annotation.args")[0] try: type_ = ( get_type_from_annotation(constant_annotation, DataLocation.UNSET) if constant_annotation else None ) except UnknownType: # handle user-defined types e.g. structs - it's OK to not # propagate the type annotation here because user-defined # types can be unambiguously inferred at typechecking time type_ = None changed_nodes += replace_constant( vyper_module, node.target.id, node.value, False, type_=type_ ) return changed_nodes
def replace_user_defined_constants(vyper_ast_node: vy_ast.Module) -> None: """ Find user-defined constant assignments, and replace references to the constants with their literal values. Arguments --------- vyper_ast_node : Module Top-level Vyper AST node. """ for node in vyper_ast_node.get_children(vy_ast.AnnAssign): if not isinstance(node.target, vy_ast.Name): # left-hand-side of assignment is not a variable continue if node.get('annotation.func.id') != "constant": # annotation is not wrapped in `constant(...)` continue replace_constant(vyper_ast_node, node.target.id, node.value)
def replace_user_defined_constants(vyper_module: vy_ast.Module) -> int: """ Find user-defined constant assignments, and replace references to the constants with their literal values. Arguments --------- vyper_module : Module Top-level Vyper AST node. Returns ------- int Number of nodes that were replaced. """ changed_nodes = 0 for node in vyper_module.get_children(vy_ast.AnnAssign): if not isinstance(node.target, vy_ast.Name): # left-hand-side of assignment is not a variable continue if node.get("annotation.func.id") != "constant": # annotation is not wrapped in `constant(...)` continue # Extract type definition from propagated annotation constant_annotation = node.get("annotation.args")[0] type_ = (get_type_from_annotation(constant_annotation, DataLocation.UNSET) if constant_annotation else None) changed_nodes += replace_constant(vyper_module, node.target.id, node.value, False, type_=type_) return changed_nodes