e93f6f6325
- add object.NumObjects() - add object allocation limit in VM - delete objects.Break, objects.Continue, objects.ReturnValue - add Script.SetMaxAllocs() - update sandbox documentation - add some tests - remove duplicate values in compiled constants (fixes #96) - option to limit the maximum number of objects in compiled bytecode constants
31 lines
671 B
Go
31 lines
671 B
Go
package objects
|
|
|
|
// CountObjects returns the number of objects that a given object o contains.
|
|
// For scalar value types, it will always be 1. For compound value types,
|
|
// this will include its elements and all of their elements recursively.
|
|
func CountObjects(o Object) (c int) {
|
|
c = 1
|
|
|
|
switch o := o.(type) {
|
|
case *Array:
|
|
for _, v := range o.Value {
|
|
c += CountObjects(v)
|
|
}
|
|
case *ImmutableArray:
|
|
for _, v := range o.Value {
|
|
c += CountObjects(v)
|
|
}
|
|
case *Map:
|
|
for _, v := range o.Value {
|
|
c += CountObjects(v)
|
|
}
|
|
case *ImmutableMap:
|
|
for _, v := range o.Value {
|
|
c += CountObjects(v)
|
|
}
|
|
case *Error:
|
|
c += CountObjects(o.Value)
|
|
}
|
|
|
|
return
|
|
}
|