Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/pkg/river/vm/op_unary.go
4095 views
1
package vm
2
3
import (
4
"github.com/grafana/agent/pkg/river/internal/value"
5
"github.com/grafana/agent/pkg/river/token"
6
)
7
8
func evalUnaryOp(op token.Token, val value.Value) (value.Value, error) {
9
switch op {
10
case token.NOT:
11
if val.Type() != value.TypeBool {
12
return value.Null, value.TypeError{Value: val, Expected: value.TypeBool}
13
}
14
return value.Bool(!val.Bool()), nil
15
16
case token.SUB:
17
if val.Type() != value.TypeNumber {
18
return value.Null, value.TypeError{Value: val, Expected: value.TypeNumber}
19
}
20
21
valNum := val.Number()
22
switch valNum.Kind() {
23
case value.NumberKindInt, value.NumberKindUint:
24
// It doesn't make much sense to invert a uint, so we always cast to an
25
// int and return an int.
26
return value.Int(-valNum.Int()), nil
27
case value.NumberKindFloat:
28
return value.Float(-valNum.Float()), nil
29
}
30
}
31
32
panic("river/vm: unreachable")
33
}
34
35