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  }