3
0

Vendored modules tidied, updated (gval)

This commit is contained in:
Denis Arh
2021-01-20 19:53:00 +01:00
parent 9d004f65ac
commit 9290bff442
7 changed files with 97 additions and 38 deletions
+1 -1
View File
@@ -9,7 +9,7 @@ require (
github.com/Masterminds/semver v1.5.0 // indirect
github.com/Masterminds/sprig v2.22.0+incompatible
github.com/Masterminds/squirrel v1.1.1-0.20191017225151-12f2162c8d8d
github.com/PaesslerAG/gval v1.0.1
github.com/PaesslerAG/gval v1.1.0
github.com/PaesslerAG/jsonpath v0.1.1 // indirect
github.com/SentimensRG/ctx v0.0.0-20180729130232-0bfd988c655d
github.com/crusttech/go-oidc v0.0.0-20180918092017-982855dad3e1
+2 -2
View File
@@ -51,8 +51,8 @@ github.com/Masterminds/squirrel v1.1.1-0.20191017225151-12f2162c8d8d/go.mod h1:y
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/PaesslerAG/gval v0.1.1/go.mod h1:y/nm5yEyTeX6av0OfKJNp9rBNj2XrGhAf5+v24IBN1I=
github.com/PaesslerAG/gval v1.0.0/go.mod h1:y/nm5yEyTeX6av0OfKJNp9rBNj2XrGhAf5+v24IBN1I=
github.com/PaesslerAG/gval v1.0.1 h1:QnCvok0w0Y3uZNxmNmC6GZ0cuBl+jH0tu/rBMT8pso4=
github.com/PaesslerAG/gval v1.0.1/go.mod h1:y/nm5yEyTeX6av0OfKJNp9rBNj2XrGhAf5+v24IBN1I=
github.com/PaesslerAG/gval v1.1.0 h1:k3RuxeZDO3eejD4cMPSt+74tUSvTnbGvLx0df4mdwFc=
github.com/PaesslerAG/gval v1.1.0/go.mod h1:y/nm5yEyTeX6av0OfKJNp9rBNj2XrGhAf5+v24IBN1I=
github.com/PaesslerAG/jsonpath v0.1.0/go.mod h1:4BzmtoM/PI8fPO4aQGIusjGxGir2BzcV0grWtFzq1Y8=
github.com/PaesslerAG/jsonpath v0.1.1 h1:c1/AToHQMVsduPAa4Vh6xp2U0evy4t8SWp8imEsylIk=
github.com/PaesslerAG/jsonpath v0.1.1/go.mod h1:lVboNxFGal/VwW6d9JzIy56bUsYAP6tH/x80vjnCseY=
+1 -1
View File
@@ -6,7 +6,7 @@ before_install:
script:
- go test -bench=. -benchmem -timeout 10m -coverprofile coverage.out
- $HOME/gopath/bin/goveralls -coverprofile=coverage.out -service=travis-ci -repotoken $COVERALLS_TOKEN
- $HOME/gopath/bin/goveralls -coverprofile=coverage.out -service=travis-ci -repotoken=$COVERALLS_TOKEN
- go test -bench=Random -benchtime 5m -timeout 30m -benchmem -coverprofile coverage.out
go: "1.11"
+1 -1
View File
@@ -202,7 +202,7 @@ func (*Parser) callFunc(fun function, args ...Evaluable) Evaluable {
}
a[i] = ai
}
return fun(a...)
return fun(c, a...)
}
}
+71 -30
View File
@@ -1,55 +1,96 @@
package gval
import (
"context"
"fmt"
"reflect"
)
type function func(arguments ...interface{}) (interface{}, error)
type function func(ctx context.Context, arguments ...interface{}) (interface{}, error)
func toFunc(f interface{}) function {
if f, ok := f.(func(arguments ...interface{}) (interface{}, error)); ok {
return function(func(ctx context.Context, arguments ...interface{}) (interface{}, error) {
var v interface{}
errCh := make(chan error)
go func() {
result, err := f(arguments...)
v = result
errCh <- err
}()
select {
case <-ctx.Done():
return nil, ctx.Err()
case err := <-errCh:
return v, err
}
})
}
if f, ok := f.(func(ctx context.Context, arguments ...interface{}) (interface{}, error)); ok {
return function(f)
}
return func(args ...interface{}) (interface{}, error) {
fun := reflect.ValueOf(f)
t := fun.Type()
in, err := createCallArguments(t, args)
if err != nil {
return nil, err
}
out := fun.Call(in)
r := make([]interface{}, len(out))
for i, e := range out {
r[i] = e.Interface()
}
err = nil
errorInterface := reflect.TypeOf((*error)(nil)).Elem()
if len(r) > 0 && t.Out(len(r)-1).Implements(errorInterface) {
if r[len(r)-1] != nil {
err = r[len(r)-1].(error)
fun := reflect.ValueOf(f)
t := fun.Type()
return func(ctx context.Context, args ...interface{}) (interface{}, error) {
var v interface{}
errCh := make(chan error)
go func() {
in, err := createCallArguments(ctx, t, args)
if err != nil {
errCh <- err
return
}
r = r[0 : len(r)-1]
}
out := fun.Call(in)
switch len(r) {
case 0:
return nil, err
case 1:
return r[0], err
default:
return r, err
r := make([]interface{}, len(out))
for i, e := range out {
r[i] = e.Interface()
}
err = nil
errorInterface := reflect.TypeOf((*error)(nil)).Elem()
if len(r) > 0 && t.Out(len(r)-1).Implements(errorInterface) {
if r[len(r)-1] != nil {
err = r[len(r)-1].(error)
}
r = r[0 : len(r)-1]
}
switch len(r) {
case 0:
v = nil
case 1:
v = r[0]
default:
v = r
}
errCh <- err
}()
select {
case <-ctx.Done():
return nil, ctx.Err()
case err := <-errCh:
return v, err
}
}
}
func createCallArguments(t reflect.Type, args []interface{}) ([]reflect.Value, error) {
func createCallArguments(ctx context.Context, t reflect.Type, args []interface{}) ([]reflect.Value, error) {
variadic := t.IsVariadic()
numIn := t.NumIn()
// if first argument is a context, use the given execution context
if numIn > 0 {
thisFun := reflect.ValueOf(createCallArguments)
thisT := thisFun.Type()
if t.In(0) == thisT.In(0) {
args = append([]interface{}{ctx}, args...)
}
}
if (!variadic && len(args) != numIn) || (variadic && len(args) < numIn-1) {
return nil, fmt.Errorf("invalid number of parameters")
}
+20 -2
View File
@@ -77,6 +77,16 @@ func JSON() Language {
return ljson
}
// Parentheses contains support for parentheses.
func Parentheses() Language {
return parentheses
}
// Ident contains support for variables and functions.
func Ident() Language {
return ident
}
// Base contains equal (==) and not equal (!=), perentheses and general support for variables, constants and functions
// It contains true, false, (floating point) number, string ("" or ``) and char ('') constants
func Base() Language {
@@ -205,6 +215,14 @@ var propositionalLogic = NewLanguage(
base,
)
var parentheses = NewLanguage(
PrefixExtension('(', parseParentheses),
)
var ident = NewLanguage(
PrefixMetaPrefix(scanner.Ident, parseIdent),
)
var base = NewLanguage(
PrefixExtension(scanner.Int, parseNumber),
PrefixExtension(scanner.Float, parseNumber),
@@ -225,7 +243,7 @@ var base = NewLanguage(
InfixOperator("==", func(a, b interface{}) (interface{}, error) { return reflect.DeepEqual(a, b), nil }),
InfixOperator("!=", func(a, b interface{}) (interface{}, error) { return !reflect.DeepEqual(a, b), nil }),
PrefixExtension('(', parseParentheses),
parentheses,
Precedence("??", 0),
@@ -258,5 +276,5 @@ var base = NewLanguage(
Precedence("**", 200),
PrefixMetaPrefix(scanner.Ident, parseIdent),
ident,
)
+1 -1
View File
@@ -18,7 +18,7 @@ github.com/Masterminds/sprig
# github.com/Masterminds/squirrel v1.1.1-0.20191017225151-12f2162c8d8d
## explicit
github.com/Masterminds/squirrel
# github.com/PaesslerAG/gval v1.0.1
# github.com/PaesslerAG/gval v1.1.0
## explicit
github.com/PaesslerAG/gval
# github.com/PaesslerAG/jsonpath v0.1.1