Switch to exposing the existing HashObject
All checks were successful
Build / build (push) Successful in 2m5s
All checks were successful
Build / build (push) Successful in 2m5s
This commit is contained in:
parent
03e6878524
commit
41b4fdb003
|
@ -690,7 +690,7 @@ func filterBuiltin(ctx context.Context, args invocationArgs) (Object, error) {
|
||||||
}
|
}
|
||||||
return &newList, nil
|
return &newList, nil
|
||||||
case Hashable:
|
case Hashable:
|
||||||
newHash := hashObject{}
|
newHash := HashObject{}
|
||||||
if err := t.Each(func(k string, v Object) error {
|
if err := t.Each(func(k string, v Object) error {
|
||||||
if m, err := inv.invoke(ctx, args.fork([]Object{StringObject(k), v})); err != nil {
|
if m, err := inv.invoke(ctx, args.fork([]Object{StringObject(k), v})); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -294,11 +294,11 @@ func (e evaluator) evalListOrHash(ctx context.Context, ec *evalCtx, loh *astList
|
||||||
if loh.EmptyList {
|
if loh.EmptyList {
|
||||||
return &ListObject{}, nil
|
return &ListObject{}, nil
|
||||||
} else if loh.EmptyHash {
|
} else if loh.EmptyHash {
|
||||||
return hashObject{}, nil
|
return HashObject{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if firstIsHash := loh.Elements[0].Right != nil; firstIsHash {
|
if firstIsHash := loh.Elements[0].Right != nil; firstIsHash {
|
||||||
h := hashObject{}
|
h := HashObject{}
|
||||||
for _, el := range loh.Elements {
|
for _, el := range loh.Elements {
|
||||||
if el.Right == nil {
|
if el.Right == nil {
|
||||||
return nil, errors.New("miss-match of lists and hash")
|
return nil, errors.New("miss-match of lists and hash")
|
||||||
|
|
41
ucl/objs.go
41
ucl/objs.go
|
@ -98,33 +98,6 @@ func (ss StringListObject) Index(i int) Object {
|
||||||
return StringObject(ss[i])
|
return StringObject(ss[i])
|
||||||
}
|
}
|
||||||
|
|
||||||
type HashObject map[string]Object
|
|
||||||
|
|
||||||
func (ho HashObject) String() string {
|
|
||||||
return fmt.Sprintf("%v", ho)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ho HashObject) Truthy() bool {
|
|
||||||
return len(ho) > 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ho HashObject) Len() int {
|
|
||||||
return len(ho)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ho HashObject) Value(k string) Object {
|
|
||||||
return ho[k]
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ho HashObject) Each(fn func(k string, v Object) error) error {
|
|
||||||
for k, v := range ho {
|
|
||||||
if err := fn(k, v); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type iteratorObject struct {
|
type iteratorObject struct {
|
||||||
Iterable
|
Iterable
|
||||||
}
|
}
|
||||||
|
@ -137,9 +110,9 @@ func (i iteratorObject) Truthy() bool {
|
||||||
return i.Iterable.HasNext()
|
return i.Iterable.HasNext()
|
||||||
}
|
}
|
||||||
|
|
||||||
type hashObject map[string]Object
|
type HashObject map[string]Object
|
||||||
|
|
||||||
func (s hashObject) String() string {
|
func (s HashObject) String() string {
|
||||||
if len(s) == 0 {
|
if len(s) == 0 {
|
||||||
return "[:]"
|
return "[:]"
|
||||||
}
|
}
|
||||||
|
@ -158,19 +131,19 @@ func (s hashObject) String() string {
|
||||||
return sb.String()
|
return sb.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s hashObject) Truthy() bool {
|
func (s HashObject) Truthy() bool {
|
||||||
return len(s) > 0
|
return len(s) > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s hashObject) Len() int {
|
func (s HashObject) Len() int {
|
||||||
return len(s)
|
return len(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s hashObject) Value(k string) Object {
|
func (s HashObject) Value(k string) Object {
|
||||||
return s[k]
|
return s[k]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s hashObject) Each(fn func(k string, v Object) error) error {
|
func (s HashObject) Each(fn func(k string, v Object) error) error {
|
||||||
for k, v := range s {
|
for k, v := range s {
|
||||||
if err := fn(k, v); err != nil {
|
if err := fn(k, v); err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -246,7 +219,7 @@ func toGoValue(obj Object) (interface{}, bool) {
|
||||||
xs = append(xs, x)
|
xs = append(xs, x)
|
||||||
}
|
}
|
||||||
return xs, true
|
return xs, true
|
||||||
case hashObject:
|
case HashObject:
|
||||||
xs := make(map[string]interface{})
|
xs := make(map[string]interface{})
|
||||||
for k, va := range v {
|
for k, va := range v {
|
||||||
x, ok := toGoValue(va)
|
x, ok := toGoValue(va)
|
||||||
|
|
Loading…
Reference in a new issue