Module: Ibex::Runtime::Observation

Included in:
Parser
Defined in:
lib/json5/generated_parser.rb

Overview

Registration and ordered synchronous dispatch for parser observers.

Defined Under Namespace

Classes: Subscription

Instance Method Summary collapse

Instance Method Details

#observe(&observer) ⇒ Object

RBS:

  • () { (Event) -> void } -> Subscription

Raises:

  • (ArgumentError)


4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
# File 'lib/json5/generated_parser.rb', line 4416

def observe(&observer)
  __send__(:ensure_runtime_initialized!)
  raise ArgumentError, "observe requires a block" unless observer

  @runtime_observation_mutex.synchronize do
    ensure_observation_thread!
    @runtime_fast_path = false
    subscription = Subscription.__send__(:new)
    @runtime_observers ||= {} #: Hash[Subscription, Proc]
    @runtime_observers[subscription] = observer
    subscription
  end
end

#unobserve(subscription) ⇒ Object

RBS:

  • (Subscription subscription) -> bool



4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
# File 'lib/json5/generated_parser.rb', line 4431

def unobserve(subscription)
  __send__(:ensure_runtime_initialized!)
  @runtime_observation_mutex.synchronize do
    ensure_observation_thread!
    observers = @runtime_observers
    next false unless observers

    removed = !observers.delete(subscription).nil?
    @runtime_observers = nil if observers.empty?
    removed
  end
end