Skip to content

Commit 56d0528

Browse files
committed
simplify logic
1 parent 6bd3eb5 commit 56d0528

File tree

3 files changed

+19
-13
lines changed

3 files changed

+19
-13
lines changed

builtin/lib.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -421,11 +421,14 @@ func get(params ...any) (out any, err error) {
421421
fieldName := i.(string)
422422
value := v.FieldByNameFunc(func(name string) bool {
423423
field, _ := v.Type().FieldByName(name)
424-
tagName := field.Tag.Get("expr")
425-
if tagName == fieldName {
424+
switch field.Tag.Get("expr") {
425+
case "-":
426+
return false
427+
case fieldName:
426428
return true
429+
default:
430+
return name == fieldName
427431
}
428-
return tagName != "-" && name == fieldName
429432
})
430433
if value.IsValid() {
431434
return value.Interface(), nil

checker/nature/utils.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@ import (
66
"github.com/expr-lang/expr/internal/deref"
77
)
88

9-
func fieldName(field reflect.StructField) string {
9+
func fieldName(field reflect.StructField) (string, bool) {
1010
switch taggedName := field.Tag.Get("expr"); taggedName {
1111
case "-":
12-
return ""
12+
return "", false
1313
case "":
14-
return field.Name
14+
return field.Name, true
1515
default:
16-
return taggedName
16+
return taggedName, true
1717
}
1818
}
1919

@@ -27,7 +27,7 @@ func fetchField(t reflect.Type, name string) (reflect.StructField, bool) {
2727
for i := 0; i < t.NumField(); i++ {
2828
field := t.Field(i)
2929
// Search all fields, even embedded structs.
30-
if n := fieldName(field); n != "" && n == name {
30+
if n, ok := fieldName(field); ok && n == name {
3131
return field, true
3232
}
3333
}
@@ -73,8 +73,8 @@ func StructFields(t reflect.Type) map[string]Nature {
7373
}
7474
}
7575

76-
name := fieldName(f)
77-
if name == "" {
76+
name, ok := fieldName(f)
77+
if !ok {
7878
continue
7979
}
8080
table[name] = Nature{

vm/runtime/runtime.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,14 @@ func Fetch(from, i any) any {
6565
fieldName := i.(string)
6666
value := v.FieldByNameFunc(func(name string) bool {
6767
field, _ := v.Type().FieldByName(name)
68-
tagName := field.Tag.Get("expr")
69-
if tagName == fieldName {
68+
switch field.Tag.Get("expr") {
69+
case "-":
70+
return false
71+
case fieldName:
7072
return true
73+
default:
74+
return name == fieldName
7175
}
72-
return tagName != "-" && name == fieldName
7376
})
7477
if value.IsValid() {
7578
return value.Interface()

0 commit comments

Comments
 (0)