24 lines
817 B
Plaintext
24 lines
817 B
Plaintext
def minherit(self, supers) {
|
|
def forwarder match [verb, args] {
|
|
escape __return {
|
|
if (verb == "__respondsTo") {
|
|
def [verb, arity] := args
|
|
for super ? (super.__respondsTo(verb, arity)) in supers {
|
|
return true
|
|
}
|
|
return false
|
|
} else if (verb == "__getAllegedType") {
|
|
# XXX not a complete implementation
|
|
return supers[0].__getAllegedType()
|
|
} else {
|
|
def arity := args.size()
|
|
for super ? (super.__respondsTo(verb, arity)) in supers {
|
|
return E.call(super, verb, args)
|
|
}
|
|
throw(`No parent of $self responds to $verb/$arity`)
|
|
}
|
|
}
|
|
}
|
|
return forwarder
|
|
}
|