Switch to exposing the existing HashObject
All checks were successful
Build / build (push) Successful in 2m5s

This commit is contained in:
Leon Mika 2025-05-27 21:42:13 +10:00
parent 03e6878524
commit 41b4fdb003
3 changed files with 10 additions and 37 deletions

View file

@ -690,7 +690,7 @@ func filterBuiltin(ctx context.Context, args invocationArgs) (Object, error) {
}
return &newList, nil
case Hashable:
newHash := hashObject{}
newHash := HashObject{}
if err := t.Each(func(k string, v Object) error {
if m, err := inv.invoke(ctx, args.fork([]Object{StringObject(k), v})); err != nil {
return err

View file

@ -294,11 +294,11 @@ func (e evaluator) evalListOrHash(ctx context.Context, ec *evalCtx, loh *astList
if loh.EmptyList {
return &ListObject{}, nil
} else if loh.EmptyHash {
return hashObject{}, nil
return HashObject{}, nil
}
if firstIsHash := loh.Elements[0].Right != nil; firstIsHash {
h := hashObject{}
h := HashObject{}
for _, el := range loh.Elements {
if el.Right == nil {
return nil, errors.New("miss-match of lists and hash")

View file

@ -98,33 +98,6 @@ func (ss StringListObject) Index(i int) Object {
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 {
Iterable
}
@ -137,9 +110,9 @@ func (i iteratorObject) Truthy() bool {
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 {
return "[:]"
}
@ -158,19 +131,19 @@ func (s hashObject) String() string {
return sb.String()
}
func (s hashObject) Truthy() bool {
func (s HashObject) Truthy() bool {
return len(s) > 0
}
func (s hashObject) Len() int {
func (s HashObject) Len() int {
return len(s)
}
func (s hashObject) Value(k string) Object {
func (s HashObject) Value(k string) Object {
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 {
if err := fn(k, v); err != nil {
return err
@ -246,7 +219,7 @@ func toGoValue(obj Object) (interface{}, bool) {
xs = append(xs, x)
}
return xs, true
case hashObject:
case HashObject:
xs := make(map[string]interface{})
for k, va := range v {
x, ok := toGoValue(va)