github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/lang/expressions/exp11.go (about) 1 package expressions 2 3 import ( 4 "github.com/lmorg/murex/lang/expressions/primitives" 5 "github.com/lmorg/murex/lang/expressions/symbols" 6 "github.com/lmorg/murex/lang/types" 7 ) 8 9 func retBooleanFalse(tree *ParserT) error { 10 return tree.foldAst(&astNodeT{ 11 key: symbols.Calculated, 12 pos: tree.ast[tree.astPos].pos, 13 dt: primitives.NewPrimitive(primitives.Boolean, false), 14 }) 15 } 16 17 func expLogicalAnd(tree *ParserT) error { 18 leftNode, rightNode, err := tree.getLeftAndRightSymbols() 19 if err != nil { 20 return err 21 } 22 23 nv, err := leftNode.dt.GetValue() 24 if err != nil { 25 return retBooleanFalse(tree) 26 } 27 28 v, err := types.ConvertGoType(nv, types.String) 29 if err != nil { 30 return err 31 } 32 33 if !types.IsTrueString(v.(string), nv.ExitNum) { 34 return retBooleanFalse(tree) 35 } 36 37 nv, err = rightNode.dt.GetValue() 38 if err != nil { 39 return retBooleanFalse(tree) 40 } 41 42 v, err = types.ConvertGoType(nv, types.String) 43 if err != nil { 44 return err 45 } 46 47 return tree.foldAst(&astNodeT{ 48 key: symbols.Calculated, 49 pos: tree.ast[tree.astPos].pos, 50 dt: primitives.NewPrimitive(primitives.Boolean, types.IsTrueString(v.(string), nv.ExitNum)), 51 }) 52 }