registry.go 786 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /*
  2. Package registry is an expirmental package to facillitate altering the otto runtime via import.
  3. This interface can change at any time.
  4. */
  5. package registry
  6. var registry []*Entry = make([]*Entry, 0)
  7. type Entry struct {
  8. active bool
  9. source func() string
  10. }
  11. func newEntry(source func() string) *Entry {
  12. return &Entry{
  13. active: true,
  14. source: source,
  15. }
  16. }
  17. func (self *Entry) Enable() {
  18. self.active = true
  19. }
  20. func (self *Entry) Disable() {
  21. self.active = false
  22. }
  23. func (self Entry) Source() string {
  24. return self.source()
  25. }
  26. func Apply(callback func(Entry)) {
  27. for _, entry := range registry {
  28. if !entry.active {
  29. continue
  30. }
  31. callback(*entry)
  32. }
  33. }
  34. func Register(source func() string) *Entry {
  35. entry := newEntry(source)
  36. registry = append(registry, entry)
  37. return entry
  38. }