38 lines
876 B
Go
38 lines
876 B
Go
|
// Copyright (c) 2024 Celestino Amoroso (celestino.amoroso@gmail.com).
|
||
|
// All rights reserved.
|
||
|
|
||
|
// operand-selector-case.go
|
||
|
package expr
|
||
|
|
||
|
import "fmt"
|
||
|
|
||
|
// -------- selector case term
|
||
|
|
||
|
type selectorCase struct {
|
||
|
filterList *term
|
||
|
caseExpr Expr
|
||
|
}
|
||
|
|
||
|
func newSelectorCaseTerm(row, col int, filterList *term, caseExpr Expr) *term {
|
||
|
tk := NewValueToken(row, col, SymSelectorCase, "", &selectorCase{filterList: filterList, caseExpr: caseExpr})
|
||
|
return &term{
|
||
|
tk: *tk,
|
||
|
class: classVar,
|
||
|
kind: kindUnknown,
|
||
|
parent: nil,
|
||
|
children: nil,
|
||
|
position: posLeaf,
|
||
|
priority: priValue,
|
||
|
evalFunc: evalSelectorCase,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// -------- eval selector case
|
||
|
func evalSelectorCase(ctx exprContext, self *term) (v any, err error) {
|
||
|
var ok bool
|
||
|
if v, ok = self.value().(*selectorCase); !ok {
|
||
|
err = fmt.Errorf("selector-case expected, got %T", self.value())
|
||
|
}
|
||
|
return
|
||
|
}
|