diff --git a/tp2/Pystan/config/__pycache__/constant_propagation.cpython-313.pyc b/tp2/Pystan/config/__pycache__/constant_propagation.cpython-313.pyc index 14878ed97db2b6e13e5dc65d134c108406e75287..a61415a92a179c1a85bc691bebbbb3ca0b0af623 100644 Binary files a/tp2/Pystan/config/__pycache__/constant_propagation.cpython-313.pyc and b/tp2/Pystan/config/__pycache__/constant_propagation.cpython-313.pyc differ diff --git a/tp2/Pystan/config/constant_propagation.py b/tp2/Pystan/config/constant_propagation.py index 35561ab91ed45a7e895e1d64aec11c0e28e472d7..32d28f8c6b6eb2d8aba8637ae851ac7a7851794d 100644 --- a/tp2/Pystan/config/constant_propagation.py +++ b/tp2/Pystan/config/constant_propagation.py @@ -100,15 +100,16 @@ class Constant_propagation(Transfer[state]): if s1 is None: return s2 elif s2 is None: return s1 else: + s=s1.copy() for var in s2: if not(var in s1): - s1[var]=s2[var] + s[var]=s2[var] elif s1[var] == abstract_value(None): - s1[var]=s2[var] + s[var]=s2[var] elif s2[var] == abstract_value(None): pass else: - s1[var]=abstract_value(None) + s[var]=abstract_value(None) return s1 @@ -124,29 +125,33 @@ class Constant_propagation(Transfer[state]): return included def tr_skip(self,s: state) -> state: - return s + return s.copy() def tr_set(self, s: state, v: str, e: ArithExpr) -> state: - s[v]=eval_aexp(s, e) - return s + s1 = s.copy() + s1[v]=eval_aexp(s, e) + return s1 def tr_test(self,s: state,c: BoolExpr) -> state: if eval_bexp(s, c) is False: - return {} + return None else: - return s + if s: + return s.copy() + else: + return s def tr_err(self,s: state,e: Expr) -> state: if isinstance(e,ArithExpr): if eval_aexp(s ,e) is not None: - return s - else: return None + else: + return s.copy() else: if isinstance(e,BoolExpr): if eval_bexp(s ,e) is not None: - return s - else: return None + else: + return s.copy() else: assert False