2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2008-2008 - DIGITEO - Antoine ELIAS
4 * Copyright (C) 2010-2010 - DIGITEO - Bruno JOFRET
6 * This file must be used under the terms of the CeCILL.
7 * This source file is licensed as described in the file COPYING, which
8 * you should have received as part of this distribution. The terms
9 * are also available at
10 * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
14 // This code is separated in run_AssignExp.hxx
15 // but will be inlined in runvisitor.hxx
16 // using #include with RunVisitorT class declaration.
18 // If you need additionnal headers, please add it in runvisitor.hxx
20 void visitprivate(const OpExp &e)
28 /*getting what to assign*/
29 e.left_get().accept(execMeL);
30 /*getting what to assign*/
31 e.right_get().accept(execMeR);
32 GenericType::RealType TypeL = execMeL.result_get()->getType();
33 GenericType::RealType TypeR = execMeR.result_get()->getType();
35 if(TypeL == GenericType::RealImplicitList)
37 ImplicitList* pIL = execMeL.result_get()->getAsImplicitList();
40 InternalType *pIT = pIL->extract_matrix();
41 execMeL.result_set(pIT);
42 TypeL = pIT->getType();
46 if(TypeR == GenericType::RealImplicitList)
48 ImplicitList* pIL = execMeR.result_get()->getAsImplicitList();
51 InternalType *pIT = pIL->extract_matrix();
52 execMeR.result_set(pIT);
53 TypeR = pIT->getType();
57 InternalType *pResult = NULL;
62 pResult = GenericPlus(execMeL.result_get(), execMeR.result_get());
65 // We did not have any algorithm matching, so we try to call OverLoad
66 pResult = callOverload(e.oper_get(), &execMeL, &execMeR);
74 pResult = GenericMinus(execMeL.result_get(), execMeR.result_get());
77 // We did not have any algorithm matching, so we try to call OverLoad
78 pResult = callOverload(e.oper_get(), &execMeL, &execMeR);
86 pResult = GenericTimes(execMeL.result_get(), execMeR.result_get());
89 // We did not have any algorithm matching, so we try to call OverLoad
90 pResult = callOverload(e.oper_get(), &execMeL, &execMeR);
98 pResult = GenericRDivide(execMeL.result_get(), execMeR.result_get());
101 // We did not have any algorithm matching, so we try to call OverLoad
102 pResult = callOverload(e.oper_get(), &execMeL, &execMeR);
108 case OpExp::dottimes :
110 pResult = GenericDotTimes(execMeL.result_get(), execMeR.result_get());
113 // We did not have any algorithm matching, so we try to call OverLoad
114 pResult = callOverload(e.oper_get(), &execMeL, &execMeR);
121 if(TypeL == GenericType::RealDouble && execMeL.result_get()->getAsDouble()->size_get() == 0)
123 if(TypeR != InternalType::RealDouble)
125 result_set(new Bool(false));
130 if(TypeR == GenericType::RealDouble && execMeR.result_get()->getAsDouble()->size_get() == 0)
132 if(TypeL != InternalType::RealDouble)
134 result_set(new Bool(false));
139 if(TypeL == GenericType::RealDouble && TypeR == GenericType::RealDouble)
141 Double *pL = execMeL.result_get()->getAsDouble();
142 Double *pR = execMeR.result_get()->getAsDouble();
144 if(pR->size_get() == 0 && pL->size_get() == 0)
146 pResult = new Bool(true);
148 else if(pL->size_get() == 0 || pR->size_get() == 0)
150 pResult = new Bool(false);
152 else if(pR->size_get() == 1)
154 pResult = new Bool(pL->rows_get(), pL->cols_get());
155 double dblRef = pR->real_get(0,0);
156 for(int i = 0 ; i < pL->rows_get() ; i++)
158 for(int j = 0 ; j < pL->cols_get() ; j++)
160 pResult->getAsBool()->bool_set(i, j, pL->real_get(i, j) == dblRef);
164 else if(pL->size_get() == 1)
166 pResult = new Bool(pR->rows_get(), pR->cols_get());
167 double dblRef = pL->real_get(0,0);
168 for(int i = 0 ; i < pR->rows_get() ; i++)
170 for(int j = 0 ; j < pR->cols_get() ; j++)
172 pResult->getAsBool()->bool_set(i, j, dblRef == pR->real_get(i, j));
176 else if(pR->rows_get() == pL->rows_get() && pR->cols_get() == pL->cols_get())
178 pResult = new Bool(pR->rows_get(), pR->cols_get());
179 for(int i = 0 ; i < pR->rows_get() ; i++)
181 for(int j = 0 ; j < pR->cols_get() ; j++)
183 pResult->getAsBool()->bool_set(i, j, pL->real_get(i, j) == pR->real_get(i, j));
189 pResult = new Bool(false);
194 else if(TypeL == GenericType::RealString && TypeR == GenericType::RealString)
196 String *pL = execMeL.result_get()->getAsString();
197 String *pR = execMeR.result_get()->getAsString();
199 if(pL->size_get() == 1)
201 pResult = new Bool(pR->rows_get(), pR->cols_get());
203 wchar_t* pstL = pL->string_get()[0];
204 for(int i = 0 ; i < pR->rows_get() ; i++)
206 for(int j = 0 ; j < pR->cols_get() ; j++)
208 wchar_t* pstR = pR->string_get(i,j);
209 if(wcscmp(pstL, pstR) == 0)
211 pResult->getAsBool()->bool_set(i,j,true);
215 pResult->getAsBool()->bool_set(i,j,false);
220 else if(pR->size_get() == 1)
222 pResult = new Bool(pL->rows_get(), pL->cols_get());
224 wchar_t* pstR = pR->string_get()[0];
225 for(int i = 0 ; i < pL->rows_get() ; i++)
227 for(int j = 0 ; j < pL->cols_get() ; j++)
229 wchar_t* pstL = pL->string_get(i,j);
230 if(wcscmp(pstL, pstR) == 0)
232 pResult->getAsBool()->bool_set(i,j,true);
236 pResult->getAsBool()->bool_set(i,j,false);
241 else if(pL->rows_get() == pR->rows_get() && pL->cols_get() == pR->cols_get())
243 pResult = new Bool(pL->rows_get(), pL->cols_get());
245 for(int i = 0 ; i < pL->rows_get() ; i++)
247 for(int j = 0 ; j < pL->cols_get() ; j++)
249 wchar_t* pstR = pR->string_get(i,j);
250 wchar_t* pstL = pL->string_get(i,j);
251 if(wcscmp(pstL, pstR) == 0)
253 pResult->getAsBool()->bool_set(i,j,true);
257 pResult->getAsBool()->bool_set(i,j,false);
264 pResult = new Bool(false);
268 else if(TypeL == GenericType::RealBool && TypeR == GenericType::RealBool)
270 Bool *pL = execMeL.result_get()->getAsBool();
271 Bool *pR = execMeR.result_get()->getAsBool();
273 if(pL->size_get() == 1)
275 pResult = new Bool(pR->rows_get(), pR->cols_get());
277 int iL = pL->bool_get()[0];
278 for(int i = 0 ; i < pR->rows_get() ; i++)
280 for(int j = 0 ; j < pR->cols_get() ; j++)
282 if(iL == pR->bool_get(i,j))
284 pResult->getAsBool()->bool_set(i,j,true);
288 pResult->getAsBool()->bool_set(i,j,false);
293 else if(pR->size_get() == 1)
295 pResult = new Bool(pL->rows_get(), pL->cols_get());
297 int iR = pR->bool_get()[0];
298 for(int i = 0 ; i < pL->rows_get() ; i++)
300 for(int j = 0 ; j < pL->cols_get() ; j++)
302 if(iR == pL->bool_get(i,j))
304 pResult->getAsBool()->bool_set(i,j,true);
308 pResult->getAsBool()->bool_set(i,j,false);
313 else if(pL->rows_get() == pR->rows_get() && pL->cols_get() == pR->cols_get())
315 pResult = new Bool(pL->rows_get(), pL->cols_get());
317 for(int i = 0 ; i < pL->rows_get() ; i++)
319 for(int j = 0 ; j < pL->cols_get() ; j++)
321 if(pL->bool_get(i,j) == pR->bool_get(i,j))
323 pResult->getAsBool()->bool_set(i,j,true);
327 pResult->getAsBool()->bool_set(i,j,false);
334 pResult = new Bool(false);
340 result_set(callOverload(e.oper_get(), &execMeL, &execMeR));
346 if(TypeL == GenericType::RealDouble && execMeL.result_get()->getAsDouble()->size_get() == 0)
348 if(TypeR != InternalType::RealDouble)
350 result_set(new Bool(true));
355 if(TypeR == GenericType::RealDouble && execMeR.result_get()->getAsDouble()->size_get() == 0)
357 if(TypeL != InternalType::RealDouble)
359 result_set(new Bool(true));
364 if(TypeL == GenericType::RealDouble && TypeR == GenericType::RealDouble)
366 Double *pL = execMeL.result_get()->getAsDouble();
367 Double *pR = execMeR.result_get()->getAsDouble();
369 if(pR->size_get() == 0 && pL->size_get() == 0)
371 pResult = new Bool(false);
373 else if(pL->size_get() == 0 || pR->size_get() == 0)
375 pResult = new Bool(true);
377 else if(pR->size_get() == 1)
379 pResult = new Bool(pL->rows_get(), pL->cols_get());
380 double dblRef = pR->real_get(0,0);
381 for(int i = 0 ; i < pL->rows_get() ; i++)
383 for(int j = 0 ; j < pL->cols_get() ; j++)
385 pResult->getAsBool()->bool_set(i, j, pL->real_get(i, j) != dblRef);
389 else if(pL->size_get() == 1)
391 pResult = new Bool(pR->rows_get(), pR->cols_get());
392 double dblRef = pL->real_get(0,0);
393 for(int i = 0 ; i < pR->rows_get() ; i++)
395 for(int j = 0 ; j < pR->cols_get() ; j++)
397 pResult->getAsBool()->bool_set(i, j, dblRef != pR->real_get(i, j));
401 else if(pR->rows_get() == pL->rows_get() && pR->cols_get() == pL->cols_get())
403 pResult = new Bool(pR->rows_get(), pR->cols_get());
404 for(int i = 0 ; i < pR->rows_get() ; i++)
406 for(int j = 0 ; j < pR->cols_get() ; j++)
408 pResult->getAsBool()->bool_set(i, j, pL->real_get(i, j) != pR->real_get(i, j));
414 pResult = new Bool(false);
419 else if(TypeL == GenericType::RealString && TypeR == GenericType::RealString)
421 String *pL = execMeL.result_get()->getAsString();
422 String *pR = execMeR.result_get()->getAsString();
424 if(pL->size_get() == 1)
426 pResult = new Bool(pR->rows_get(), pR->cols_get());
428 wchar_t* pstL = pL->string_get()[0];
429 for(int i = 0 ; i < pR->rows_get() ; i++)
431 for(int j = 0 ; j < pR->cols_get() ; j++)
433 wchar_t* pstR = pR->string_get(i,j);
434 if(wcscmp(pstL, pstR) == 0)
436 pResult->getAsBool()->bool_set(i,j,false);
440 pResult->getAsBool()->bool_set(i,j,true);
445 else if(pR->size_get() == 1)
447 pResult = new Bool(pL->rows_get(), pL->cols_get());
449 wchar_t* pstR = pR->string_get()[0];
450 for(int i = 0 ; i < pL->rows_get() ; i++)
452 for(int j = 0 ; j < pL->cols_get() ; j++)
454 wchar_t* pstL = pL->string_get(i,j);
455 if(wcscmp(pstL, pstR) == 0)
457 pResult->getAsBool()->bool_set(i,j,false);
461 pResult->getAsBool()->bool_set(i,j,true);
466 else if(pL->rows_get() == pR->rows_get() && pL->cols_get() == pR->cols_get())
468 pResult = new Bool(pL->rows_get(), pL->cols_get());
470 for(int i = 0 ; i < pL->rows_get() ; i++)
472 for(int j = 0 ; j < pL->cols_get() ; j++)
474 wchar_t* pstR = pR->string_get(i,j);
475 wchar_t* pstL = pL->string_get(i,j);
476 if(wcscmp(pstL, pstR) == 0)
478 pResult->getAsBool()->bool_set(i,j,false);
482 pResult->getAsBool()->bool_set(i,j,true);
489 pResult = new Bool(true);
495 result_set(callOverload(e.oper_get(), &execMeL, &execMeR));
501 if(TypeL == GenericType::RealDouble && TypeR == GenericType::RealDouble)
503 Double *pL = execMeL.result_get()->getAsDouble();
504 Double *pR = execMeR.result_get()->getAsDouble();
506 if(pR->size_get() == 1)
508 pResult = new Bool(pL->rows_get(), pL->cols_get());
509 double dblRef = pR->real_get(0,0);
510 for(int i = 0 ; i < pL->rows_get() ; i++)
512 for(int j = 0 ; j < pL->cols_get() ; j++)
514 pResult->getAsBool()->bool_set(i, j, pL->real_get(i, j) < dblRef);
518 else if(pL->size_get() == 1)
520 pResult = new Bool(pR->rows_get(), pR->cols_get());
521 double dblRef = pL->real_get(0,0);
522 for(int i = 0 ; i < pR->rows_get() ; i++)
524 for(int j = 0 ; j < pR->cols_get() ; j++)
526 pResult->getAsBool()->bool_set(i, j, dblRef < pR->real_get(i, j));
530 else if(pR->rows_get() == pL->rows_get() && pR->cols_get() == pL->cols_get())
532 pResult = new Bool(pR->rows_get(), pR->cols_get());
533 for(int i = 0 ; i < pR->rows_get() ; i++)
535 for(int j = 0 ; j < pR->cols_get() ; j++)
537 pResult->getAsBool()->bool_set(i, j, pL->real_get(i, j) < pR->real_get(i, j));
543 pResult = new Bool(false);
550 result_set(callOverload(e.oper_get(), &execMeL, &execMeR));
556 if(TypeL == GenericType::RealDouble && TypeR == GenericType::RealDouble)
558 Double *pL = execMeL.result_get()->getAsDouble();
559 Double *pR = execMeR.result_get()->getAsDouble();
561 if(pR->size_get() == 1)
563 pResult = new Bool(pL->rows_get(), pL->cols_get());
564 double dblRef = pR->real_get(0,0);
565 for(int i = 0 ; i < pL->rows_get() ; i++)
567 for(int j = 0 ; j < pL->cols_get() ; j++)
569 pResult->getAsBool()->bool_set(i, j, pL->real_get(i, j) <= dblRef);
573 else if(pL->size_get() == 1)
575 pResult = new Bool(pR->rows_get(), pR->cols_get());
576 double dblRef = pL->real_get(0,0);
577 for(int i = 0 ; i < pR->rows_get() ; i++)
579 for(int j = 0 ; j < pR->cols_get() ; j++)
581 pResult->getAsBool()->bool_set(i, j, dblRef <= pR->real_get(i, j));
585 else if(pR->rows_get() == pL->rows_get() && pR->cols_get() == pL->cols_get())
587 pResult = new Bool(pR->rows_get(), pR->cols_get());
588 for(int i = 0 ; i < pR->rows_get() ; i++)
590 for(int j = 0 ; j < pR->cols_get() ; j++)
592 pResult->getAsBool()->bool_set(i, j, pL->real_get(i, j) <= pR->real_get(i, j));
598 pResult = new Bool(false);
605 result_set(callOverload(e.oper_get(), &execMeL, &execMeR));
611 if(TypeL == GenericType::RealDouble && TypeR == GenericType::RealDouble)
613 Double *pL = execMeL.result_get()->getAsDouble();
614 Double *pR = execMeR.result_get()->getAsDouble();
616 if(pR->size_get() == 1)
618 pResult = new Bool(pL->rows_get(), pL->cols_get());
619 double dblRef = pR->real_get(0,0);
620 for(int i = 0 ; i < pL->rows_get() ; i++)
622 for(int j = 0 ; j < pL->cols_get() ; j++)
624 pResult->getAsBool()->bool_set(i, j, pL->real_get(i, j) > dblRef);
628 else if(pL->size_get() == 1)
630 pResult = new Bool(pR->rows_get(), pR->cols_get());
631 double dblRef = pL->real_get(0,0);
632 for(int i = 0 ; i < pR->rows_get() ; i++)
634 for(int j = 0 ; j < pR->cols_get() ; j++)
636 pResult->getAsBool()->bool_set(i, j, dblRef > pR->real_get(i, j));
640 else if(pR->rows_get() == pL->rows_get() && pR->cols_get() == pL->cols_get())
642 pResult = new Bool(pR->rows_get(), pR->cols_get());
644 for(int i = 0 ; i < pR->rows_get() ; i++)
646 for(int j = 0 ; j < pR->cols_get() ; j++)
648 pResult->getAsBool()->bool_set(i, j, pL->real_get(i, j) > pR->real_get(i, j));
654 pResult = new Bool(false);
661 result_set(callOverload(e.oper_get(), &execMeL, &execMeR));
667 if(TypeL == GenericType::RealDouble && TypeR == GenericType::RealDouble)
669 Double *pL = execMeL.result_get()->getAsDouble();
670 Double *pR = execMeR.result_get()->getAsDouble();
672 if(pR->size_get() == 1)
674 pResult = new Bool(pL->rows_get(), pL->cols_get());
675 double dblRef = pR->real_get(0,0);
676 for(int i = 0 ; i < pL->rows_get() ; i++)
678 for(int j = 0 ; j < pL->cols_get() ; j++)
680 pResult->getAsBool()->bool_set(i, j, pL->real_get(i, j) >= dblRef);
684 else if(pL->size_get() == 1)
686 pResult = new Bool(pR->rows_get(), pR->cols_get());
687 double dblRef = pL->real_get(0,0);
688 for(int i = 0 ; i < pR->rows_get() ; i++)
690 for(int j = 0 ; j < pR->cols_get() ; j++)
692 pResult->getAsBool()->bool_set(i, j, dblRef >= pR->real_get(i, j));
696 else if(pR->rows_get() == pL->rows_get() && pR->cols_get() == pL->cols_get())
698 pResult = new Bool(pR->rows_get(), pR->cols_get());
699 for(int i = 0 ; i < pR->rows_get() ; i++)
701 for(int j = 0 ; j < pR->cols_get() ; j++)
703 pResult->getAsBool()->bool_set(i, j, pL->real_get(i, j) >= pR->real_get(i, j));
709 pResult = new Bool(false);
716 result_set(callOverload(e.oper_get(), &execMeL, &execMeR));
722 if(TypeL == GenericType::RealDouble && TypeR == GenericType::RealDouble)
724 Double *pL = execMeL.result_get()->getAsDouble();
725 Double *pR = execMeR.result_get()->getAsDouble();
727 int iResult = PowerDoubleByDouble(pL, pR, (Double**)&pResult);
730 std::wostringstream os;
731 os << _W("Inconsistent row/column dimensions.\n");
732 //os << ((Location)e.right_get().location_get()).location_string_get() << std::endl;
733 throw ScilabError(os.str(), 999, e.right_get().location_get());
737 else if(TypeL == GenericType::RealPoly && TypeR == GenericType::RealDouble)
739 MatrixPoly *pL = execMeL.result_get()->getAsPoly();
740 Double *pR = execMeR.result_get()->getAsDouble();
742 int iResult = PowerPolyByDouble(pL, pR, (MatrixPoly**)&pResult);
745 std::wostringstream os;
746 os << _W("Inconsistent row/column dimensions.\n");
747 //os << ((Location)e.right_get().location_get()).location_string_get() << std::endl;
748 throw ScilabError(os.str(), 999, e.right_get().location_get());
754 result_set(callOverload(e.oper_get(), &execMeL, &execMeR));
759 // By default call overload if we do not know this operator ...
760 result_set(callOverload(e.oper_get(), &execMeL, &execMeR));
764 catch(ScilabError error)
766 error.SetErrorLocation(e.location_get());
771 void visitprivate(const LogicalOpExp &e)
776 e.left_get().accept(execMeL);
777 GenericType::RealType TypeL = execMeL.result_get()->getType();
780 if(TypeL == GenericType::RealBool)
782 pL = execMeL.result_get()->getAsBool();
786 //TODO YaSp : Overloading %*_oper_*
787 e.right_get().accept(execMeR);
790 case LogicalOpExp::logicalShortCutOr :
791 case LogicalOpExp::logicalOr :
792 result_set(callOverload(e.oper_get(), &execMeL, &execMeR));
794 case LogicalOpExp::logicalShortCutAnd :
795 case LogicalOpExp::logicalAnd :
796 result_set(callOverload(e.oper_get(), &execMeL, &execMeR));
802 InternalType *pResult = NULL;
805 case LogicalOpExp::logicalShortCutOr :
807 Bool *pL = execMeL.result_get()->getAsBool();
808 int *piL = pL->bool_get();
810 // Check if all values are true
811 // true || <something is always true>
812 for(int i = 0 ; i < pL->size_get() ; i++)
822 {//we don't need to look at ohers exp
823 pResult = new Bool(true);
827 // DO NOT break here, falling into normal Or if this can not be shotcutted.
829 case LogicalOpExp::logicalOr :
831 e.right_get().accept(execMeR);
832 GenericType::RealType TypeR = execMeR.result_get()->getType();
834 if(TypeR == GenericType::RealBool)
836 Bool *pR = execMeR.result_get()->getAsBool();
837 int* piR = pR->bool_get();
838 int* piL = pL->bool_get();
842 if(pR->size_get() == 1)
844 pResult = new Bool(pL->rows_get(), pL->cols_get(), &piB);
845 for(int i = 0 ; i < pL->size_get(); i++)
847 piB[i] = (piR[0] == 1) || (piL[i] == 1);
854 if(pL->size_get() == 1)
856 pResult = new Bool(pR->rows_get(), pR->cols_get(), &piB);
857 for(int i = 0 ; i < pR->size_get(); i++)
859 piB[i] = (piR[i] == 1) || (piL[0] == 1);
865 // M | N (generic case)
866 if(pR->rows_get() == pL->rows_get() && pR->cols_get() == pL->cols_get())
869 int* piR = pR->bool_get();
870 int* piL = pL->bool_get();
872 pResult = new Bool(pR->rows_get(), pR->cols_get(), &piB);
873 for(int i = 0 ; i < pL->size_get(); i++)
875 piB[i] = (piR[i] == 1) || (piL[i] == 1);
881 std::wostringstream os;
882 os << _W("Inconsistent row/column dimensions.\n");
883 //os << ((Location)e.right_get().location_get()).location_string_get() << std::endl;
884 throw ScilabError(os.str(), 999, e.right_get().location_get());
889 result_set(callOverload(e.oper_get(), &execMeL, &execMeR));
893 case LogicalOpExp::logicalShortCutAnd :
895 Bool *pL = execMeL.result_get()->getAsBool();
896 int *piL = pL->bool_get();
897 // Check if one value is false
898 // false && <something> is always false
899 for(int i = 0 ; i < pL->size_get() ; i++)
903 pResult = new Bool(false);
908 // DO NOT break here, falling into normal And if this can not be shotcutted.
910 case LogicalOpExp::logicalAnd :
912 e.right_get().accept(execMeR);
913 GenericType::RealType TypeR = execMeR.result_get()->getType();
915 if(TypeR == GenericType::RealBool)
917 Bool *pR = execMeR.result_get()->getAsBool();
918 int* piR = pR->bool_get();
919 int* piL = pL->bool_get();
923 if(pR->size_get() == 1)
925 pResult = new Bool(pL->rows_get(), pL->cols_get(), &piB);
926 for(int i = 0 ; i < pL->size_get(); i++)
928 piB[i] = (piR[0] == 1) && (piL[i] == 1);
935 if(pL->size_get() == 1)
937 pResult = new Bool(pR->rows_get(), pR->cols_get(), &piB);
938 for(int i = 0 ; i < pR->size_get(); i++)
940 piB[i] = (piR[i] == 1) && (piL[0] == 1);
946 // M & N (generic case)
947 if(pR->rows_get() == pL->rows_get() && pR->cols_get() == pL->cols_get())
950 int* piR = pR->bool_get();
951 int* piL = pL->bool_get();
953 pResult = new Bool(pR->rows_get(), pR->cols_get(), &piB);
954 for(int i = 0 ; i < pL->size_get(); i++)
956 piB[i] = (piR[i] == 1) && (piL[i] == 1);
962 std::wostringstream os;
963 os << _W("Inconsistent row/column dimensions.\n");
964 //os << ((Location)e.right_get().location_get()).location_string_get() << std::endl;
965 throw ScilabError(os.str(), 999, e.right_get().location_get());
970 result_set(callOverload(e.oper_get(), &execMeL, &execMeR));
977 InternalType* callOverload(OpExp::Oper _oper, T *_paramL, T *_paramR)
980 types::typed_list in;
981 types::typed_list out;
982 _paramL->result_get()->IncreaseRef();
983 _paramR->result_get()->IncreaseRef();
984 in.push_back(_paramL->result_get());
985 in.push_back(_paramR->result_get());
987 Overload::generateNameAndCall(Overload::getNameFromOper(_oper), in, 1, out, &execMe);
990 out[0]->IncreaseRef();
992 _paramL->result_get()->DecreaseRef();
993 _paramR->result_get()->DecreaseRef();