From d2e2ea4b42aed69995f975f04c26ff29292346bf Mon Sep 17 00:00:00 2001
From: Thomas Norodom <thomas.norodom@student-cs.fr>
Date: Thu, 27 Mar 2025 19:24:56 +0100
Subject: [PATCH] fin de constant propag sans raffinement

---
 .../constant_propagation.cpython-313.pyc      | Bin 7512 -> 7814 bytes
 tp2/Pystan/config/constant_propagation.py     |  29 ++++++++++--------
 2 files changed, 17 insertions(+), 12 deletions(-)

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
GIT binary patch
delta 1313
zcmb7EOH30{6n!)8@N4J*?Q~{n`B+-9#$S{I0Tm&EK!_Tu#hR)J4HBaAnUV^LNzoWB
zX(B^j2t$O}g^Mm+=+2cpUAQo*EEtg(OwgriLX9rHZ`zSa(CA&9^X{E@@4LT@+I0Vf
zd8@d%2!Xs__&mgL&&?05l!}+F<x$E<5&Q4r&8Z^>KW#ysT?maB1Fg+)v%dhLfQy0e
zfx242(<N}S5<O_hIiYjNn~T{L*u}%6M<5>2tkVt`8Ui2RJ!J0LZiGyz8u=*~lFA^4
zhh8&=M#rWkGf^1H3M5@3aGAhG0?hznl4>;(iG$M`zQwtz3B1hl=QqqHvqLjO@!?qO
z2VRs7DqoJLRC~o@gWQTcRF0p!@Wh;)SgEdC;p+Zme{U5w?VhA-#eSH0;UC;9DuiF!
zobbpeTc{B#L!?n#PJnsH|8MQrYonw-e1&hbk!FR90j814mdr+GBJs%>i=XlC=&64Q
zH)7nLQNZFQselC9$Q=Df{V`hV16?`>p!ZSh9&{W@2MLh2?&u@-2=2XiiM;{<(knL4
z_RjRi12KBt%qvuUG)B)bDq9*W#KS@*<-;+d(hplQ1TEMHE=2lam!KiP_9$y5sPCgo
z8@Pu))8U~d*h-}3>M>-;t)+P#zY!XaK7emw7r-=HH(BMLc#AUl&QzmX_%CdU$_opT
zxd@(=*$rNh3nT$9;&H)7y~QWR1Km(UkgSO&fik^O1G#j4`TDnQ-cB%>TYV^n4i?}Z
zQS2n~O#0pbjmM)wD!bu%_@n56>EQ38-!DVFa1Q_}kdynD3Rg|el*zfy3QB1_nqv2>
zydA333*BTzWzSOQD(g<M?sbbp>A@{2%OTZXwPANWu3xNw)F_|D^X0xHS0U({abR@x
zh7^LMbdA6`fnfp?ftvtp#`eiENeW}$?vI+8GTEO-K+2#-NhU+Iw6l<LDBd&zO27r6
z<V1#0+D0*g!lV&U!kr<M&NF~Nn1B*B8YMj%y?|(7Oc&)dBDnyR5Hv~-W<WED=`#G)
peuvZYgda?Hf3wL(@I6N@bsIl*EO1>ERi!j0+80~CA#&D6{}TjL|1JOk

delta 1011
zcmZ`&K}Zx)7=CYe#@5E&Rd>dj*&TJ+)oi8GNHH`qq)kPNQkJ$f#MQ+JNquXP1gVE&
zWg#XW)d&>}MJ#lxQ<qNBrJH$Z5`%^4KHzrh(*I`M^pHR7_x=BS@Bjbz{qy!=ui5R}
z@p=y<upf7R%}k5$e2+x@hQ1Jk%dP+#Jd4mRck*NpMrhK5P%_HH$z-4f@Ip27SUd*1
zj*X(uUB5f|pNv?!!hsnssCx#XQK;NyH|a-6Kw*@?O^DP&lNcsGMjR1=$T)-R40-@E
z8~}YQwT(}Mvw}>)yVh-_^d-~lU%Qrf8R}12)!n8Xq)VpOus)#o(*aYGA76RxD=cn?
zJ2s_`gVw)`N>K~51bV*iGfvSeIf65^O`Zxe$!_@VQ~*5LyDL%Y7rDRsKCEUA0l<a)
z)maaXD9yuR`{>>rl7UXp&MaBWgzp!83gWWhtKgGi2FC#$!5@_qp;Z>K0j;2IZ=Jr7
zo5<od&goa9HsB+)U2SNB7VW6XE*^7TJP*Shf|Qus8KzzPCVi!L^*&(b6sMdZ>X&nU
zM*6D|H3L$1s2C8lgM@8PG1X<`z_F+BltzQcu%BKE%Hz<GDVf>#MiQ<uHYeN4nvd?r
zlYV$jmAe5<qP(B_S4T!^>^uaX{t0SS3yrkqAR!Y60PTXLPd=~wCPX%b$hKcGYI4gP
z{#H{~bWc$Z(U&2$LemF}p+@>CG}1l+Nn2cMZf=&Oz$Ix0^9*h<SYR*<u*Jpi&J#jt
zTuUr_`C2_;As{1dQ-LqB$O>2Tn$c+?pgbG^DlC>5S#_ANF?b6B<(o^4tO}R21eA|j
z2&fRV=>t@Q$ntQ!#BzZ0icN)d2_m;-RZ*>eRkH61e<?)R192{Uo4&7a!T0D^{WIwt
S#*N15e0;s{H)6j1$^HVj!OepJ

diff --git a/tp2/Pystan/config/constant_propagation.py b/tp2/Pystan/config/constant_propagation.py
index 35561ab..32d28f8 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
         
-- 
GitLab