This patch pairs a promised interface with the object (Op/Attr/Type/Dialect) requesting the promise, ie:
declarePromisedInterface<MyAttr, MyInterface>();
Allowing to make fine grained promises. It also adds a mechanism to query if Op/Attr/Type has an specific promise returning true if the promise is there or if an implementation has been added. Finally it adds a couple of Attr|TypeConstraints that can be used in ODS to query if the promise or an implementation is there.
This patch tries to solve 2 issues:
- Different entities cannot use the same promise.
declarePromisedInterface<MyInterface>(); // Resolves a promise. MyAttr1::attachInterface<MyInterface>(ctx); // Doesn't resolves a promise, as the previous attachment removed the promise. MyAttr2::attachInterface<MyInterface>(ctx);
- Is not possible to query if a promise has been declared.