From 563ffe41fc1261d3ddfa61dca44fb2bd07207b7b Mon Sep 17 00:00:00 2001 From: Charles Cooper Date: Thu, 21 Sep 2023 11:35:55 -0400 Subject: [PATCH] wip - fix irnode.from_list --- vyper/codegen/ir_node.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/vyper/codegen/ir_node.py b/vyper/codegen/ir_node.py index ad4aa764373..b70fa7c5199 100644 --- a/vyper/codegen/ir_node.py +++ b/vyper/codegen/ir_node.py @@ -1,4 +1,5 @@ import contextlib +import copy import re from enum import Enum, auto from functools import cached_property @@ -181,12 +182,14 @@ def __init__( source_pos: Optional[Tuple[int, int]] = None, annotation: Optional[str] = None, error_msg: Optional[str] = None, + encoding: Encoding = None, mutable: bool = True, add_gas_estimate: int = 0, - encoding: Encoding = Encoding.VYPER, ): if args is None: args = [] + if encoding is None: + encoding = Encoding.VYPER self.value = value self.args = args @@ -596,26 +599,30 @@ def from_list( error_msg: Optional[str] = None, mutable: bool = True, add_gas_estimate: int = 0, - encoding: Encoding = Encoding.VYPER, + encoding: Encoding = None, ) -> "IRnode": if isinstance(typ, str): raise CompilerPanic(f"Expected type, not string: {typ}") if isinstance(obj, IRnode): + ret = copy.copy(obj) # note: this modify-and-returnclause is a little weird since # the input gets modified. CC 20191121. if typ is not None: obj.typ = typ - if obj.source_pos is None: + if source_pos is not None: obj.source_pos = source_pos - if obj.location is None: + if location is not None: obj.location = location - if obj.encoding is None: + if encoding is not None: obj.encoding = encoding - if obj.error_msg is None: + if error_msg is not None: obj.error_msg = error_msg + if add_gas_estimate != 0: + obj.add_gas_estimate = add_gas_estimate return obj + elif not isinstance(obj, list): return cls( obj,