github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/lang/expressions/exp12.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 retBooleanTrue(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, true),
    14  	})
    15  }
    16  
    17  func expLogicalOr(tree *ParserT) error {
    18  	leftNode, rightNode, err := tree.getLeftAndRightSymbols()
    19  	if err != nil {
    20  		return err
    21  	}
    22  
    23  	var v any
    24  
    25  	nv, err := leftNode.dt.GetValue()
    26  	if err == nil {
    27  		v, err = types.ConvertGoType(nv, types.String)
    28  		if err != nil {
    29  			return err
    30  		}
    31  
    32  		if types.IsTrueString(v.(string), nv.ExitNum) {
    33  			return retBooleanTrue(tree)
    34  		}
    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  }