Skip to content
Snippets Groups Projects
Commit d2e2ea4b authored by Norodom Thomas's avatar Norodom Thomas
Browse files

fin de constant propag sans raffinement

parent ed04fcbf
No related branches found
No related tags found
No related merge requests found
No preview for this file type
...@@ -100,15 +100,16 @@ class Constant_propagation(Transfer[state]): ...@@ -100,15 +100,16 @@ class Constant_propagation(Transfer[state]):
if s1 is None: return s2 if s1 is None: return s2
elif s2 is None: return s1 elif s2 is None: return s1
else: else:
s=s1.copy()
for var in s2: for var in s2:
if not(var in s1): if not(var in s1):
s1[var]=s2[var] s[var]=s2[var]
elif s1[var] == abstract_value(None): elif s1[var] == abstract_value(None):
s1[var]=s2[var] s[var]=s2[var]
elif s2[var] == abstract_value(None): elif s2[var] == abstract_value(None):
pass pass
else: else:
s1[var]=abstract_value(None) s[var]=abstract_value(None)
return s1 return s1
...@@ -124,29 +125,33 @@ class Constant_propagation(Transfer[state]): ...@@ -124,29 +125,33 @@ class Constant_propagation(Transfer[state]):
return included return included
def tr_skip(self,s: state) -> state: def tr_skip(self,s: state) -> state:
return s return s.copy()
def tr_set(self, s: state, v: str, e: ArithExpr) -> state: def tr_set(self, s: state, v: str, e: ArithExpr) -> state:
s[v]=eval_aexp(s, e) s1 = s.copy()
return s s1[v]=eval_aexp(s, e)
return s1
def tr_test(self,s: state,c: BoolExpr) -> state: def tr_test(self,s: state,c: BoolExpr) -> state:
if eval_bexp(s, c) is False: if eval_bexp(s, c) is False:
return {} return None
else: else:
return s if s:
return s.copy()
else:
return s
def tr_err(self,s: state,e: Expr) -> state: def tr_err(self,s: state,e: Expr) -> state:
if isinstance(e,ArithExpr): if isinstance(e,ArithExpr):
if eval_aexp(s ,e) is not None: if eval_aexp(s ,e) is not None:
return s
else:
return None return None
else:
return s.copy()
else: else:
if isinstance(e,BoolExpr): if isinstance(e,BoolExpr):
if eval_bexp(s ,e) is not None: if eval_bexp(s ,e) is not None:
return s
else:
return None return None
else:
return s.copy()
else: assert False else: assert False
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment