@@ -142,6 +142,107 @@ def __invert__(self):
142142
143143 return expr (ExprUnaryModel (UnaryExprType .Not , lhs ))
144144
145+ # Reverse operators (for when constant is on the left side)
146+ def __radd__ (self , lhs ):
147+ to_expr (lhs )
148+ lhs_e = pop_expr ()
149+ # The current expression is on the stack
150+ rhs_e = pop_expr ()
151+ e = ExprBinModel (lhs_e , BinExprType .Add , rhs_e )
152+ if in_srcinfo_mode ():
153+ e .srcinfo = SourceInfo .mk (2 )
154+ return expr (e )
155+
156+ def __rsub__ (self , lhs ):
157+ to_expr (lhs )
158+ lhs_e = pop_expr ()
159+ rhs_e = pop_expr ()
160+ e = ExprBinModel (lhs_e , BinExprType .Sub , rhs_e )
161+ if in_srcinfo_mode ():
162+ e .srcinfo = SourceInfo .mk (2 )
163+ return expr (e )
164+
165+ def __rmul__ (self , lhs ):
166+ to_expr (lhs )
167+ lhs_e = pop_expr ()
168+ rhs_e = pop_expr ()
169+ e = ExprBinModel (lhs_e , BinExprType .Mul , rhs_e )
170+ if in_srcinfo_mode ():
171+ e .srcinfo = SourceInfo .mk (2 )
172+ return expr (e )
173+
174+ def __rtruediv__ (self , lhs ):
175+ to_expr (lhs )
176+ lhs_e = pop_expr ()
177+ rhs_e = pop_expr ()
178+ e = ExprBinModel (lhs_e , BinExprType .Div , rhs_e )
179+ if in_srcinfo_mode ():
180+ e .srcinfo = SourceInfo .mk (2 )
181+ return expr (e )
182+
183+ def __rfloordiv__ (self , lhs ):
184+ to_expr (lhs )
185+ lhs_e = pop_expr ()
186+ rhs_e = pop_expr ()
187+ e = ExprBinModel (lhs_e , BinExprType .Div , rhs_e )
188+ if in_srcinfo_mode ():
189+ e .srcinfo = SourceInfo .mk (2 )
190+ return expr (e )
191+
192+ def __rmod__ (self , lhs ):
193+ to_expr (lhs )
194+ lhs_e = pop_expr ()
195+ rhs_e = pop_expr ()
196+ e = ExprBinModel (lhs_e , BinExprType .Mod , rhs_e )
197+ if in_srcinfo_mode ():
198+ e .srcinfo = SourceInfo .mk (2 )
199+ return expr (e )
200+
201+ def __rand__ (self , lhs ):
202+ to_expr (lhs )
203+ lhs_e = pop_expr ()
204+ rhs_e = pop_expr ()
205+ e = ExprBinModel (lhs_e , BinExprType .And , rhs_e )
206+ if in_srcinfo_mode ():
207+ e .srcinfo = SourceInfo .mk (2 )
208+ return expr (e )
209+
210+ def __ror__ (self , lhs ):
211+ to_expr (lhs )
212+ lhs_e = pop_expr ()
213+ rhs_e = pop_expr ()
214+ e = ExprBinModel (lhs_e , BinExprType .Or , rhs_e )
215+ if in_srcinfo_mode ():
216+ e .srcinfo = SourceInfo .mk (2 )
217+ return expr (e )
218+
219+ def __rxor__ (self , lhs ):
220+ to_expr (lhs )
221+ lhs_e = pop_expr ()
222+ rhs_e = pop_expr ()
223+ e = ExprBinModel (lhs_e , BinExprType .Xor , rhs_e )
224+ if in_srcinfo_mode ():
225+ e .srcinfo = SourceInfo .mk (2 )
226+ return expr (e )
227+
228+ def __rlshift__ (self , lhs ):
229+ to_expr (lhs )
230+ lhs_e = pop_expr ()
231+ rhs_e = pop_expr ()
232+ e = ExprBinModel (lhs_e , BinExprType .Sll , rhs_e )
233+ if in_srcinfo_mode ():
234+ e .srcinfo = SourceInfo .mk (2 )
235+ return expr (e )
236+
237+ def __rrshift__ (self , lhs ):
238+ to_expr (lhs )
239+ lhs_e = pop_expr ()
240+ rhs_e = pop_expr ()
241+ e = ExprBinModel (lhs_e , BinExprType .Srl , rhs_e )
242+ if in_srcinfo_mode ():
243+ e .srcinfo = SourceInfo .mk (2 )
244+ return expr (e )
245+
145246 def inside (self , rhs ):
146247 lhs_e = pop_expr ()
147248
@@ -575,6 +676,117 @@ def __invert__(self):
575676 lhs = pop_expr ()
576677 return expr (ExprUnaryModel (UnaryExprType .Not , lhs ))
577678
679+ # Reverse operators (for when constant is on the left side)
680+ def __radd__ (self , lhs ):
681+ to_expr (lhs )
682+ lhs_e = pop_expr ()
683+ self .to_expr ()
684+ rhs_e = pop_expr ()
685+ e = ExprBinModel (lhs_e , BinExprType .Add , rhs_e )
686+ if in_srcinfo_mode ():
687+ e .srcinfo = SourceInfo .mk (2 )
688+ return expr (e )
689+
690+ def __rsub__ (self , lhs ):
691+ to_expr (lhs )
692+ lhs_e = pop_expr ()
693+ self .to_expr ()
694+ rhs_e = pop_expr ()
695+ e = ExprBinModel (lhs_e , BinExprType .Sub , rhs_e )
696+ if in_srcinfo_mode ():
697+ e .srcinfo = SourceInfo .mk (2 )
698+ return expr (e )
699+
700+ def __rmul__ (self , lhs ):
701+ to_expr (lhs )
702+ lhs_e = pop_expr ()
703+ self .to_expr ()
704+ rhs_e = pop_expr ()
705+ e = ExprBinModel (lhs_e , BinExprType .Mul , rhs_e )
706+ if in_srcinfo_mode ():
707+ e .srcinfo = SourceInfo .mk (2 )
708+ return expr (e )
709+
710+ def __rtruediv__ (self , lhs ):
711+ to_expr (lhs )
712+ lhs_e = pop_expr ()
713+ self .to_expr ()
714+ rhs_e = pop_expr ()
715+ e = ExprBinModel (lhs_e , BinExprType .Div , rhs_e )
716+ if in_srcinfo_mode ():
717+ e .srcinfo = SourceInfo .mk (2 )
718+ return expr (e )
719+
720+ def __rfloordiv__ (self , lhs ):
721+ to_expr (lhs )
722+ lhs_e = pop_expr ()
723+ self .to_expr ()
724+ rhs_e = pop_expr ()
725+ e = ExprBinModel (lhs_e , BinExprType .Div , rhs_e )
726+ if in_srcinfo_mode ():
727+ e .srcinfo = SourceInfo .mk (2 )
728+ return expr (e )
729+
730+ def __rmod__ (self , lhs ):
731+ to_expr (lhs )
732+ lhs_e = pop_expr ()
733+ self .to_expr ()
734+ rhs_e = pop_expr ()
735+ e = ExprBinModel (lhs_e , BinExprType .Mod , rhs_e )
736+ if in_srcinfo_mode ():
737+ e .srcinfo = SourceInfo .mk (2 )
738+ return expr (e )
739+
740+ def __rand__ (self , lhs ):
741+ to_expr (lhs )
742+ lhs_e = pop_expr ()
743+ self .to_expr ()
744+ rhs_e = pop_expr ()
745+ e = ExprBinModel (lhs_e , BinExprType .And , rhs_e )
746+ if in_srcinfo_mode ():
747+ e .srcinfo = SourceInfo .mk (2 )
748+ return expr (e )
749+
750+ def __ror__ (self , lhs ):
751+ to_expr (lhs )
752+ lhs_e = pop_expr ()
753+ self .to_expr ()
754+ rhs_e = pop_expr ()
755+ e = ExprBinModel (lhs_e , BinExprType .Or , rhs_e )
756+ if in_srcinfo_mode ():
757+ e .srcinfo = SourceInfo .mk (2 )
758+ return expr (e )
759+
760+ def __rxor__ (self , lhs ):
761+ to_expr (lhs )
762+ lhs_e = pop_expr ()
763+ self .to_expr ()
764+ rhs_e = pop_expr ()
765+ e = ExprBinModel (lhs_e , BinExprType .Xor , rhs_e )
766+ if in_srcinfo_mode ():
767+ e .srcinfo = SourceInfo .mk (2 )
768+ return expr (e )
769+
770+ def __rlshift__ (self , lhs ):
771+ to_expr (lhs )
772+ lhs_e = pop_expr ()
773+ self .to_expr ()
774+ rhs_e = pop_expr ()
775+ e = ExprBinModel (lhs_e , BinExprType .Sll , rhs_e )
776+ if in_srcinfo_mode ():
777+ e .srcinfo = SourceInfo .mk (2 )
778+ return expr (e )
779+
780+ def __rrshift__ (self , lhs ):
781+ to_expr (lhs )
782+ lhs_e = pop_expr ()
783+ self .to_expr ()
784+ rhs_e = pop_expr ()
785+ e = ExprBinModel (lhs_e , BinExprType .Srl , rhs_e )
786+ if in_srcinfo_mode ():
787+ e .srcinfo = SourceInfo .mk (2 )
788+ return expr (e )
789+
578790 def inside (self , rhs ):
579791 self .to_expr ()
580792 lhs_e = pop_expr ()
0 commit comments