Lines Matching defs:interface

1 //===- OpInterfacesGen.cpp - MLIR op interface utility generator ----------===//
95 void emitConceptDecl(const Interface &interface);
96 void emitModelDecl(const Interface &interface);
97 void emitModelMethodsDef(const Interface &interface);
98 void emitTraitDecl(const Interface &interface, StringRef interfaceName,
100 void emitInterfaceDecl(const Interface &interface);
102 /// The set of interface records to emit.
106 /// The C++ value type of the interface, e.g. Operation*.
108 /// The C++ base interface type.
178 const Interface &interface,
181 for (auto &method : interface.getMethods()) {
202 static void emitInterfaceDef(const Interface &interface, StringRef valueType,
204 std::string interfaceQualNameStr = interface.getFullyQualifiedName();
209 bool isOpInterface = isa<OpInterface>(interface);
210 emitInterfaceDefMethods(interfaceQualName, interface, valueType, "getImpl()",
214 for (auto &base : interface.getBaseInterfaces()) {
233 void InterfaceGenerator::emitConceptDecl(const Interface &interface) {
237 os << " /// The methods defined by the interface.\n";
238 for (auto &method : interface.getMethods()) {
253 auto baseInterfaces = interface.getBaseInterfaces();
255 os << " /// The base classes of this interface.\n";
256 for (const auto &base : interface.getBaseInterfaces()) {
265 std::string interfaceQualName = interface.getFullyQualifiedName();
266 for (const auto &base : interface.getBaseInterfaces()) {
272 << "` expected its base interface `" << baseQualName
281 void InterfaceGenerator::emitModelDecl(const Interface &interface) {
286 os << " using Interface = " << interface.getFullyQualifiedName()
290 interface.getMethods(), os,
295 for (auto &method : interface.getMethods()) {
314 for (auto &method : interface.getMethods()) {
341 void InterfaceGenerator::emitModelMethodsDef(const Interface &interface) {
343 llvm::SplitString(interface.getCppNamespace(), namespaces, "::");
347 for (auto &method : interface.getMethods()) {
350 os << "detail::" << interface.getName() << "InterfaceTraits::Model<"
381 for (auto &method : interface.getMethods()) {
384 os << "detail::" << interface.getName() << "InterfaceTraits::FallbackModel<"
408 for (auto &method : interface.getMethods()) {
414 os << "detail::" << interface.getName()
447 void InterfaceGenerator::emitTraitDecl(const Interface &interface,
457 bool isOpInterface = isa<OpInterface>(interface);
458 for (auto &method : interface.getMethods()) {
459 // Flag interface methods named verifyTrait.
462 formatv("'verifyTrait' method cannot be specified as interface "
478 if (auto verify = interface.getVerify()) {
479 assert(isa<OpInterface>(interface) && "only OpInterface supports 'verify'");
485 (interface.verifyWithRegions() ? "verifyRegionTrait"
490 if (auto extraTraitDecls = interface.getExtraTraitClassDeclaration())
492 if (auto extraTraitDecls = interface.getExtraSharedClassDeclaration())
498 static void emitInterfaceDeclMethods(const Interface &interface,
502 for (auto &method : interface.getMethods()) {
512 interface.getExtraClassDeclaration())
515 interface.getExtraSharedClassDeclaration())
519 void InterfaceGenerator::emitInterfaceDecl(const Interface &interface) {
521 llvm::SplitString(interface.getCppNamespace(), namespaces, "::");
525 StringRef interfaceName = interface.getName();
528 // Emit a forward declaration of the interface class so that it becomes usable
535 emitConceptDecl(interface);
536 emitModelDecl(interface);
539 // Emit the derived trait for the interface.
541 os << "struct " << interface.getName() << "Trait;\n";
545 // Emit the main interface class declaration.
558 bool isOpInterface = isa<OpInterface>(interface);
559 emitInterfaceDeclMethods(interface, os, valueType, isOpInterface,
563 for (auto &base : interface.getBaseInterfaces()) {
573 // Allow implicit conversion to the base interface.
580 // Inherit the base interface's methods.
585 if (std::optional<StringRef> extraClassOf = interface.getExtraClassOf()) {
589 << " auto* interface = getInterfaceFor(base);\n"
590 << " if (!interface)\n"
592 " " << interfaceName << " odsInterfaceInstance(base, interface);\n"
600 emitTraitDecl(interface, interfaceName, interfaceTraitsName);
627 Interface interface(&interfaceDef);
629 // Emit the interface name followed by the description.
630 os << "## " << interface.getName() << " (`" << interfaceDef.getName()
632 if (auto description = interface.getDescription())
635 // Emit the methods required by the interface.
637 for (const auto &method : interface.getMethods()) {
680 : genDeclArg(("gen-" + genArg + "-interface-decls").str()),
681 genDefArg(("gen-" + genArg + "-interface-defs").str()),
682 genDocArg(("gen-" + genArg + "-interface-docs").str()),
683 genDeclDesc(("Generate " + genDesc + " interface declarations").str()),
684 genDefDesc(("Generate " + genDesc + " interface definitions").str()),
685 genDocDesc(("Generate " + genDesc + " interface documentation").str()),