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
Branches master
No related tags found
No related merge requests found
No preview for this file type
......@@ -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
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