+(define-public (define-event-class class parent)
+ "Defines a new event @code{class} derived from @code{parent}, a
+previously defined event class."
+ (let ((parentclass (ly:make-event-class parent)))
+ (cond
+ ((ly:make-event-class class)
+ (ly:error (_ "Cannot redefine event class `~S'") class))
+ ((not parentclass)
+ (ly:error (_ "Undefined parent event class `~S'") parentclass))
+ (else
+ (hashq-set! ancestor-lookup
+ class
+ (cons class parentclass))))
+ *unspecified*))
+
+;; TODO: Allow entering more complex classes, by taking unions.
+(define-public (ly:make-event-class leaf)
+ (hashq-ref ancestor-lookup leaf))
+