@@ -24,71 +24,68 @@ def if_else(
2424 except Exception :
2525 cond_validation = Top ()
2626
27- errors_before_then = len (interp_ ._validation_errors )
27+ errors_before_then_keys = set (interp_ ._validation_errors .keys ())
28+
2829 with interp_ .new_frame (stmt , has_parent_access = True ) as then_frame :
2930 interp_ .frame_call_region (then_frame , stmt , stmt .then_body , cond_validation )
3031 frame .set_values (then_frame .entries .keys (), then_frame .entries .values ())
31- errors_after_then = len (interp_ ._validation_errors )
32+ then_keys = set (interp_ ._validation_errors .keys ()) - errors_before_then_keys
33+ then_errors = interp_ .get_validation_errors (keys = then_keys )
3234
33- then_had_errors = errors_after_then > errors_before_then
34- then_errors = interp_ ._validation_errors [errors_before_then :errors_after_then ]
3535 then_state = (
3636 Must (violations = frozenset (err .args [0 ] for err in then_errors ))
37- if then_had_errors
37+ if bool ( then_keys )
3838 else Bottom ()
3939 )
4040
4141 if stmt .else_body :
42- errors_before_else = len (interp_ ._validation_errors )
42+ errors_before_else_keys = set (interp_ ._validation_errors .keys ())
43+
4344 with interp_ .new_frame (stmt , has_parent_access = True ) as else_frame :
4445 interp_ .frame_call_region (
4546 else_frame , stmt , stmt .else_body , cond_validation
4647 )
4748 frame .set_values (else_frame .entries .keys (), else_frame .entries .values ())
48- errors_after_else = len (interp_ ._validation_errors )
49+ else_keys = set (interp_ ._validation_errors .keys ()) - errors_before_else_keys
50+ else_errors = interp_ .get_validation_errors (keys = else_keys )
4951
50- else_had_errors = errors_after_else > errors_before_else
51- else_errors = interp_ ._validation_errors [
52- errors_before_else :errors_after_else
53- ]
5452 else_state = (
5553 Must (violations = frozenset (err .args [0 ] for err in else_errors ))
56- if else_had_errors
54+ if bool ( else_keys )
5755 else Bottom ()
5856 )
5957
6058 merged = then_state .join (else_state )
6159
6260 if isinstance (merged , May ):
63- interp_ . _validation_errors = interp_ . _validation_errors [
64- : errors_before_then
65- ]
61+ branch_keys = then_keys | else_keys
62+ for k in branch_keys :
63+ interp_ . _validation_errors . pop ( k , None )
6664
67- for err in then_errors + else_errors :
65+ for err in then_errors :
6866 if isinstance (err , QubitValidationError ):
6967 potential_err = PotentialQubitValidationError (
70- err .node ,
71- err .gate_name ,
72- (
73- ", when condition is true"
74- if err in then_errors
75- else ", when condition is false"
76- ),
68+ err .node , err .gate_name , ", when condition is true"
7769 )
78- interp_ ._validation_errors .append (potential_err )
70+ interp_ .add_validation_error (err .node , potential_err )
71+
72+ for err in else_errors :
73+ if isinstance (err , QubitValidationError ):
74+ potential_err = PotentialQubitValidationError (
75+ err .node , err .gate_name , ", when condition is false"
76+ )
77+ interp_ .add_validation_error (err .node , potential_err )
7978 else :
8079 merged = then_state .join (Bottom ())
8180
8281 if isinstance (merged , May ):
83- interp_ ._validation_errors = interp_ ._validation_errors [
84- :errors_before_then
85- ]
86-
82+ for k in then_keys :
83+ interp_ ._validation_errors .pop (k , None )
8784 for err in then_errors :
8885 if isinstance (err , QubitValidationError ):
8986 potential_err = PotentialQubitValidationError (
9087 err .node , err .gate_name , ", when condition is true"
9188 )
92- interp_ ._validation_errors . append ( potential_err )
89+ interp_ .add_validation_error ( err . node , potential_err )
9390
9491 return (merged ,)
0 commit comments