::Myco::Object < ::Myco::BasicObject {

# Send the named signal to all handlers for this object
__signal__: |name, *args, &block| {
  component.ancestors.reverse.each |other| {
    other.?__signal_handlers__(name).each |meme| {
      meme.result_for(self, *args, &block)
    }
  }
}

static storage __signal_handlers__: []

[decorators]

# Register a named signal handler
const on: Decorator {
  apply: |meme| meme.target.__signal_handlers__(meme.name).push(meme)

  [transforms]
  expose: false
}

}