()
| 72 | } |
| 73 | |
| 74 | func init() { |
| 75 | binaryExpressionExecutors[lexer.Plus] = basicBinaryExpressionExecutorFn(func(ctx context.Context, left *model.Value, right *model.Value, _ ast.BinaryExpr) (*model.Value, error) { |
| 76 | return left.Add(right) |
| 77 | }) |
| 78 | binaryExpressionExecutors[lexer.Dash] = basicBinaryExpressionExecutorFn(func(ctx context.Context, left *model.Value, right *model.Value, _ ast.BinaryExpr) (*model.Value, error) { |
| 79 | return left.Subtract(right) |
| 80 | }) |
| 81 | binaryExpressionExecutors[lexer.Star] = basicBinaryExpressionExecutorFn(func(ctx context.Context, left *model.Value, right *model.Value, _ ast.BinaryExpr) (*model.Value, error) { |
| 82 | return left.Multiply(right) |
| 83 | }) |
| 84 | binaryExpressionExecutors[lexer.Slash] = basicBinaryExpressionExecutorFn(func(ctx context.Context, left *model.Value, right *model.Value, _ ast.BinaryExpr) (*model.Value, error) { |
| 85 | return left.Divide(right) |
| 86 | }) |
| 87 | binaryExpressionExecutors[lexer.Percent] = basicBinaryExpressionExecutorFn(func(ctx context.Context, left *model.Value, right *model.Value, _ ast.BinaryExpr) (*model.Value, error) { |
| 88 | return left.Modulo(right) |
| 89 | }) |
| 90 | binaryExpressionExecutors[lexer.GreaterThan] = basicBinaryExpressionExecutorFn(func(ctx context.Context, left *model.Value, right *model.Value, _ ast.BinaryExpr) (*model.Value, error) { |
| 91 | return left.GreaterThan(right) |
| 92 | }) |
| 93 | binaryExpressionExecutors[lexer.GreaterThanOrEqual] = basicBinaryExpressionExecutorFn(func(ctx context.Context, left *model.Value, right *model.Value, _ ast.BinaryExpr) (*model.Value, error) { |
| 94 | return left.GreaterThanOrEqual(right) |
| 95 | }) |
| 96 | binaryExpressionExecutors[lexer.LessThan] = basicBinaryExpressionExecutorFn(func(ctx context.Context, left *model.Value, right *model.Value, _ ast.BinaryExpr) (*model.Value, error) { |
| 97 | return left.LessThan(right) |
| 98 | }) |
| 99 | binaryExpressionExecutors[lexer.LessThanOrEqual] = basicBinaryExpressionExecutorFn(func(ctx context.Context, left *model.Value, right *model.Value, _ ast.BinaryExpr) (*model.Value, error) { |
| 100 | return left.LessThanOrEqual(right) |
| 101 | }) |
| 102 | binaryExpressionExecutors[lexer.Equal] = basicBinaryExpressionExecutorFn(func(ctx context.Context, left *model.Value, right *model.Value, _ ast.BinaryExpr) (*model.Value, error) { |
| 103 | return left.Equal(right) |
| 104 | }) |
| 105 | binaryExpressionExecutors[lexer.NotEqual] = basicBinaryExpressionExecutorFn(func(ctx context.Context, left *model.Value, right *model.Value, _ ast.BinaryExpr) (*model.Value, error) { |
| 106 | return left.NotEqual(right) |
| 107 | }) |
| 108 | binaryExpressionExecutors[lexer.Equals] = func(ctx context.Context, expr ast.BinaryExpr, value *model.Value, options *Options) (*model.Value, error) { |
| 109 | if leftVar, ok := expr.Left.(ast.VariableExpr); ok { |
| 110 | // It is expected that the left side of an assignment may not exist yet. |
| 111 | if _, ok := options.Vars[leftVar.Name]; !ok { |
| 112 | options.Vars[leftVar.Name] = model.NewNullValue() |
| 113 | } |
| 114 | } |
| 115 | return basicBinaryExpressionExecutorFn(executeAssign)(ctx, expr, value, options) |
| 116 | } |
| 117 | binaryExpressionExecutors[lexer.And] = basicBinaryExpressionExecutorFn(func(ctx context.Context, left *model.Value, right *model.Value, _ ast.BinaryExpr) (*model.Value, error) { |
| 118 | leftBool, err := left.BoolValue() |
| 119 | if err != nil { |
| 120 | return nil, fmt.Errorf("error getting left bool value: %w", err) |
| 121 | } |
| 122 | rightBool, err := right.BoolValue() |
| 123 | if err != nil { |
| 124 | return nil, fmt.Errorf("error getting right bool value: %w", err) |
| 125 | } |
| 126 | return model.NewBoolValue(leftBool && rightBool), nil |
| 127 | }) |
| 128 | binaryExpressionExecutors[lexer.Or] = basicBinaryExpressionExecutorFn(func(ctx context.Context, left *model.Value, right *model.Value, _ ast.BinaryExpr) (*model.Value, error) { |
| 129 | leftBool, err := left.BoolValue() |
| 130 | if err != nil { |
| 131 | return nil, fmt.Errorf("error getting left bool value: %w", err) |
nothing calls this directly
no test coverage detected