@@ -22,6 +22,7 @@ import (
2222
2323// EvaluateMultiplication will evaluate multiplication operation over two value
2424func EvaluateMultiplication (left , right reflect.Value ) (reflect.Value , error ) {
25+ left , right = GetValueElem (left ), GetValueElem (right )
2526 switch left .Kind () {
2627 case reflect .Int , reflect .Int8 , reflect .Int16 , reflect .Int32 , reflect .Int64 :
2728 lv := left .Int ()
@@ -75,6 +76,7 @@ func EvaluateMultiplication(left, right reflect.Value) (reflect.Value, error) {
7576
7677// EvaluateDivision will evaluate division operation over two value
7778func EvaluateDivision (left , right reflect.Value ) (reflect.Value , error ) {
79+ left , right = GetValueElem (left ), GetValueElem (right )
7880 switch left .Kind () {
7981 case reflect .Int , reflect .Int8 , reflect .Int16 , reflect .Int32 , reflect .Int64 :
8082 lv := left .Int ()
@@ -128,6 +130,7 @@ func EvaluateDivision(left, right reflect.Value) (reflect.Value, error) {
128130
129131// EvaluateModulo will evaluate modulo operation over two value
130132func EvaluateModulo (left , right reflect.Value ) (reflect.Value , error ) {
133+ left , right = GetValueElem (left ), GetValueElem (right )
131134 switch left .Kind () {
132135 case reflect .Int , reflect .Int8 , reflect .Int16 , reflect .Int32 , reflect .Int64 :
133136 lv := left .Int ()
@@ -160,6 +163,7 @@ func EvaluateModulo(left, right reflect.Value) (reflect.Value, error) {
160163
161164// EvaluateAddition will evaluate addition operation over two value
162165func EvaluateAddition (left , right reflect.Value ) (reflect.Value , error ) {
166+ left , right = GetValueElem (left ), GetValueElem (right )
163167 switch left .Kind () {
164168 case reflect .String :
165169 lv := left .String ()
@@ -247,6 +251,7 @@ func EvaluateAddition(left, right reflect.Value) (reflect.Value, error) {
247251
248252// EvaluateSubtraction will evaluate subtraction operation over two value
249253func EvaluateSubtraction (left , right reflect.Value ) (reflect.Value , error ) {
254+ left , right = GetValueElem (left ), GetValueElem (right )
250255 switch left .Kind () {
251256 case reflect .Int , reflect .Int8 , reflect .Int16 , reflect .Int32 , reflect .Int64 :
252257 lv := left .Int ()
@@ -300,6 +305,7 @@ func EvaluateSubtraction(left, right reflect.Value) (reflect.Value, error) {
300305
301306// EvaluateBitAnd will evaluate Bitwise And operation over two value
302307func EvaluateBitAnd (left , right reflect.Value ) (reflect.Value , error ) {
308+ left , right = GetValueElem (left ), GetValueElem (right )
303309 switch left .Kind () {
304310 case reflect .Int , reflect .Int8 , reflect .Int16 , reflect .Int32 , reflect .Int64 :
305311 lv := left .Int ()
@@ -332,6 +338,7 @@ func EvaluateBitAnd(left, right reflect.Value) (reflect.Value, error) {
332338
333339// EvaluateBitOr will evaluate Bitwise Or operation over two value
334340func EvaluateBitOr (left , right reflect.Value ) (reflect.Value , error ) {
341+ left , right = GetValueElem (left ), GetValueElem (right )
335342 switch left .Kind () {
336343 case reflect .Int , reflect .Int8 , reflect .Int16 , reflect .Int32 , reflect .Int64 :
337344 lv := left .Int ()
@@ -364,6 +371,7 @@ func EvaluateBitOr(left, right reflect.Value) (reflect.Value, error) {
364371
365372// EvaluateGreaterThan will evaluate GreaterThan operation over two value
366373func EvaluateGreaterThan (left , right reflect.Value ) (reflect.Value , error ) {
374+ left , right = GetValueElem (left ), GetValueElem (right )
367375 switch left .Kind () {
368376 case reflect .String :
369377 lv := left .String ()
@@ -431,6 +439,7 @@ func EvaluateGreaterThan(left, right reflect.Value) (reflect.Value, error) {
431439
432440// EvaluateLesserThan will evaluate LesserThan operation over two value
433441func EvaluateLesserThan (left , right reflect.Value ) (reflect.Value , error ) {
442+ left , right = GetValueElem (left ), GetValueElem (right )
434443 switch left .Kind () {
435444 case reflect .String :
436445 lv := left .String ()
@@ -498,6 +507,7 @@ func EvaluateLesserThan(left, right reflect.Value) (reflect.Value, error) {
498507
499508// EvaluateGreaterThanEqual will evaluate GreaterThanEqual operation over two value
500509func EvaluateGreaterThanEqual (left , right reflect.Value ) (reflect.Value , error ) {
510+ left , right = GetValueElem (left ), GetValueElem (right )
501511 switch left .Kind () {
502512 case reflect .String :
503513 lv := left .String ()
@@ -565,6 +575,7 @@ func EvaluateGreaterThanEqual(left, right reflect.Value) (reflect.Value, error)
565575
566576// EvaluateLesserThanEqual will evaluate LesserThanEqual operation over two value
567577func EvaluateLesserThanEqual (left , right reflect.Value ) (reflect.Value , error ) {
578+ left , right = GetValueElem (left ), GetValueElem (right )
568579 switch left .Kind () {
569580 case reflect .String :
570581 lv := left .String ()
@@ -632,6 +643,7 @@ func EvaluateLesserThanEqual(left, right reflect.Value) (reflect.Value, error) {
632643
633644// EvaluateEqual will evaluate Equal operation over two value
634645func EvaluateEqual (left , right reflect.Value ) (reflect.Value , error ) {
646+ left , right = GetValueElem (left ), GetValueElem (right )
635647 switch left .Kind () {
636648 case reflect .String :
637649 lv := left .String ()
@@ -704,6 +716,7 @@ func EvaluateEqual(left, right reflect.Value) (reflect.Value, error) {
704716
705717// EvaluateNotEqual will evaluate NotEqual operation over two value
706718func EvaluateNotEqual (left , right reflect.Value ) (reflect.Value , error ) {
719+ left , right = GetValueElem (left ), GetValueElem (right )
707720 switch left .Kind () {
708721 case reflect .String :
709722 lv := left .String ()
@@ -776,6 +789,7 @@ func EvaluateNotEqual(left, right reflect.Value) (reflect.Value, error) {
776789
777790// EvaluateLogicAnd will evaluate LogicalAnd operation over two value
778791func EvaluateLogicAnd (left , right reflect.Value ) (reflect.Value , error ) {
792+ left , right = GetValueElem (left ), GetValueElem (right )
779793 if left .Kind () == reflect .Bool && right .Kind () == reflect .Bool {
780794 lv := left .Bool ()
781795 rv := right .Bool ()
@@ -786,6 +800,7 @@ func EvaluateLogicAnd(left, right reflect.Value) (reflect.Value, error) {
786800
787801// EvaluateLogicOr will evaluate LogicalOr operation over two value
788802func EvaluateLogicOr (left , right reflect.Value ) (reflect.Value , error ) {
803+ left , right = GetValueElem (left ), GetValueElem (right )
789804 if left .Kind () == reflect .Bool && right .Kind () == reflect .Bool {
790805 lv := left .Bool ()
791806 rv := right .Bool ()
@@ -796,6 +811,7 @@ func EvaluateLogicOr(left, right reflect.Value) (reflect.Value, error) {
796811
797812// EvaluateLogicSingle will evaluate single expression value
798813func EvaluateLogicSingle (left reflect.Value ) (reflect.Value , error ) {
814+ left = GetValueElem (left )
799815 if left .Kind () == reflect .Bool {
800816 lv := left .Bool ()
801817 return reflect .ValueOf (lv ), nil
0 commit comments