Lines Matching full:os
234 virtual void writeAccessors(raw_ostream &OS) const = 0;
235 virtual void writeAccessorDefinitions(raw_ostream &OS) const {} in writeAccessorDefinitions()
236 virtual void writeASTVisitorTraversal(raw_ostream &OS) const {} in writeASTVisitorTraversal()
237 virtual void writeCloneArgs(raw_ostream &OS) const = 0;
238 virtual void writeTemplateInstantiationArgs(raw_ostream &OS) const = 0;
239 virtual void writeTemplateInstantiation(raw_ostream &OS) const {} in writeTemplateInstantiation()
240 virtual void writeCtorBody(raw_ostream &OS) const {} in writeCtorBody()
241 virtual void writeCtorInitializers(raw_ostream &OS) const = 0;
242 virtual void writeCtorDefaultInitializers(raw_ostream &OS) const = 0;
243 virtual void writeCtorParameters(raw_ostream &OS) const = 0;
244 virtual void writeDeclarations(raw_ostream &OS) const = 0;
245 virtual void writePCHReadArgs(raw_ostream &OS) const = 0;
246 virtual void writePCHReadDecls(raw_ostream &OS) const = 0;
247 virtual void writePCHWrite(raw_ostream &OS) const = 0;
249 virtual void writeValue(raw_ostream &OS) const = 0;
250 virtual void writeDump(raw_ostream &OS) const = 0;
251 virtual void writeDumpChildren(raw_ostream &OS) const {} in writeDumpChildren()
252 virtual void writeHasChildren(raw_ostream &OS) const { OS << "false"; } in writeHasChildren()
258 virtual void writeImplicitCtorArgs(raw_ostream &OS) const { in writeImplicitCtorArgs()
259 OS << getUpperName(); in writeImplicitCtorArgs()
272 void writeAccessors(raw_ostream &OS) const override { in writeAccessors()
273 OS << " " << type << " get" << getUpperName() << "() const {\n"; in writeAccessors()
274 OS << " return " << getLowerName() << ";\n"; in writeAccessors()
275 OS << " }"; in writeAccessors()
278 void writeCloneArgs(raw_ostream &OS) const override { in writeCloneArgs()
279 OS << getLowerName(); in writeCloneArgs()
282 void writeTemplateInstantiationArgs(raw_ostream &OS) const override { in writeTemplateInstantiationArgs()
283 OS << "A->get" << getUpperName() << "()"; in writeTemplateInstantiationArgs()
286 void writeCtorInitializers(raw_ostream &OS) const override { in writeCtorInitializers()
287 OS << getLowerName() << "(" << getUpperName() << ")"; in writeCtorInitializers()
290 void writeCtorDefaultInitializers(raw_ostream &OS) const override { in writeCtorDefaultInitializers()
291 OS << getLowerName() << "()"; in writeCtorDefaultInitializers()
294 void writeCtorParameters(raw_ostream &OS) const override { in writeCtorParameters()
295 OS << type << " " << getUpperName(); in writeCtorParameters()
298 void writeDeclarations(raw_ostream &OS) const override { in writeDeclarations()
299 OS << type << " " << getLowerName() << ";"; in writeDeclarations()
302 void writePCHReadDecls(raw_ostream &OS) const override { in writePCHReadDecls()
304 OS << " " << type << " " << getLowerName() << " = " << read << ";\n"; in writePCHReadDecls()
307 void writePCHReadArgs(raw_ostream &OS) const override { in writePCHReadArgs()
308 OS << getLowerName(); in writePCHReadArgs()
311 void writePCHWrite(raw_ostream &OS) const override { in writePCHWrite()
312 OS << " " in writePCHWrite()
327 void writeValue(raw_ostream &OS) const override { in writeValue()
329 OS << "\" << get" << getUpperName() in writeValue()
334 OS << "\" << (get" << getUpperName() << "() ? get" << getUpperName() in writeValue()
337 OS << "\" << get" << getUpperName() << "()->getName() << \""; in writeValue()
339 OS << "\" << get" << getUpperName() << "().getAsString() << \""; in writeValue()
341 OS << "\" << get" << getUpperName() << "().getSourceIndex() << \""; in writeValue()
343 OS << "\" << get" << getUpperName() << "() << \""; in writeValue()
346 void writeDump(raw_ostream &OS) const override { in writeDump()
348 OS << " OS << \" \";\n"; in writeDump()
349 OS << " dumpBareDeclRef(SA->get" << getUpperName() << "());\n"; in writeDump()
353 OS << " if (SA->get" << getUpperName() << "())\n" in writeDump()
354 << " OS << \" \" << SA->get" << getUpperName() in writeDump()
358 OS << " if (SA->get" << getUpperName() << "Loc())"; in writeDump()
359 OS << " OS << \" \" << SA->get" << getUpperName() in writeDump()
362 OS << " if (SA->get" << getUpperName() << "()) OS << \" " in writeDump()
365 OS << " OS << \" \" << SA->get" << getUpperName() << "();\n"; in writeDump()
368 OS << " if (SA->get" << getUpperName() << "().isValid())\n "; in writeDump()
369 OS << " OS << \" \" << SA->get" << getUpperName() in writeDump()
372 OS << " OS << \" \" << SA->get" << getUpperName() << "();\n"; in writeDump()
387 void writeAccessors(raw_ostream &OS) const override { in writeAccessors()
388 SimpleArgument::writeAccessors(OS); in writeAccessors()
390 OS << "\n\n static const " << getType() << " Default" << getUpperName() in writeAccessors()
393 OS << (Default != 0 ? "true" : "false"); in writeAccessors()
395 OS << Default; in writeAccessors()
396 OS << ";"; in writeAccessors()
406 void writeAccessors(raw_ostream &OS) const override { in writeAccessors()
407 OS << " llvm::StringRef get" << getUpperName() << "() const {\n"; in writeAccessors()
408 OS << " return llvm::StringRef(" << getLowerName() << ", " in writeAccessors()
410 OS << " }\n"; in writeAccessors()
411 OS << " unsigned get" << getUpperName() << "Length() const {\n"; in writeAccessors()
412 OS << " return " << getLowerName() << "Length;\n"; in writeAccessors()
413 OS << " }\n"; in writeAccessors()
414 OS << " void set" << getUpperName() in writeAccessors()
416 OS << " " << getLowerName() << "Length = S.size();\n"; in writeAccessors()
417 OS << " this->" << getLowerName() << " = new (C, 1) char [" in writeAccessors()
419 OS << " if (!S.empty())\n"; in writeAccessors()
420 OS << " std::memcpy(this->" << getLowerName() << ", S.data(), " in writeAccessors()
422 OS << " }"; in writeAccessors()
425 void writeCloneArgs(raw_ostream &OS) const override { in writeCloneArgs()
426 OS << "get" << getUpperName() << "()"; in writeCloneArgs()
429 void writeTemplateInstantiationArgs(raw_ostream &OS) const override { in writeTemplateInstantiationArgs()
430 OS << "A->get" << getUpperName() << "()"; in writeTemplateInstantiationArgs()
433 void writeCtorBody(raw_ostream &OS) const override { in writeCtorBody()
434 OS << " if (!" << getUpperName() << ".empty())\n"; in writeCtorBody()
435 OS << " std::memcpy(" << getLowerName() << ", " << getUpperName() in writeCtorBody()
439 void writeCtorInitializers(raw_ostream &OS) const override { in writeCtorInitializers()
440 OS << getLowerName() << "Length(" << getUpperName() << ".size())," in writeCtorInitializers()
445 void writeCtorDefaultInitializers(raw_ostream &OS) const override { in writeCtorDefaultInitializers()
446 OS << getLowerName() << "Length(0)," << getLowerName() << "(nullptr)"; in writeCtorDefaultInitializers()
449 void writeCtorParameters(raw_ostream &OS) const override { in writeCtorParameters()
450 OS << "llvm::StringRef " << getUpperName(); in writeCtorParameters()
453 void writeDeclarations(raw_ostream &OS) const override { in writeDeclarations()
454 OS << "unsigned " << getLowerName() << "Length;\n"; in writeDeclarations()
455 OS << "char *" << getLowerName() << ";"; in writeDeclarations()
458 void writePCHReadDecls(raw_ostream &OS) const override { in writePCHReadDecls()
459 OS << " std::string " << getLowerName() in writePCHReadDecls()
463 void writePCHReadArgs(raw_ostream &OS) const override { in writePCHReadArgs()
464 OS << getLowerName(); in writePCHReadArgs()
467 void writePCHWrite(raw_ostream &OS) const override { in writePCHWrite()
468 OS << " Record.AddString(SA->get" << getUpperName() << "());\n"; in writePCHWrite()
471 void writeValue(raw_ostream &OS) const override { in writeValue()
472 OS << "\\\"\" << get" << getUpperName() << "() << \"\\\""; in writeValue()
475 void writeDump(raw_ostream &OS) const override { in writeDump()
476 OS << " OS << \" \\\"\" << SA->get" << getUpperName() in writeDump()
487 void writeAccessors(raw_ostream &OS) const override { in writeAccessors()
488 OS << " bool is" << getUpperName() << "Dependent() const;\n"; in writeAccessors()
489 OS << " bool is" << getUpperName() << "ErrorDependent() const;\n"; in writeAccessors()
491 OS << " unsigned get" << getUpperName() << "(ASTContext &Ctx) const;\n"; in writeAccessors()
493 OS << " bool is" << getUpperName() << "Expr() const {\n"; in writeAccessors()
494 OS << " return is" << getLowerName() << "Expr;\n"; in writeAccessors()
495 OS << " }\n"; in writeAccessors()
497 OS << " Expr *get" << getUpperName() << "Expr() const {\n"; in writeAccessors()
498 OS << " assert(is" << getLowerName() << "Expr);\n"; in writeAccessors()
499 OS << " return " << getLowerName() << "Expr;\n"; in writeAccessors()
500 OS << " }\n"; in writeAccessors()
502 OS << " TypeSourceInfo *get" << getUpperName() << "Type() const {\n"; in writeAccessors()
503 OS << " assert(!is" << getLowerName() << "Expr);\n"; in writeAccessors()
504 OS << " return " << getLowerName() << "Type;\n"; in writeAccessors()
505 OS << " }"; in writeAccessors()
508 void writeAccessorDefinitions(raw_ostream &OS) const override { in writeAccessorDefinitions()
509 OS << "bool " << getAttrName() << "Attr::is" << getUpperName() in writeAccessorDefinitions()
511 OS << " if (is" << getLowerName() << "Expr)\n"; in writeAccessorDefinitions()
512 OS << " return " << getLowerName() << "Expr && (" << getLowerName() in writeAccessorDefinitions()
515 OS << " else\n"; in writeAccessorDefinitions()
516 OS << " return " << getLowerName() in writeAccessorDefinitions()
518 OS << "}\n"; in writeAccessorDefinitions()
520 OS << "bool " << getAttrName() << "Attr::is" << getUpperName() in writeAccessorDefinitions()
522 OS << " if (is" << getLowerName() << "Expr)\n"; in writeAccessorDefinitions()
523 OS << " return " << getLowerName() << "Expr && " << getLowerName() in writeAccessorDefinitions()
525 OS << " return " << getLowerName() in writeAccessorDefinitions()
527 OS << "}\n"; in writeAccessorDefinitions()
532 OS << "unsigned " << getAttrName() << "Attr::get" << getUpperName() in writeAccessorDefinitions()
534 OS << " assert(!is" << getUpperName() << "Dependent());\n"; in writeAccessorDefinitions()
535 OS << " if (is" << getLowerName() << "Expr)\n"; in writeAccessorDefinitions()
536 OS << " return " << getLowerName() << "Expr ? " << getLowerName() in writeAccessorDefinitions()
540 OS << " else\n"; in writeAccessorDefinitions()
541 OS << " return 0; // FIXME\n"; in writeAccessorDefinitions()
542 OS << "}\n"; in writeAccessorDefinitions()
545 void writeASTVisitorTraversal(raw_ostream &OS) const override { in writeASTVisitorTraversal()
547 OS << " if (A->is" << Name << "Expr()) {\n" in writeASTVisitorTraversal()
556 void writeCloneArgs(raw_ostream &OS) const override { in writeCloneArgs()
557 OS << "is" << getLowerName() << "Expr, is" << getLowerName() in writeCloneArgs()
563 void writeTemplateInstantiationArgs(raw_ostream &OS) const override { in writeTemplateInstantiationArgs()
568 void writeCtorBody(raw_ostream &OS) const override { in writeCtorBody()
569 OS << " if (is" << getLowerName() << "Expr)\n"; in writeCtorBody()
570 OS << " " << getLowerName() << "Expr = reinterpret_cast<Expr *>(" in writeCtorBody()
572 OS << " else\n"; in writeCtorBody()
573 OS << " " << getLowerName() in writeCtorBody()
578 void writeCtorInitializers(raw_ostream &OS) const override { in writeCtorInitializers()
579 OS << "is" << getLowerName() << "Expr(Is" << getUpperName() << "Expr)"; in writeCtorInitializers()
582 void writeCtorDefaultInitializers(raw_ostream &OS) const override { in writeCtorDefaultInitializers()
583 OS << "is" << getLowerName() << "Expr(false)"; in writeCtorDefaultInitializers()
586 void writeCtorParameters(raw_ostream &OS) const override { in writeCtorParameters()
587 OS << "bool Is" << getUpperName() << "Expr, void *" << getUpperName(); in writeCtorParameters()
590 void writeImplicitCtorArgs(raw_ostream &OS) const override { in writeImplicitCtorArgs()
591 OS << "Is" << getUpperName() << "Expr, " << getUpperName(); in writeImplicitCtorArgs()
594 void writeDeclarations(raw_ostream &OS) const override { in writeDeclarations()
595 OS << "bool is" << getLowerName() << "Expr;\n"; in writeDeclarations()
596 OS << "union {\n"; in writeDeclarations()
597 OS << "Expr *" << getLowerName() << "Expr;\n"; in writeDeclarations()
598 OS << "TypeSourceInfo *" << getLowerName() << "Type;\n"; in writeDeclarations()
599 OS << "};"; in writeDeclarations()
602 void writePCHReadArgs(raw_ostream &OS) const override { in writePCHReadArgs()
603 OS << "is" << getLowerName() << "Expr, " << getLowerName() << "Ptr"; in writePCHReadArgs()
606 void writePCHReadDecls(raw_ostream &OS) const override { in writePCHReadDecls()
607 OS << " bool is" << getLowerName() << "Expr = Record.readInt();\n"; in writePCHReadDecls()
608 OS << " void *" << getLowerName() << "Ptr;\n"; in writePCHReadDecls()
609 OS << " if (is" << getLowerName() << "Expr)\n"; in writePCHReadDecls()
610 OS << " " << getLowerName() << "Ptr = Record.readExpr();\n"; in writePCHReadDecls()
611 OS << " else\n"; in writePCHReadDecls()
612 OS << " " << getLowerName() in writePCHReadDecls()
616 void writePCHWrite(raw_ostream &OS) const override { in writePCHWrite()
617 OS << " Record.push_back(SA->is" << getUpperName() << "Expr());\n"; in writePCHWrite()
618 OS << " if (SA->is" << getUpperName() << "Expr())\n"; in writePCHWrite()
619 OS << " Record.AddStmt(SA->get" << getUpperName() << "Expr());\n"; in writePCHWrite()
620 OS << " else\n"; in writePCHWrite()
621 OS << " Record.AddTypeSourceInfo(SA->get" << getUpperName() in writePCHWrite()
630 void writeValue(raw_ostream &OS) const override { in writeValue()
631 OS << "\";\n"; in writeValue()
632 OS << " " << getLowerName() in writeValue()
633 << "Expr->printPretty(OS, nullptr, Policy);\n"; in writeValue()
634 OS << " OS << \""; in writeValue()
637 void writeDump(raw_ostream &OS) const override { in writeDump()
638 OS << " if (!SA->is" << getUpperName() << "Expr())\n"; in writeDump()
639 OS << " dumpType(SA->get" << getUpperName() in writeDump()
643 void writeDumpChildren(raw_ostream &OS) const override { in writeDumpChildren()
644 OS << " if (SA->is" << getUpperName() << "Expr())\n"; in writeDumpChildren()
645 OS << " Visit(SA->get" << getUpperName() << "Expr());\n"; in writeDumpChildren()
648 void writeHasChildren(raw_ostream &OS) const override { in writeHasChildren()
649 OS << "SA->is" << getUpperName() << "Expr()"; in writeHasChildren()
657 // Assumed to receive a parameter: raw_ostream OS.
658 virtual void writeValueImpl(raw_ostream &OS) const { in writeValueImpl()
659 OS << " OS << Val;\n"; in writeValueImpl()
661 // Assumed to receive a parameter: raw_ostream OS.
662 virtual void writeDumpImpl(raw_ostream &OS) const { in writeDumpImpl()
663 OS << " OS << \" \" << Val;\n"; in writeDumpImpl()
682 void writeAccessors(raw_ostream &OS) const override { in writeAccessors()
687 OS << " typedef " << Type << "* " << IteratorType << ";\n"; in writeAccessors()
688 OS << " " << IteratorType << " " << BeginFn << " const {" in writeAccessors()
690 OS << " " << IteratorType << " " << EndFn << " const {" in writeAccessors()
692 OS << " unsigned " << getLowerName() << "_size() const {" in writeAccessors()
694 OS << " llvm::iterator_range<" << IteratorType << "> " << RangeName in writeAccessors()
699 void writeSetter(raw_ostream &OS) const { in writeSetter()
700 OS << " void set" << getUpperName() << "(ASTContext &Ctx, "; in writeSetter()
701 writeCtorParameters(OS); in writeSetter()
702 OS << ") {\n"; in writeSetter()
703 OS << " " << ArgSizeName << " = " << getUpperName() << "Size;\n"; in writeSetter()
704 OS << " " << ArgName << " = new (Ctx, 16) " << getType() << "[" in writeSetter()
706 OS << " "; in writeSetter()
707 writeCtorBody(OS); in writeSetter()
708 OS << " }\n"; in writeSetter()
711 void writeCloneArgs(raw_ostream &OS) const override { in writeCloneArgs()
712 OS << ArgName << ", " << ArgSizeName; in writeCloneArgs()
715 void writeTemplateInstantiationArgs(raw_ostream &OS) const override { in writeTemplateInstantiationArgs()
717 OS << "A->" << getLowerName() << "_begin(), " in writeTemplateInstantiationArgs()
721 void writeASTVisitorTraversal(raw_ostream &OS) const override { in writeASTVisitorTraversal()
725 void writeCtorBody(raw_ostream &OS) const override { in writeCtorBody()
726 OS << " std::copy(" << getUpperName() << ", " << getUpperName() << " + " in writeCtorBody()
730 void writeCtorInitializers(raw_ostream &OS) const override { in writeCtorInitializers()
731 OS << ArgSizeName << "(" << getUpperName() << "Size), " in writeCtorInitializers()
736 void writeCtorDefaultInitializers(raw_ostream &OS) const override { in writeCtorDefaultInitializers()
737 OS << ArgSizeName << "(0), " << ArgName << "(nullptr)"; in writeCtorDefaultInitializers()
740 void writeCtorParameters(raw_ostream &OS) const override { in writeCtorParameters()
741 OS << getType() << " *" << getUpperName() << ", unsigned " in writeCtorParameters()
745 void writeImplicitCtorArgs(raw_ostream &OS) const override { in writeImplicitCtorArgs()
746 OS << getUpperName() << ", " << getUpperName() << "Size"; in writeImplicitCtorArgs()
749 void writeDeclarations(raw_ostream &OS) const override { in writeDeclarations()
750 OS << " unsigned " << ArgSizeName << ";\n"; in writeDeclarations()
751 OS << " " << getType() << " *" << ArgName << ";"; in writeDeclarations()
754 void writePCHReadDecls(raw_ostream &OS) const override { in writePCHReadDecls()
755 OS << " unsigned " << getLowerName() << "Size = Record.readInt();\n"; in writePCHReadDecls()
756 OS << " SmallVector<" << getType() << ", 4> " in writePCHReadDecls()
758 OS << " " << getLowerName() << ".reserve(" << getLowerName() in writePCHReadDecls()
768 OS << " SmallVector<" << StorageType << ", 4> " in writePCHReadDecls()
770 OS << " " << StorageName << ".reserve(" << getLowerName() in writePCHReadDecls()
774 OS << " for (unsigned i = 0; i != " << getLowerName() << "Size; ++i)\n"; in writePCHReadDecls()
776 OS << " " << StorageName << ".push_back(" << read << ");\n"; in writePCHReadDecls()
779 OS << " for (unsigned i = 0; i != " << getLowerName() << "Size; ++i)\n"; in writePCHReadDecls()
780 OS << " " << getLowerName() << ".push_back(" in writePCHReadDecls()
785 void writePCHReadArgs(raw_ostream &OS) const override { in writePCHReadArgs()
786 OS << getLowerName() << ".data(), " << getLowerName() << "Size"; in writePCHReadArgs()
789 void writePCHWrite(raw_ostream &OS) const override { in writePCHWrite()
790 OS << " Record.push_back(SA->" << getLowerName() << "_size());\n"; in writePCHWrite()
791 OS << " for (auto &Val : SA->" << RangeName << "())\n"; in writePCHWrite()
792 OS << " " << WritePCHRecord(Type, "Val"); in writePCHWrite()
795 void writeValue(raw_ostream &OS) const override { in writeValue()
796 OS << "\";\n"; in writeValue()
797 OS << " for (const auto &Val : " << RangeName << "()) {\n" in writeValue()
798 << " DelimitAttributeArgument(OS, IsFirstArgument);\n"; in writeValue()
799 writeValueImpl(OS); in writeValue()
800 OS << " }\n"; in writeValue()
801 OS << " OS << \""; in writeValue()
804 void writeDump(raw_ostream &OS) const override { in writeDump()
805 OS << " for (const auto &Val : SA->" << RangeName << "())\n"; in writeDump()
806 writeDumpImpl(OS); in writeDump()
815 void writeDump(raw_ostream &OS) const override { in writeDump()
816 OS << " for (" << getAttrName() << "Attr::" << getLowerName() in writeDump()
819 OS << " if (I->IsTarget && I->IsTargetSync)\n"; in writeDump()
820 OS << " OS << \" Target_TargetSync\";\n"; in writeDump()
821 OS << " else if (I->IsTarget)\n"; in writeDump()
822 OS << " OS << \" Target\";\n"; in writeDump()
823 OS << " else\n"; in writeDump()
824 OS << " OS << \" TargetSync\";\n"; in writeDump()
825 OS << " }\n"; in writeDump()
828 void writePCHReadDecls(raw_ostream &OS) const override { in writePCHReadDecls()
829 OS << " unsigned " << getLowerName() << "Size = Record.readInt();\n"; in writePCHReadDecls()
830 OS << " SmallVector<OMPInteropInfo, 4> " << getLowerName() << ";\n"; in writePCHReadDecls()
831 OS << " " << getLowerName() << ".reserve(" << getLowerName() in writePCHReadDecls()
833 OS << " for (unsigned I = 0, E = " << getLowerName() << "Size; "; in writePCHReadDecls()
834 OS << "I != E; ++I) {\n"; in writePCHReadDecls()
835 OS << " bool IsTarget = Record.readBool();\n"; in writePCHReadDecls()
836 OS << " bool IsTargetSync = Record.readBool();\n"; in writePCHReadDecls()
837 OS << " " << getLowerName() in writePCHReadDecls()
839 OS << " }\n"; in writePCHReadDecls()
842 void writePCHWrite(raw_ostream &OS) const override { in writePCHWrite()
843 OS << " Record.push_back(SA->" << getLowerName() << "_size());\n"; in writePCHWrite()
844 OS << " for (" << getAttrName() << "Attr::" << getLowerName() in writePCHWrite()
847 OS << " Record.writeBool(I->IsTarget);\n"; in writePCHWrite()
848 OS << " Record.writeBool(I->IsTargetSync);\n"; in writePCHWrite()
849 OS << " }\n"; in writePCHWrite()
859 void writeValueImpl(raw_ostream &OS) const override { in writeValueImpl()
860 OS << " OS << Val.getSourceIndex();\n"; in writeValueImpl()
863 void writeDumpImpl(raw_ostream &OS) const override { in writeDumpImpl()
864 OS << " OS << \" \" << Val.getSourceIndex();\n"; in writeDumpImpl()
901 void writeAccessors(raw_ostream &OS) const override { in writeAccessors()
902 OS << " " << type << " get" << getUpperName() << "() const {\n"; in writeAccessors()
903 OS << " return " << getLowerName() << ";\n"; in writeAccessors()
904 OS << " }"; in writeAccessors()
907 void writeCloneArgs(raw_ostream &OS) const override { in writeCloneArgs()
908 OS << getLowerName(); in writeCloneArgs()
911 void writeTemplateInstantiationArgs(raw_ostream &OS) const override { in writeTemplateInstantiationArgs()
912 OS << "A->get" << getUpperName() << "()"; in writeTemplateInstantiationArgs()
914 void writeCtorInitializers(raw_ostream &OS) const override { in writeCtorInitializers()
915 OS << getLowerName() << "(" << getUpperName() << ")"; in writeCtorInitializers()
917 void writeCtorDefaultInitializers(raw_ostream &OS) const override { in writeCtorDefaultInitializers()
918 OS << getLowerName() << "(" << type << "(0))"; in writeCtorDefaultInitializers()
920 void writeCtorParameters(raw_ostream &OS) const override { in writeCtorParameters()
921 OS << type << " " << getUpperName(); in writeCtorParameters()
923 void writeDeclarations(raw_ostream &OS) const override { in writeDeclarations()
928 OS << "public:\n"; in writeDeclarations()
929 OS << " enum " << type << " {\n"; in writeDeclarations()
931 OS << " " << *i << ",\n"; in writeDeclarations()
932 OS << " " << *e << "\n"; in writeDeclarations()
933 OS << " };\n"; in writeDeclarations()
934 OS << "private:\n"; in writeDeclarations()
935 OS << " " << type << " " << getLowerName() << ";"; in writeDeclarations()
938 void writePCHReadDecls(raw_ostream &OS) const override { in writePCHReadDecls()
939 OS << " " << getAttrName() << "Attr::" << type << " " << getLowerName() in writePCHReadDecls()
944 void writePCHReadArgs(raw_ostream &OS) const override { in writePCHReadArgs()
945 OS << getLowerName(); in writePCHReadArgs()
948 void writePCHWrite(raw_ostream &OS) const override { in writePCHWrite()
949 OS << "Record.push_back(SA->get" << getUpperName() << "());\n"; in writePCHWrite()
952 void writeValue(raw_ostream &OS) const override { in writeValue()
956 OS << "\\\"\" << " << getAttrName() << "Attr::Convert" << type << "ToStr(get" in writeValue()
960 void writeDump(raw_ostream &OS) const override { in writeDump()
961 OS << " switch(SA->get" << getUpperName() << "()) {\n"; in writeDump()
963 OS << " case " << getAttrName() << "Attr::" << I << ":\n"; in writeDump()
964 OS << " OS << \" " << I << "\";\n"; in writeDump()
965 OS << " break;\n"; in writeDump()
967 OS << " }\n"; in writeDump()
970 void writeConversion(raw_ostream &OS, bool Header) const { in writeConversion() argument
972 OS << " static bool ConvertStrTo" << type << "(StringRef Val, " << type in writeConversion()
974 OS << " static const char *Convert" << type << "ToStr(" << type in writeConversion()
979 OS << "bool " << getAttrName() << "Attr::ConvertStrTo" << type in writeConversion()
981 OS << " std::optional<" << type in writeConversion()
983 OS << type << ">>(Val)\n"; in writeConversion()
985 OS << " .Case(\"" << values[I] << "\", "; in writeConversion()
986 OS << getAttrName() << "Attr::" << enums[I] << ")\n"; in writeConversion()
988 OS << " .Default(std::optional<" << type << ">());\n"; in writeConversion()
989 OS << " if (R) {\n"; in writeConversion()
990 OS << " Out = *R;\n return true;\n }\n"; in writeConversion()
991 OS << " return false;\n"; in writeConversion()
992 OS << "}\n\n"; in writeConversion()
998 OS << "const char *" << getAttrName() << "Attr::Convert" << type in writeConversion()
1004 OS << " case " << getAttrName() << "Attr::" << enums[I] in writeConversion()
1007 OS << " }\n" in writeConversion()
1018 void writeValueImpl(raw_ostream &OS) const override { in writeValueImpl()
1022 OS << " OS << \"\\\"\" << " << getAttrName() << "Attr::Convert" << type in writeValueImpl()
1042 void writeDeclarations(raw_ostream &OS) const override { in writeDeclarations()
1047 OS << "public:\n"; in writeDeclarations()
1048 OS << " enum " << type << " {\n"; in writeDeclarations()
1050 OS << " " << *i << ",\n"; in writeDeclarations()
1051 OS << " " << *e << "\n"; in writeDeclarations()
1052 OS << " };\n"; in writeDeclarations()
1053 OS << "private:\n"; in writeDeclarations()
1055 VariadicArgument::writeDeclarations(OS); in writeDeclarations()
1058 void writeDump(raw_ostream &OS) const override { in writeDump()
1059 OS << " for (" << getAttrName() << "Attr::" << getLowerName() in writeDump()
1062 OS << " switch(*I) {\n"; in writeDump()
1064 OS << " case " << getAttrName() << "Attr::" << UI << ":\n"; in writeDump()
1065 OS << " OS << \" " << UI << "\";\n"; in writeDump()
1066 OS << " break;\n"; in writeDump()
1068 OS << " }\n"; in writeDump()
1069 OS << " }\n"; in writeDump()
1072 void writePCHReadDecls(raw_ostream &OS) const override { in writePCHReadDecls()
1073 OS << " unsigned " << getLowerName() << "Size = Record.readInt();\n"; in writePCHReadDecls()
1074 OS << " SmallVector<" << QualifiedTypeName << ", 4> " << getLowerName() in writePCHReadDecls()
1076 OS << " " << getLowerName() << ".reserve(" << getLowerName() in writePCHReadDecls()
1078 OS << " for (unsigned i = " << getLowerName() << "Size; i; --i)\n"; in writePCHReadDecls()
1079 OS << " " << getLowerName() << ".push_back(" << "static_cast<" in writePCHReadDecls()
1083 void writePCHWrite(raw_ostream &OS) const override { in writePCHWrite()
1084 OS << " Record.push_back(SA->" << getLowerName() << "_size());\n"; in writePCHWrite()
1085 OS << " for (" << getAttrName() << "Attr::" << getLowerName() in writePCHWrite()
1088 OS << " " << WritePCHRecord(QualifiedTypeName, "(*i)"); in writePCHWrite()
1091 void writeConversion(raw_ostream &OS, bool Header) const { in writeConversion() argument
1093 OS << " static bool ConvertStrTo" << type << "(StringRef Val, " << type in writeConversion()
1095 OS << " static const char *Convert" << type << "ToStr(" << type in writeConversion()
1100 OS << "bool " << getAttrName() << "Attr::ConvertStrTo" << type in writeConversion()
1102 OS << type << " &Out) {\n"; in writeConversion()
1103 OS << " std::optional<" << type in writeConversion()
1105 OS << type << ">>(Val)\n"; in writeConversion()
1107 OS << " .Case(\"" << values[I] << "\", "; in writeConversion()
1108 OS << getAttrName() << "Attr::" << enums[I] << ")\n"; in writeConversion()
1110 OS << " .Default(std::optional<" << type << ">());\n"; in writeConversion()
1111 OS << " if (R) {\n"; in writeConversion()
1112 OS << " Out = *R;\n return true;\n }\n"; in writeConversion()
1113 OS << " return false;\n"; in writeConversion()
1114 OS << "}\n\n"; in writeConversion()
1116 OS << "const char *" << getAttrName() << "Attr::Convert" << type in writeConversion()
1122 OS << " case " << getAttrName() << "Attr::" << enums[I] in writeConversion()
1125 OS << " }\n" in writeConversion()
1137 void writeAccessors(raw_ostream &OS) const override { in writeAccessors()
1138 OS << " VersionTuple get" << getUpperName() << "() const {\n"; in writeAccessors()
1139 OS << " return " << getLowerName() << ";\n"; in writeAccessors()
1140 OS << " }\n"; in writeAccessors()
1141 OS << " void set" << getUpperName() in writeAccessors()
1143 OS << " " << getLowerName() << " = V;\n"; in writeAccessors()
1144 OS << " }"; in writeAccessors()
1147 void writeCloneArgs(raw_ostream &OS) const override { in writeCloneArgs()
1148 OS << "get" << getUpperName() << "()"; in writeCloneArgs()
1151 void writeTemplateInstantiationArgs(raw_ostream &OS) const override { in writeTemplateInstantiationArgs()
1152 OS << "A->get" << getUpperName() << "()"; in writeTemplateInstantiationArgs()
1155 void writeCtorInitializers(raw_ostream &OS) const override { in writeCtorInitializers()
1156 OS << getLowerName() << "(" << getUpperName() << ")"; in writeCtorInitializers()
1159 void writeCtorDefaultInitializers(raw_ostream &OS) const override { in writeCtorDefaultInitializers()
1160 OS << getLowerName() << "()"; in writeCtorDefaultInitializers()
1163 void writeCtorParameters(raw_ostream &OS) const override { in writeCtorParameters()
1164 OS << "VersionTuple " << getUpperName(); in writeCtorParameters()
1167 void writeDeclarations(raw_ostream &OS) const override { in writeDeclarations()
1168 OS << "VersionTuple " << getLowerName() << ";\n"; in writeDeclarations()
1171 void writePCHReadDecls(raw_ostream &OS) const override { in writePCHReadDecls()
1172 OS << " VersionTuple " << getLowerName() in writePCHReadDecls()
1176 void writePCHReadArgs(raw_ostream &OS) const override { in writePCHReadArgs()
1177 OS << getLowerName(); in writePCHReadArgs()
1180 void writePCHWrite(raw_ostream &OS) const override { in writePCHWrite()
1181 OS << " Record.AddVersionTuple(SA->get" << getUpperName() << "());\n"; in writePCHWrite()
1184 void writeValue(raw_ostream &OS) const override { in writeValue()
1185 OS << getLowerName() << "=\" << get" << getUpperName() << "() << \""; in writeValue()
1188 void writeDump(raw_ostream &OS) const override { in writeDump()
1189 OS << " OS << \" \" << SA->get" << getUpperName() << "();\n"; in writeDump()
1199 void writeASTVisitorTraversal(raw_ostream &OS) const override { in writeASTVisitorTraversal()
1200 OS << " if (!" in writeASTVisitorTraversal()
1202 OS << " return false;\n"; in writeASTVisitorTraversal()
1205 void writeTemplateInstantiationArgs(raw_ostream &OS) const override { in writeTemplateInstantiationArgs()
1206 OS << "tempInst" << getUpperName(); in writeTemplateInstantiationArgs()
1209 void writeTemplateInstantiation(raw_ostream &OS) const override { in writeTemplateInstantiation()
1210 OS << " " << getType() << " tempInst" << getUpperName() << ";\n"; in writeTemplateInstantiation()
1211 OS << " {\n"; in writeTemplateInstantiation()
1212 OS << " EnterExpressionEvaluationContext " in writeTemplateInstantiation()
1214 OS << " ExprResult " << "Result = S.SubstExpr(" in writeTemplateInstantiation()
1216 OS << " if (Result.isInvalid())\n"; in writeTemplateInstantiation()
1217 OS << " return nullptr;\n"; in writeTemplateInstantiation()
1218 OS << " tempInst" << getUpperName() << " = Result.get();\n"; in writeTemplateInstantiation()
1219 OS << " }\n"; in writeTemplateInstantiation()
1222 void writeValue(raw_ostream &OS) const override { in writeValue()
1223 OS << "\";\n"; in writeValue()
1224 OS << " get" << getUpperName() in writeValue()
1225 << "()->printPretty(OS, nullptr, Policy);\n"; in writeValue()
1226 OS << " OS << \""; in writeValue()
1229 void writeDump(raw_ostream &OS) const override {} in writeDump()
1231 void writeDumpChildren(raw_ostream &OS) const override { in writeDumpChildren()
1232 OS << " Visit(SA->get" << getUpperName() << "());\n"; in writeDumpChildren()
1235 void writeHasChildren(raw_ostream &OS) const override { OS << "true"; } in writeHasChildren()
1247 void writeASTVisitorTraversal(raw_ostream &OS) const override { in writeASTVisitorTraversal()
1248 OS << " {\n"; in writeASTVisitorTraversal()
1249 OS << " " << getType() << " *I = A->" << getLowerName() in writeASTVisitorTraversal()
1251 OS << " " << getType() << " *E = A->" << getLowerName() in writeASTVisitorTraversal()
1253 OS << " for (; I != E; ++I) {\n"; in writeASTVisitorTraversal()
1254 OS << " if (!getDerived().TraverseStmt(*I))\n"; in writeASTVisitorTraversal()
1255 OS << " return false;\n"; in writeASTVisitorTraversal()
1256 OS << " }\n"; in writeASTVisitorTraversal()
1257 OS << " }\n"; in writeASTVisitorTraversal()
1260 void writeTemplateInstantiationArgs(raw_ostream &OS) const override { in writeTemplateInstantiationArgs()
1261 OS << "tempInst" << getUpperName() << ", " in writeTemplateInstantiationArgs()
1265 void writeTemplateInstantiation(raw_ostream &OS) const override { in writeTemplateInstantiation()
1266 OS << " auto *tempInst" << getUpperName() in writeTemplateInstantiation()
1269 OS << " {\n"; in writeTemplateInstantiation()
1270 OS << " EnterExpressionEvaluationContext " in writeTemplateInstantiation()
1272 OS << " " << getType() << " *TI = tempInst" << getUpperName() in writeTemplateInstantiation()
1274 OS << " " << getType() << " *I = A->" << getLowerName() in writeTemplateInstantiation()
1276 OS << " " << getType() << " *E = A->" << getLowerName() in writeTemplateInstantiation()
1278 OS << " for (; I != E; ++I, ++TI) {\n"; in writeTemplateInstantiation()
1279 OS << " ExprResult Result = S.SubstExpr(*I, TemplateArgs);\n"; in writeTemplateInstantiation()
1280 OS << " if (Result.isInvalid())\n"; in writeTemplateInstantiation()
1281 OS << " return nullptr;\n"; in writeTemplateInstantiation()
1282 OS << " *TI = Result.get();\n"; in writeTemplateInstantiation()
1283 OS << " }\n"; in writeTemplateInstantiation()
1284 OS << " }\n"; in writeTemplateInstantiation()
1287 void writeDump(raw_ostream &OS) const override {} in writeDump()
1289 void writeDumpChildren(raw_ostream &OS) const override { in writeDumpChildren()
1290 OS << " for (" << getAttrName() << "Attr::" << getLowerName() in writeDumpChildren()
1293 OS << " Visit(*I);\n"; in writeDumpChildren()
1296 void writeHasChildren(raw_ostream &OS) const override { in writeHasChildren()
1297 OS << "SA->" << getLowerName() << "_begin() != " in writeHasChildren()
1315 void writeCtorBody(raw_ostream &OS) const override { in writeCtorBody()
1316 OS << " for (size_t I = 0, E = " << getArgSizeName() << "; I != E;\n" in writeCtorBody()
1327 void writeValueImpl(raw_ostream &OS) const override { in writeValueImpl()
1328 OS << " OS << \"\\\"\" << Val << \"\\\"\";\n"; in writeValueImpl()
1338 void writeAccessors(raw_ostream &OS) const override { in writeAccessors()
1339 OS << " QualType get" << getUpperName() << "() const {\n"; in writeAccessors()
1340 OS << " return " << getLowerName() << "->getType();\n"; in writeAccessors()
1341 OS << " }"; in writeAccessors()
1342 OS << " " << getType() << " get" << getUpperName() << "Loc() const {\n"; in writeAccessors()
1343 OS << " return " << getLowerName() << ";\n"; in writeAccessors()
1344 OS << " }"; in writeAccessors()
1347 void writeASTVisitorTraversal(raw_ostream &OS) const override { in writeASTVisitorTraversal()
1348 OS << " if (auto *TSI = A->get" << getUpperName() << "Loc())\n"; in writeASTVisitorTraversal()
1349 OS << " if (!getDerived().TraverseTypeLoc(TSI->getTypeLoc()))\n"; in writeASTVisitorTraversal()
1350 OS << " return false;\n"; in writeASTVisitorTraversal()
1353 void writeTemplateInstantiation(raw_ostream &OS) const override { in writeTemplateInstantiation()
1354 OS << " " << getType() << " tempInst" << getUpperName() << " =\n"; in writeTemplateInstantiation()
1355 OS << " S.SubstType(A->get" << getUpperName() << "Loc(), " in writeTemplateInstantiation()
1357 OS << " if (!tempInst" << getUpperName() << ")\n"; in writeTemplateInstantiation()
1358 OS << " return nullptr;\n"; in writeTemplateInstantiation()
1361 void writeTemplateInstantiationArgs(raw_ostream &OS) const override { in writeTemplateInstantiationArgs()
1362 OS << "tempInst" << getUpperName(); in writeTemplateInstantiationArgs()
1365 void writePCHWrite(raw_ostream &OS) const override { in writePCHWrite()
1366 OS << " " in writePCHWrite()
1451 static void writeAvailabilityValue(raw_ostream &OS) { in writeAvailabilityValue() argument
1452 OS << "\" << getPlatform()->getName();\n" in writeAvailabilityValue()
1453 << " if (getStrict()) OS << \", strict\";\n" in writeAvailabilityValue()
1454 << " if (!getIntroduced().empty()) OS << \", introduced=\" << getIntroduced();\n" in writeAvailabilityValue()
1455 << " if (!getDeprecated().empty()) OS << \", deprecated=\" << getDeprecated();\n" in writeAvailabilityValue()
1456 << " if (!getObsoleted().empty()) OS << \", obsoleted=\" << getObsoleted();\n" in writeAvailabilityValue()
1457 << " if (getUnavailable()) OS << \", unavailable\";\n" in writeAvailabilityValue()
1458 << " OS << \""; in writeAvailabilityValue()
1461 static void writeDeprecatedAttrValue(raw_ostream &OS, std::string &Variety) { in writeDeprecatedAttrValue() argument
1462 OS << "\\\"\" << getMessage() << \"\\\"\";\n"; in writeDeprecatedAttrValue()
1465 OS << " if (!getReplacement().empty()) OS << \", \\\"\"" in writeDeprecatedAttrValue()
1467 OS << " OS << \""; in writeDeprecatedAttrValue()
1470 static void writeGetSpellingFunction(const Record &R, raw_ostream &OS) { in writeGetSpellingFunction() argument
1473 OS << "const char *" << R.getName() << "Attr::getSpelling() const {\n"; in writeGetSpellingFunction()
1475 OS << " return \"(No spelling)\";\n}\n\n"; in writeGetSpellingFunction()
1479 OS << " switch (getAttributeSpellingListIndex()) {\n" in writeGetSpellingFunction()
1485 OS << " case " << I << ":\n" in writeGetSpellingFunction()
1488 OS << " }\n"; in writeGetSpellingFunction()
1490 OS << "}\n\n"; in writeGetSpellingFunction()
1496 raw_ostream &OS) { in writePrettyPrintFunction() argument
1499 OS << "void " << R.getName() << "Attr::printPretty(" in writePrettyPrintFunction()
1500 << "raw_ostream &OS, const PrintingPolicy &Policy) const {\n"; in writePrettyPrintFunction()
1503 OS << "}\n\n"; in writePrettyPrintFunction()
1507 OS << " bool IsFirstArgument = true; (void)IsFirstArgument;\n" in writePrettyPrintFunction()
1560 OS << " case " << I << " : {\n" in writePrettyPrintFunction()
1561 << " OS << \"" << Prefix << Spelling << "\";\n"; in writePrettyPrintFunction()
1564 OS << " printPrettyPragma(OS, Policy);\n"; in writePrettyPrintFunction()
1565 OS << " OS << \"\\n\";"; in writePrettyPrintFunction()
1566 OS << " break;\n"; in writePrettyPrintFunction()
1567 OS << " }\n"; in writePrettyPrintFunction()
1572 OS << " OS << \"("; in writePrettyPrintFunction()
1573 writeAvailabilityValue(OS); in writePrettyPrintFunction()
1574 OS << ")\";\n"; in writePrettyPrintFunction()
1576 OS << " OS << \"("; in writePrettyPrintFunction()
1577 writeDeprecatedAttrValue(OS, Variety); in writePrettyPrintFunction()
1578 OS << ")\";\n"; in writePrettyPrintFunction()
1595 OS << " if (" << arg->getIsOmitted() << ")\n" in writePrettyPrintFunction()
1604 OS << " if (!(" << IsOmitted << ")) {\n"; in writePrettyPrintFunction()
1607 OS << " DelimitAttributeArgument(OS, IsFirstArgument);\n"; in writePrettyPrintFunction()
1608 OS << " OS << \""; in writePrettyPrintFunction()
1609 arg->writeValue(OS); in writePrettyPrintFunction()
1610 OS << "\";\n"; in writePrettyPrintFunction()
1612 OS << " }\n"; in writePrettyPrintFunction()
1616 OS << " if (!IsFirstArgument)\n" in writePrettyPrintFunction()
1617 << " OS << \")\";\n"; in writePrettyPrintFunction()
1619 OS << " OS << \"" << Suffix << "\";\n" in writePrettyPrintFunction()
1625 OS << "}\n"; in writePrettyPrintFunction()
1627 OS << "}\n\n"; in writePrettyPrintFunction()
1651 static void writeAttrAccessorDefinition(const Record &R, raw_ostream &OS) { in writeAttrAccessorDefinition() argument
1663 OS << " bool " << Name in writeAttrAccessorDefinition()
1666 OS << getSpellingListIndex(SpellingList, Spellings[Index]); in writeAttrAccessorDefinition()
1668 OS << " ||\n getAttributeSpellingListIndex() == "; in writeAttrAccessorDefinition()
1670 OS << "; }\n"; in writeAttrAccessorDefinition()
1748 raw_ostream &OS) { in WriteSemanticSpellingSwitch() argument
1749 OS << " switch (" << VarName << ") {\n default: " in WriteSemanticSpellingSwitch()
1752 OS << " case " << I.first << ": return " << I.second << ";\n"; in WriteSemanticSpellingSwitch()
1753 OS << " }\n"; in WriteSemanticSpellingSwitch()
1757 static void emitClangAttrLateParsedList(RecordKeeper &Records, raw_ostream &OS) { in emitClangAttrLateParsedList() argument
1758 OS << "#if defined(CLANG_ATTR_LATE_PARSED_LIST)\n"; in emitClangAttrLateParsedList()
1771 OS << ".Case(\"" << I.name() << "\", " << LateParsed << ")\n"; in emitClangAttrLateParsedList()
1775 OS << "#endif // CLANG_ATTR_LATE_PARSED_LIST\n\n"; in emitClangAttrLateParsedList()
1901 void emitMatchRuleList(raw_ostream &OS);
1903 void generateStrictConformsTo(const Record &Attr, raw_ostream &OS);
1905 void generateParsingHelpers(raw_ostream &OS);
2005 void PragmaClangAttributeSupport::emitMatchRuleList(raw_ostream &OS) { in emitMatchRuleList() argument
2006 OS << "#ifndef ATTR_MATCH_SUB_RULE\n"; in emitMatchRuleList()
2007 OS << "#define ATTR_MATCH_SUB_RULE(Value, Spelling, IsAbstract, Parent, " in emitMatchRuleList()
2010 OS << "#endif\n"; in emitMatchRuleList()
2012 OS << (Rule.isSubRule() ? "ATTR_MATCH_SUB_RULE" : "ATTR_MATCH_RULE") << '('; in emitMatchRuleList()
2013 OS << Rule.getEnumValueName() << ", \"" << Rule.getSpelling() << "\", " in emitMatchRuleList()
2016 OS << ", " in emitMatchRuleList()
2019 OS << ")\n"; in emitMatchRuleList()
2021 OS << "#undef ATTR_MATCH_SUB_RULE\n"; in emitMatchRuleList()
2089 raw_ostream &OS) { in generateStrictConformsTo() argument
2094 OS << "void getPragmaAttributeMatchRules(" in generateStrictConformsTo()
2110 OS << " MatchRules.push_back(std::make_pair(" << Rule.getEnumValue() in generateStrictConformsTo()
2115 OS << "}\n\n"; in generateStrictConformsTo()
2118 void PragmaClangAttributeSupport::generateParsingHelpers(raw_ostream &OS) { in generateParsingHelpers() argument
2120 OS << "std::optional<attr::SubjectMatchRule> " in generateParsingHelpers()
2122 OS << " return std::nullopt;\n"; in generateParsingHelpers()
2123 OS << "}\n\n"; in generateParsingHelpers()
2134 OS << "std::optional<attr::SubjectMatchRule> " in generateParsingHelpers()
2138 OS << " if (IsUnless)\n"; in generateParsingHelpers()
2139 OS << " return " in generateParsingHelpers()
2143 OS << " Case(\"" << Rule.getName() << "\", " << Rule.getEnumValue() in generateParsingHelpers()
2146 OS << " Default(std::nullopt);\n"; in generateParsingHelpers()
2147 OS << " return " in generateParsingHelpers()
2151 OS << " Case(\"" << Rule.getName() << "\", " << Rule.getEnumValue() in generateParsingHelpers()
2154 OS << " Default(std::nullopt);\n"; in generateParsingHelpers()
2155 OS << "}\n\n"; in generateParsingHelpers()
2159 OS << "std::pair<std::optional<attr::SubjectMatchRule>, " in generateParsingHelpers()
2162 OS << " return " in generateParsingHelpers()
2175 OS << " Case(\"" << Rule.getName() << "\", std::make_pair(" in generateParsingHelpers()
2178 OS << " Default(std::make_pair(std::nullopt, " in generateParsingHelpers()
2180 OS << "}\n\n"; in generateParsingHelpers()
2183 OS << "const char *validAttributeSubjectMatchSubRules(" in generateParsingHelpers()
2185 OS << " switch (Rule) {\n"; in generateParsingHelpers()
2187 OS << " case " in generateParsingHelpers()
2190 OS << " return \"'"; in generateParsingHelpers()
2194 OS << ", '"; in generateParsingHelpers()
2197 OS << "unless("; in generateParsingHelpers()
2198 OS << Rule.getName(); in generateParsingHelpers()
2200 OS << ')'; in generateParsingHelpers()
2201 OS << "'"; in generateParsingHelpers()
2203 OS << "\";\n"; in generateParsingHelpers()
2205 OS << " default: return nullptr;\n"; in generateParsingHelpers()
2206 OS << " }\n"; in generateParsingHelpers()
2207 OS << "}\n\n"; in generateParsingHelpers()
2226 static void emitClangAttrTypeArgList(RecordKeeper &Records, raw_ostream &OS) { in emitClangAttrTypeArgList() argument
2227 OS << "#if defined(CLANG_ATTR_TYPE_ARG_LIST)\n"; in emitClangAttrTypeArgList()
2241 OS << ".Case(\"" << S.name() << "\", " << "true" << ")\n"; in emitClangAttrTypeArgList()
2244 OS << "#endif // CLANG_ATTR_TYPE_ARG_LIST\n\n"; in emitClangAttrTypeArgList()
2249 static void emitClangAttrArgContextList(RecordKeeper &Records, raw_ostream &OS) { in emitClangAttrArgContextList() argument
2250 OS << "#if defined(CLANG_ATTR_ARG_CONTEXT_LIST)\n"; in emitClangAttrArgContextList()
2260 OS << ".Case(\"" << S.name() << "\", " << "true" << ")\n"; in emitClangAttrArgContextList()
2263 OS << "#endif // CLANG_ATTR_ARG_CONTEXT_LIST\n\n"; in emitClangAttrArgContextList()
2293 raw_ostream &OS) { in emitClangAttrVariadicIdentifierArgList() argument
2294 OS << "#if defined(CLANG_ATTR_VARIADIC_IDENTIFIER_ARG_LIST)\n"; in emitClangAttrVariadicIdentifierArgList()
2304 OS << ".Case(\"" << S.name() << "\", " in emitClangAttrVariadicIdentifierArgList()
2309 OS << "#endif // CLANG_ATTR_VARIADIC_IDENTIFIER_ARG_LIST\n\n"; in emitClangAttrVariadicIdentifierArgList()
2313 static void emitClangAttrIdentifierArgList(RecordKeeper &Records, raw_ostream &OS) { in emitClangAttrIdentifierArgList() argument
2314 OS << "#if defined(CLANG_ATTR_IDENTIFIER_ARG_LIST)\n"; in emitClangAttrIdentifierArgList()
2325 OS << ".Case(\"" << S.name() << "\", " << "true" << ")\n"; in emitClangAttrIdentifierArgList()
2328 OS << "#endif // CLANG_ATTR_IDENTIFIER_ARG_LIST\n\n"; in emitClangAttrIdentifierArgList()
2340 raw_ostream &OS) { in emitClangAttrThisIsaIdentifierArgList() argument
2341 OS << "#if defined(CLANG_ATTR_THIS_ISA_IDENTIFIER_ARG_LIST)\n"; in emitClangAttrThisIsaIdentifierArgList()
2351 OS << ".Case(\"" << S.name() << "\", " in emitClangAttrThisIsaIdentifierArgList()
2356 OS << "#endif // CLANG_ATTR_THIS_ISA_IDENTIFIER_ARG_LIST\n\n"; in emitClangAttrThisIsaIdentifierArgList()
2360 raw_ostream &OS) { in emitClangAttrAcceptsExprPack() argument
2361 OS << "#if defined(CLANG_ATTR_ACCEPTS_EXPR_PACK)\n"; in emitClangAttrAcceptsExprPack()
2370 OS << ".Case(\"" << S.name() << "\", true)\n"; in emitClangAttrAcceptsExprPack()
2373 OS << "#endif // CLANG_ATTR_ACCEPTS_EXPR_PACK\n\n"; in emitClangAttrAcceptsExprPack()
2376 static void emitAttributes(RecordKeeper &Records, raw_ostream &OS, in emitAttributes() argument
2384 OS << "static inline void DelimitAttributeArgument(" in emitAttributes()
2385 << "raw_ostream& OS, bool& IsFirst) {\n" in emitAttributes()
2388 << " OS << \"(\";\n" in emitAttributes()
2390 << " OS << \", \";\n" in emitAttributes()
2424 OS << "class " << R.getName() << "Attr : public " << SuperName << " {\n"; in emitAttributes()
2426 OS << "\n// " << R.getName() << "Attr implementation\n\n"; in emitAttributes()
2456 Args.back()->writeDeclarations(OS); in emitAttributes()
2457 OS << "\n\n"; in emitAttributes()
2473 DelayedArgs->writeDeclarations(OS); in emitAttributes()
2474 OS << "\n\n"; in emitAttributes()
2479 OS << "public:\n"; in emitAttributes()
2496 OS << SpellingEnum; in emitAttributes()
2506 OS << " static "; in emitAttributes()
2507 OS << R.getName() << "Attr *"; in emitAttributes()
2509 OS << R.getName() << "Attr::"; in emitAttributes()
2510 OS << "Create"; in emitAttributes()
2512 OS << "Implicit"; in emitAttributes()
2514 OS << "WithDelayedArgs"; in emitAttributes()
2515 OS << "("; in emitAttributes()
2516 OS << "ASTContext &Ctx"; in emitAttributes()
2521 OS << ", "; in emitAttributes()
2522 ai->writeCtorParameters(OS); in emitAttributes()
2525 OS << ", "; in emitAttributes()
2526 DelayedArgs->writeCtorParameters(OS); in emitAttributes()
2528 OS << ", const AttributeCommonInfo &CommonInfo"; in emitAttributes()
2530 OS << " = {SourceRange{}}"; in emitAttributes()
2531 OS << ")"; in emitAttributes()
2533 OS << ";\n"; in emitAttributes()
2537 OS << " {\n"; in emitAttributes()
2538 OS << " auto *A = new (Ctx) " << R.getName(); in emitAttributes()
2539 OS << "Attr(Ctx, CommonInfo"; in emitAttributes()
2544 OS << ", "; in emitAttributes()
2545 ai->writeImplicitCtorArgs(OS); in emitAttributes()
2548 OS << ");\n"; in emitAttributes()
2550 OS << " A->setImplicit(true);\n"; in emitAttributes()
2553 OS << " if (!A->isAttributeSpellingListCalculated() && " in emitAttributes()
2555 OS << " A->setAttributeSpellingListIndex(0);\n"; in emitAttributes()
2558 OS << " A->setDelayedArgs(Ctx, "; in emitAttributes()
2559 DelayedArgs->writeImplicitCtorArgs(OS); in emitAttributes()
2560 OS << ");\n"; in emitAttributes()
2562 OS << " return A;\n}\n\n"; in emitAttributes()
2568 OS << " static "; in emitAttributes()
2569 OS << R.getName() << "Attr *"; in emitAttributes()
2571 OS << R.getName() << "Attr::"; in emitAttributes()
2572 OS << "Create"; in emitAttributes()
2574 OS << "Implicit"; in emitAttributes()
2576 OS << "WithDelayedArgs"; in emitAttributes()
2577 OS << "("; in emitAttributes()
2578 OS << "ASTContext &Ctx"; in emitAttributes()
2583 OS << ", "; in emitAttributes()
2584 ai->writeCtorParameters(OS); in emitAttributes()
2587 OS << ", "; in emitAttributes()
2588 DelayedArgs->writeCtorParameters(OS); in emitAttributes()
2590 OS << ", SourceRange Range, AttributeCommonInfo::Syntax Syntax"; in emitAttributes()
2592 OS << ", " << R.getName() << "Attr::Spelling S"; in emitAttributes()
2594 OS << " = static_cast<Spelling>(SpellingNotCalculated)"; in emitAttributes()
2596 OS << ")"; in emitAttributes()
2598 OS << ";\n"; in emitAttributes()
2602 OS << " {\n"; in emitAttributes()
2603 OS << " AttributeCommonInfo I(Range, "; in emitAttributes()
2606 OS << "AT_" << ParsedAttrSpellingItr->first; in emitAttributes()
2608 OS << "NoSemaHandlerAttribute"; in emitAttributes()
2610 OS << ", Syntax"; in emitAttributes()
2612 OS << ", S"; in emitAttributes()
2613 OS << ");\n"; in emitAttributes()
2614 OS << " return Create"; in emitAttributes()
2616 OS << "Implicit"; in emitAttributes()
2618 OS << "WithDelayedArgs"; in emitAttributes()
2619 OS << "(Ctx"; in emitAttributes()
2624 OS << ", "; in emitAttributes()
2625 ai->writeImplicitCtorArgs(OS); in emitAttributes()
2628 OS << ", "; in emitAttributes()
2629 DelayedArgs->writeImplicitCtorArgs(OS); in emitAttributes()
2631 OS << ", I);\n"; in emitAttributes()
2632 OS << "}\n\n"; in emitAttributes()
2643 OS << " // Factory methods\n"; in emitAttributes()
2669 OS << " "; in emitAttributes()
2671 OS << R.getName() << "Attr::"; in emitAttributes()
2672 OS << R.getName() in emitAttributes()
2674 OS << '\n'; in emitAttributes()
2678 OS << " , "; in emitAttributes()
2679 ai->writeCtorParameters(OS); in emitAttributes()
2680 OS << "\n"; in emitAttributes()
2683 OS << " )"; in emitAttributes()
2685 OS << ";\n"; in emitAttributes()
2688 OS << "\n : " << SuperName << "(Ctx, CommonInfo, "; in emitAttributes()
2689 OS << "attr::" << R.getName() << ", " in emitAttributes()
2692 OS << ", " in emitAttributes()
2696 OS << ")\n"; in emitAttributes()
2699 OS << " , "; in emitAttributes()
2701 ai->writeCtorDefaultInitializers(OS); in emitAttributes()
2703 ai->writeCtorInitializers(OS); in emitAttributes()
2705 OS << "\n"; in emitAttributes()
2708 OS << " , "; in emitAttributes()
2709 DelayedArgs->writeCtorDefaultInitializers(OS); in emitAttributes()
2710 OS << "\n"; in emitAttributes()
2713 OS << " {\n"; in emitAttributes()
2718 ai->writeCtorBody(OS); in emitAttributes()
2720 OS << "}\n\n"; in emitAttributes()
2724 OS << "\n // Constructors\n"; in emitAttributes()
2748 OS << '\n'; in emitAttributes()
2749 OS << " " << R.getName() << "Attr *clone(ASTContext &C) const;\n"; in emitAttributes()
2750 OS << " void printPretty(raw_ostream &OS,\n" in emitAttributes()
2752 OS << " const char *getSpelling() const;\n"; in emitAttributes()
2758 OS << " Spelling getSemanticSpelling() const;\n"; in emitAttributes()
2760 OS << R.getName() << "Attr::Spelling " << R.getName() in emitAttributes()
2763 SemanticToSyntacticMap, OS); in emitAttributes()
2764 OS << "}\n"; in emitAttributes()
2769 writeAttrAccessorDefinition(R, OS); in emitAttributes()
2773 ai->writeAccessors(OS); in emitAttributes()
2775 ai->writeAccessorDefinitions(OS); in emitAttributes()
2777 OS << "\n\n"; in emitAttributes()
2783 static_cast<const EnumArgument *>(ai.get())->writeConversion(OS, in emitAttributes()
2787 OS, Header); in emitAttributes()
2792 DelayedArgs->writeAccessors(OS); in emitAttributes()
2793 DelayedArgs->writeSetter(OS); in emitAttributes()
2796 OS << R.getValueAsString("AdditionalMembers"); in emitAttributes()
2797 OS << "\n\n"; in emitAttributes()
2799 OS << " static bool classof(const Attr *A) { return A->getKind() == " in emitAttributes()
2802 OS << "};\n\n"; in emitAttributes()
2805 DelayedArgs->writeAccessorDefinitions(OS); in emitAttributes()
2807 OS << R.getName() << "Attr *" << R.getName() in emitAttributes()
2809 OS << " auto *A = new (C) " << R.getName() << "Attr(C, *this"; in emitAttributes()
2811 OS << ", "; in emitAttributes()
2812 ai->writeCloneArgs(OS); in emitAttributes()
2814 OS << ");\n"; in emitAttributes()
2815 OS << " A->Inherited = Inherited;\n"; in emitAttributes()
2816 OS << " A->IsPackExpansion = IsPackExpansion;\n"; in emitAttributes()
2817 OS << " A->setImplicit(Implicit);\n"; in emitAttributes()
2819 OS << " A->setDelayedArgs(C, "; in emitAttributes()
2820 DelayedArgs->writeCloneArgs(OS); in emitAttributes()
2821 OS << ");\n"; in emitAttributes()
2823 OS << " return A;\n}\n\n"; in emitAttributes()
2825 writePrettyPrintFunction(R, Args, OS); in emitAttributes()
2826 writeGetSpellingFunction(R, OS); in emitAttributes()
2831 void clang::EmitClangAttrClass(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrClass() argument
2832 emitSourceFileHeader("Attribute classes' definitions", OS); in EmitClangAttrClass()
2834 OS << "#ifndef LLVM_CLANG_ATTR_CLASSES_INC\n"; in EmitClangAttrClass()
2835 OS << "#define LLVM_CLANG_ATTR_CLASSES_INC\n\n"; in EmitClangAttrClass()
2837 emitAttributes(Records, OS, true); in EmitClangAttrClass()
2839 OS << "#endif // LLVM_CLANG_ATTR_CLASSES_INC\n"; in EmitClangAttrClass()
2843 void clang::EmitClangAttrImpl(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrImpl() argument
2844 emitSourceFileHeader("Attribute classes' member function definitions", OS); in EmitClangAttrImpl()
2846 emitAttributes(Records, OS, false); in EmitClangAttrImpl()
2853 OS << " switch (getKind()) {\n"; in EmitClangAttrImpl()
2859 OS << " case attr::" << R.getName() << ":\n"; in EmitClangAttrImpl()
2860 OS << " return cast<" << R.getName() << "Attr>(this)->" << Method in EmitClangAttrImpl()
2863 OS << " }\n"; in EmitClangAttrImpl()
2864 OS << " llvm_unreachable(\"Unexpected attribute kind!\");\n"; in EmitClangAttrImpl()
2865 OS << "}\n\n"; in EmitClangAttrImpl()
2868 OS << "const char *Attr::getSpelling() const {\n"; in EmitClangAttrImpl()
2871 OS << "Attr *Attr::clone(ASTContext &C) const {\n"; in EmitClangAttrImpl()
2874 OS << "void Attr::printPretty(raw_ostream &OS, " in EmitClangAttrImpl()
2876 EmitFunc("printPretty(OS, Policy)"); in EmitClangAttrImpl()
2879 static void emitAttrList(raw_ostream &OS, StringRef Class, in emitAttrList() argument
2882 OS << Class << "(" << Cur->getName() << ")\n"; in emitAttrList()
2915 static void emitDefaultDefine(raw_ostream &OS, StringRef name, in emitDefaultDefine() argument
2917 OS << "#ifndef " << name << "\n"; in emitDefaultDefine()
2918 OS << "#define " << name << "(NAME) "; in emitDefaultDefine()
2919 if (superName) OS << superName << "(NAME)"; in emitDefaultDefine()
2920 OS << "\n#endif\n\n"; in emitDefaultDefine()
2936 void emitDefaultDefines(raw_ostream &OS) const { in emitDefaultDefines()
2939 emitDefaultDefine(OS, Descriptor.MacroName, in emitDefaultDefines()
2944 void emitUndefs(raw_ostream &OS) const { in emitUndefs()
2945 OS << "#undef " << Descriptor.MacroName << "\n"; in emitUndefs()
2948 void emitAttrList(raw_ostream &OS) const { in emitAttrList()
2950 SubClass->emitAttrList(OS); in emitAttrList()
2953 ::emitAttrList(OS, Descriptor.MacroName, Attrs); in emitAttrList()
2961 void emitAttrRange(raw_ostream &OS) const { in emitAttrRange()
2962 OS << "ATTR_RANGE(" << Descriptor.TableGenName in emitAttrRange()
3026 void emitDefaultDefines(raw_ostream &OS) const { in emitDefaultDefines()
3028 Class->emitDefaultDefines(OS); in emitDefaultDefines()
3032 void emitUndefs(raw_ostream &OS) const { in emitUndefs()
3034 Class->emitUndefs(OS); in emitUndefs()
3038 void emitAttrLists(raw_ostream &OS) const { in emitAttrLists()
3040 Classes[0]->emitAttrList(OS); in emitAttrLists()
3043 void emitAttrRanges(raw_ostream &OS) const { in emitAttrRanges()
3045 Class->emitAttrRange(OS); in emitAttrRanges()
3079 void EmitClangAttrList(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrList() argument
3080 emitSourceFileHeader("List of all attributes that Clang recognizes", OS); in EmitClangAttrList()
3085 Hierarchy.emitDefaultDefines(OS); in EmitClangAttrList()
3086 emitDefaultDefine(OS, "PRAGMA_SPELLING_ATTR", nullptr); in EmitClangAttrList()
3103 Hierarchy.emitAttrLists(OS); in EmitClangAttrList()
3106 emitAttrList(OS, "PRAGMA_SPELLING_ATTR", PragmaAttrs); in EmitClangAttrList()
3109 OS << "#ifdef ATTR_RANGE\n"; in EmitClangAttrList()
3110 Hierarchy.emitAttrRanges(OS); in EmitClangAttrList()
3111 OS << "#undef ATTR_RANGE\n"; in EmitClangAttrList()
3112 OS << "#endif\n"; in EmitClangAttrList()
3114 Hierarchy.emitUndefs(OS); in EmitClangAttrList()
3115 OS << "#undef PRAGMA_SPELLING_ATTR\n"; in EmitClangAttrList()
3119 void EmitClangAttrSubjectMatchRuleList(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrSubjectMatchRuleList() argument
3121 "List of all attribute subject matching rules that Clang recognizes", OS); in EmitClangAttrSubjectMatchRuleList()
3124 emitDefaultDefine(OS, "ATTR_MATCH_RULE", nullptr); in EmitClangAttrSubjectMatchRuleList()
3125 PragmaAttributeSupport.emitMatchRuleList(OS); in EmitClangAttrSubjectMatchRuleList()
3126 OS << "#undef ATTR_MATCH_RULE\n"; in EmitClangAttrSubjectMatchRuleList()
3130 void EmitClangAttrPCHRead(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrPCHRead() argument
3131 emitSourceFileHeader("Attribute deserialization code", OS); in EmitClangAttrPCHRead()
3139 OS << " switch (Kind) {\n"; in EmitClangAttrPCHRead()
3145 OS << " case attr::" << R.getName() << ": {\n"; in EmitClangAttrPCHRead()
3147 OS << " bool isInherited = Record.readInt();\n"; in EmitClangAttrPCHRead()
3148 OS << " bool isImplicit = Record.readInt();\n"; in EmitClangAttrPCHRead()
3149 OS << " bool isPackExpansion = Record.readInt();\n"; in EmitClangAttrPCHRead()
3154 DelayedArgs->writePCHReadDecls(OS); in EmitClangAttrPCHRead()
3160 Args.back()->writePCHReadDecls(OS); in EmitClangAttrPCHRead()
3162 OS << " New = new (Context) " << R.getName() << "Attr(Context, Info"; in EmitClangAttrPCHRead()
3164 OS << ", "; in EmitClangAttrPCHRead()
3165 ri->writePCHReadArgs(OS); in EmitClangAttrPCHRead()
3167 OS << ");\n"; in EmitClangAttrPCHRead()
3169 OS << " cast<InheritableAttr>(New)->setInherited(isInherited);\n"; in EmitClangAttrPCHRead()
3170 OS << " New->setImplicit(isImplicit);\n"; in EmitClangAttrPCHRead()
3171 OS << " New->setPackExpansion(isPackExpansion);\n"; in EmitClangAttrPCHRead()
3173 OS << " cast<" << R.getName() in EmitClangAttrPCHRead()
3175 DelayedArgs->writePCHReadArgs(OS); in EmitClangAttrPCHRead()
3176 OS << ");\n"; in EmitClangAttrPCHRead()
3178 OS << " break;\n"; in EmitClangAttrPCHRead()
3179 OS << " }\n"; in EmitClangAttrPCHRead()
3181 OS << " }\n"; in EmitClangAttrPCHRead()
3185 void EmitClangAttrPCHWrite(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrPCHWrite() argument
3186 emitSourceFileHeader("Attribute serialization code", OS); in EmitClangAttrPCHWrite()
3191 OS << " switch (A->getKind()) {\n"; in EmitClangAttrPCHWrite()
3196 OS << " case attr::" << R.getName() << ": {\n"; in EmitClangAttrPCHWrite()
3199 OS << " const auto *SA = cast<" << R.getName() in EmitClangAttrPCHWrite()
3202 OS << " Record.push_back(SA->isInherited());\n"; in EmitClangAttrPCHWrite()
3203 OS << " Record.push_back(A->isImplicit());\n"; in EmitClangAttrPCHWrite()
3204 OS << " Record.push_back(A->isPackExpansion());\n"; in EmitClangAttrPCHWrite()
3206 VariadicExprArgument("DelayedArgs", R.getName()).writePCHWrite(OS); in EmitClangAttrPCHWrite()
3209 createArgument(*Arg, R.getName())->writePCHWrite(OS); in EmitClangAttrPCHWrite()
3210 OS << " break;\n"; in EmitClangAttrPCHWrite()
3211 OS << " }\n"; in EmitClangAttrPCHWrite()
3213 OS << " }\n"; in EmitClangAttrPCHWrite()
3299 const std::vector<Record *> &Attrs, raw_ostream &OS, in GenerateHasAttrSpellingStringSwitch() argument
3351 OS << " .Case(\"" << S.name() << "\", " << TestStr << ")\n"; in GenerateHasAttrSpellingStringSwitch()
3353 OS << " .Default(0);\n"; in GenerateHasAttrSpellingStringSwitch()
3357 void EmitClangAttrHasAttrImpl(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrHasAttrImpl() argument
3358 emitSourceFileHeader("Code to implement the __has_attribute logic", OS); in EmitClangAttrHasAttrImpl()
3389 OS << "const llvm::Triple &T = Target.getTriple();\n"; in EmitClangAttrHasAttrImpl()
3390 OS << "switch (Syntax) {\n"; in EmitClangAttrHasAttrImpl()
3391 OS << "case AttributeCommonInfo::Syntax::AS_GNU:\n"; in EmitClangAttrHasAttrImpl()
3392 OS << " return llvm::StringSwitch<int>(Name)\n"; in EmitClangAttrHasAttrImpl()
3393 GenerateHasAttrSpellingStringSwitch(GNU, OS, "GNU"); in EmitClangAttrHasAttrImpl()
3394 OS << "case AttributeCommonInfo::Syntax::AS_Declspec:\n"; in EmitClangAttrHasAttrImpl()
3395 OS << " return llvm::StringSwitch<int>(Name)\n"; in EmitClangAttrHasAttrImpl()
3396 GenerateHasAttrSpellingStringSwitch(Declspec, OS, "Declspec"); in EmitClangAttrHasAttrImpl()
3397 OS << "case AttributeCommonInfo::Syntax::AS_Microsoft:\n"; in EmitClangAttrHasAttrImpl()
3398 OS << " return llvm::StringSwitch<int>(Name)\n"; in EmitClangAttrHasAttrImpl()
3399 GenerateHasAttrSpellingStringSwitch(Microsoft, OS, "Microsoft"); in EmitClangAttrHasAttrImpl()
3400 OS << "case AttributeCommonInfo::Syntax::AS_Pragma:\n"; in EmitClangAttrHasAttrImpl()
3401 OS << " return llvm::StringSwitch<int>(Name)\n"; in EmitClangAttrHasAttrImpl()
3402 GenerateHasAttrSpellingStringSwitch(Pragma, OS, "Pragma"); in EmitClangAttrHasAttrImpl()
3403 OS << "case AttributeCommonInfo::Syntax::AS_HLSLSemantic:\n"; in EmitClangAttrHasAttrImpl()
3404 OS << " return llvm::StringSwitch<int>(Name)\n"; in EmitClangAttrHasAttrImpl()
3405 GenerateHasAttrSpellingStringSwitch(HLSLSemantic, OS, "HLSLSemantic"); in EmitClangAttrHasAttrImpl()
3406 auto fn = [&OS](const char *Spelling, in EmitClangAttrHasAttrImpl()
3408 OS << "case AttributeCommonInfo::Syntax::AS_" << Spelling << ": {\n"; in EmitClangAttrHasAttrImpl()
3412 OS << " else "; in EmitClangAttrHasAttrImpl()
3414 OS << "if (ScopeName == \"\") {\n"; in EmitClangAttrHasAttrImpl()
3416 OS << "if (ScopeName == \"" << I->first << "\") {\n"; in EmitClangAttrHasAttrImpl()
3417 OS << " return llvm::StringSwitch<int>(Name)\n"; in EmitClangAttrHasAttrImpl()
3418 GenerateHasAttrSpellingStringSwitch(I->second, OS, Spelling, I->first); in EmitClangAttrHasAttrImpl()
3419 OS << "}"; in EmitClangAttrHasAttrImpl()
3421 OS << "\n} break;\n"; in EmitClangAttrHasAttrImpl()
3425 OS << "case AttributeCommonInfo::Syntax::AS_Keyword:\n"; in EmitClangAttrHasAttrImpl()
3426 OS << "case AttributeCommonInfo::Syntax::AS_ContextSensitiveKeyword:\n"; in EmitClangAttrHasAttrImpl()
3427 OS << " llvm_unreachable(\"hasAttribute not supported for keyword\");\n"; in EmitClangAttrHasAttrImpl()
3428 OS << " return 0;\n"; in EmitClangAttrHasAttrImpl()
3430 OS << "}\n"; in EmitClangAttrHasAttrImpl()
3433 void EmitClangAttrSpellingListIndex(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrSpellingListIndex() argument
3435 "into internal identifiers", OS); in EmitClangAttrSpellingListIndex()
3437 OS << " switch (getParsedKind()) {\n"; in EmitClangAttrSpellingListIndex()
3438 OS << " case IgnoredAttribute:\n"; in EmitClangAttrSpellingListIndex()
3439 OS << " case UnknownAttribute:\n"; in EmitClangAttrSpellingListIndex()
3440 OS << " case NoSemaHandlerAttribute:\n"; in EmitClangAttrSpellingListIndex()
3441 OS << " llvm_unreachable(\"Ignored/unknown shouldn't get here\");\n"; in EmitClangAttrSpellingListIndex()
3447 OS << " case AT_" << I.first << ": {\n"; in EmitClangAttrSpellingListIndex()
3449 OS << " if (Name == \"" << Spellings[I].name() << "\" && " in EmitClangAttrSpellingListIndex()
3455 OS << " break;\n"; in EmitClangAttrSpellingListIndex()
3456 OS << " }\n"; in EmitClangAttrSpellingListIndex()
3459 OS << " }\n"; in EmitClangAttrSpellingListIndex()
3460 OS << " return 0;\n"; in EmitClangAttrSpellingListIndex()
3464 void EmitClangAttrASTVisitor(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrASTVisitor() argument
3465 emitSourceFileHeader("Used by RecursiveASTVisitor to visit attributes.", OS); in EmitClangAttrASTVisitor()
3472 OS << "#ifdef ATTR_VISITOR_DECLS_ONLY\n\n"; in EmitClangAttrASTVisitor()
3477 OS << " bool Traverse" in EmitClangAttrASTVisitor()
3479 OS << " bool Visit" in EmitClangAttrASTVisitor()
3484 OS << "\n#else // ATTR_VISITOR_DECLS_ONLY\n\n"; in EmitClangAttrASTVisitor()
3492 OS << "template <typename Derived>\n" in EmitClangAttrASTVisitor()
3502 createArgument(*Arg, R.getName())->writeASTVisitorTraversal(OS); in EmitClangAttrASTVisitor()
3506 .writeASTVisitorTraversal(OS); in EmitClangAttrASTVisitor()
3508 OS << " return true;\n"; in EmitClangAttrASTVisitor()
3509 OS << "}\n\n"; in EmitClangAttrASTVisitor()
3513 OS << "template <typename Derived>\n" in EmitClangAttrASTVisitor()
3525 OS << " case attr::" << R.getName() << ":\n" in EmitClangAttrASTVisitor()
3529 OS << " }\n"; // end switch in EmitClangAttrASTVisitor()
3530 OS << " llvm_unreachable(\"bad attribute kind\");\n"; in EmitClangAttrASTVisitor()
3531 OS << "}\n"; // end function in EmitClangAttrASTVisitor()
3532 OS << "#endif // ATTR_VISITOR_DECLS_ONLY\n"; in EmitClangAttrASTVisitor()
3536 raw_ostream &OS, in EmitClangAttrTemplateInstantiateHelper() argument
3539 OS << " switch (At->getKind()) {\n"; in EmitClangAttrTemplateInstantiateHelper()
3544 OS << " case attr::" << R.getName() << ": {\n"; in EmitClangAttrTemplateInstantiateHelper()
3550 OS << " return nullptr;\n"; in EmitClangAttrTemplateInstantiateHelper()
3551 OS << " }\n"; in EmitClangAttrTemplateInstantiateHelper()
3555 OS << " const auto *A = cast<" in EmitClangAttrTemplateInstantiateHelper()
3560 OS << " return A->clone(C);\n"; in EmitClangAttrTemplateInstantiateHelper()
3561 OS << " }\n"; in EmitClangAttrTemplateInstantiateHelper()
3573 ai->writeTemplateInstantiation(OS); in EmitClangAttrTemplateInstantiateHelper()
3575 OS << " return new (C) " << R.getName() << "Attr(C, *A"; in EmitClangAttrTemplateInstantiateHelper()
3577 OS << ", "; in EmitClangAttrTemplateInstantiateHelper()
3578 ai->writeTemplateInstantiationArgs(OS); in EmitClangAttrTemplateInstantiateHelper()
3580 OS << ");\n" in EmitClangAttrTemplateInstantiateHelper()
3583 OS << " } // end switch\n" in EmitClangAttrTemplateInstantiateHelper()
3589 void EmitClangAttrTemplateInstantiate(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrTemplateInstantiate() argument
3590 emitSourceFileHeader("Template instantiation code for attributes", OS); in EmitClangAttrTemplateInstantiate()
3594 OS << "namespace clang {\n" in EmitClangAttrTemplateInstantiate()
3599 EmitClangAttrTemplateInstantiateHelper(Attrs, OS, /*AppliesToDecl*/false); in EmitClangAttrTemplateInstantiate()
3600 OS << "}\n\n" in EmitClangAttrTemplateInstantiate()
3604 EmitClangAttrTemplateInstantiateHelper(Attrs, OS, /*AppliesToDecl*/true); in EmitClangAttrTemplateInstantiate()
3605 OS << "}\n\n" in EmitClangAttrTemplateInstantiate()
3611 void EmitClangAttrParsedAttrList(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrParsedAttrList() argument
3612 emitSourceFileHeader("List of all attributes that Clang recognizes", OS); in EmitClangAttrParsedAttrList()
3614 OS << "#ifndef PARSED_ATTR\n"; in EmitClangAttrParsedAttrList()
3615 OS << "#define PARSED_ATTR(NAME) NAME\n"; in EmitClangAttrParsedAttrList()
3616 OS << "#endif\n\n"; in EmitClangAttrParsedAttrList()
3620 OS << "PARSED_ATTR(" << I.first << ")\n"; in EmitClangAttrParsedAttrList()
3628 static void emitArgInfo(const Record &R, raw_ostream &OS) { in emitArgInfo() argument
3648 OS << " /*NumArgs=*/" << ArgCount << ",\n"; in emitArgInfo()
3649 OS << " /*OptArgs=*/" << (HasVariadic ? 15 : OptCount) << ",\n"; in emitArgInfo()
3650 OS << " /*NumArgMembers=*/" << ArgMemberCount << ",\n"; in emitArgInfo()
3731 static void GenerateCustomAppertainsTo(const Record &Subject, raw_ostream &OS) { in GenerateCustomAppertainsTo() argument
3750 OS << "static bool " << FnName << "(const Decl *D) {\n"; in GenerateCustomAppertainsTo()
3751 OS << " if (const auto *S = dyn_cast<"; in GenerateCustomAppertainsTo()
3752 OS << GetSubjectWithSuffix(Base); in GenerateCustomAppertainsTo()
3753 OS << ">(D))\n"; in GenerateCustomAppertainsTo()
3754 OS << " return " << Subject.getValueAsString("CheckCode") << ";\n"; in GenerateCustomAppertainsTo()
3755 OS << " return false;\n"; in GenerateCustomAppertainsTo()
3756 OS << "}\n\n"; in GenerateCustomAppertainsTo()
3761 static void GenerateAppertainsTo(const Record &Attr, raw_ostream &OS) { in GenerateAppertainsTo() argument
3797 OS << "bool diagAppertainsToDecl(Sema &S, const ParsedAttr &AL, "; in GenerateAppertainsTo()
3798 OS << "const Decl *D) const override {\n"; in GenerateAppertainsTo()
3799 OS << " S.Diag(AL.getLoc(), diag::err_attribute_invalid_on_decl)\n"; in GenerateAppertainsTo()
3800 OS << " << AL << D->getLocation();\n"; in GenerateAppertainsTo()
3801 OS << " return false;\n"; in GenerateAppertainsTo()
3802 OS << "}\n\n"; in GenerateAppertainsTo()
3807 OS << "bool diagAppertainsToDecl(Sema &S, "; in GenerateAppertainsTo()
3808 OS << "const ParsedAttr &Attr, const Decl *D) const override {\n"; in GenerateAppertainsTo()
3809 OS << " if ("; in GenerateAppertainsTo()
3817 OS << "!" << functionNameForCustomAppertainsTo(**I) << "(D)"; in GenerateAppertainsTo()
3819 OS << "!isa<" << GetSubjectWithSuffix(*I) << ">(D)"; in GenerateAppertainsTo()
3822 OS << " && "; in GenerateAppertainsTo()
3824 OS << ") {\n"; in GenerateAppertainsTo()
3825 OS << " S.Diag(Attr.getLoc(), diag::"; in GenerateAppertainsTo()
3826 OS << (Warn ? "warn_attribute_wrong_decl_type_str" in GenerateAppertainsTo()
3828 OS << ")\n"; in GenerateAppertainsTo()
3829 OS << " << Attr << "; in GenerateAppertainsTo()
3830 OS << CalculateDiagnostic(*SubjectObj) << ";\n"; in GenerateAppertainsTo()
3831 OS << " return false;\n"; in GenerateAppertainsTo()
3832 OS << " }\n"; in GenerateAppertainsTo()
3833 OS << " return true;\n"; in GenerateAppertainsTo()
3834 OS << "}\n\n"; in GenerateAppertainsTo()
3841 OS << "bool diagAppertainsToStmt(Sema &S, const ParsedAttr &AL, "; in GenerateAppertainsTo()
3842 OS << "const Stmt *St) const override {\n"; in GenerateAppertainsTo()
3843 OS << " S.Diag(AL.getLoc(), diag::err_decl_attribute_invalid_on_stmt)\n"; in GenerateAppertainsTo()
3844 OS << " << AL << St->getBeginLoc();\n"; in GenerateAppertainsTo()
3845 OS << " return false;\n"; in GenerateAppertainsTo()
3846 OS << "}\n\n"; in GenerateAppertainsTo()
3850 OS << "bool diagAppertainsToStmt(Sema &S, "; in GenerateAppertainsTo()
3851 OS << "const ParsedAttr &Attr, const Stmt *St) const override {\n"; in GenerateAppertainsTo()
3852 OS << " if ("; in GenerateAppertainsTo()
3854 OS << "!isa<" << (*I)->getName() << ">(St)"; in GenerateAppertainsTo()
3856 OS << " && "; in GenerateAppertainsTo()
3858 OS << ") {\n"; in GenerateAppertainsTo()
3859 OS << " S.Diag(Attr.getLoc(), diag::"; in GenerateAppertainsTo()
3860 OS << (Warn ? "warn_attribute_wrong_decl_type_str" in GenerateAppertainsTo()
3862 OS << ")\n"; in GenerateAppertainsTo()
3863 OS << " << Attr << "; in GenerateAppertainsTo()
3864 OS << CalculateDiagnostic(*SubjectObj) << ";\n"; in GenerateAppertainsTo()
3865 OS << " return false;\n"; in GenerateAppertainsTo()
3866 OS << " }\n"; in GenerateAppertainsTo()
3867 OS << " return true;\n"; in GenerateAppertainsTo()
3868 OS << "}\n\n"; in GenerateAppertainsTo()
3873 // written into OS and the checks for merging declaration attributes are
3877 raw_ostream &OS, in GenerateMutualExclusionsChecks() argument
3923 OS << " using ParsedAttrInfo::diagMutualExclusion;\n\n"; in GenerateMutualExclusionsChecks()
3929 OS << " bool diagMutualExclusion(Sema &S, const ParsedAttr &AL, " in GenerateMutualExclusionsChecks()
3932 OS << " if (const auto *A = D->getAttr<" << A << ">()) {\n"; in GenerateMutualExclusionsChecks()
3933 OS << " S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible)" in GenerateMutualExclusionsChecks()
3935 OS << " S.Diag(A->getLocation(), diag::note_conflicting_attribute);"; in GenerateMutualExclusionsChecks()
3936 OS << " \nreturn false;\n"; in GenerateMutualExclusionsChecks()
3937 OS << " }\n"; in GenerateMutualExclusionsChecks()
3939 OS << " return true;\n"; in GenerateMutualExclusionsChecks()
3940 OS << " }\n\n"; in GenerateMutualExclusionsChecks()
4006 raw_ostream &OS) { in emitAttributeMatchRules() argument
4007 OS << "static bool checkAttributeMatchRuleAppliesTo(const Decl *D, " in emitAttributeMatchRules()
4009 OS << " switch (rule) {\n"; in emitAttributeMatchRules()
4012 OS << " case " << Rule.getEnumValue() << ":\n"; in emitAttributeMatchRules()
4013 OS << " assert(false && \"Abstract matcher rule isn't allowed\");\n"; in emitAttributeMatchRules()
4014 OS << " return false;\n"; in emitAttributeMatchRules()
4019 OS << " case " << Rule.getEnumValue() << ":\n"; in emitAttributeMatchRules()
4020 OS << " return "; in emitAttributeMatchRules()
4026 OS << functionNameForCustomAppertainsTo(**I) << "(D)"; in emitAttributeMatchRules()
4028 OS << "isa<" << GetSubjectWithSuffix(*I) << ">(D)"; in emitAttributeMatchRules()
4031 OS << " || "; in emitAttributeMatchRules()
4033 OS << ";\n"; in emitAttributeMatchRules()
4035 OS << " }\n"; in emitAttributeMatchRules()
4036 OS << " llvm_unreachable(\"Invalid match rule\");\nreturn false;\n"; in emitAttributeMatchRules()
4037 OS << "}\n\n"; in emitAttributeMatchRules()
4041 raw_ostream &OS) { in GenerateLangOptRequirements() argument
4048 OS << "bool acceptsLangOpts(const LangOptions &LangOpts) const override {\n"; in GenerateLangOptRequirements()
4049 OS << " return " << GenerateTestExpression(LangOpts) << ";\n"; in GenerateLangOptRequirements()
4050 OS << "}\n\n"; in GenerateLangOptRequirements()
4055 raw_ostream &OS) { in GenerateTargetRequirements() argument
4087 OS << "bool existsInTarget(const TargetInfo &Target) const override {\n"; in GenerateTargetRequirements()
4089 OS << " const llvm::Triple &T = Target.getTriple(); (void)T;\n"; in GenerateTargetRequirements()
4090 OS << " return " << Test << ";\n"; in GenerateTargetRequirements()
4091 OS << "}\n\n"; in GenerateTargetRequirements()
4095 raw_ostream &OS) { in GenerateSpellingIndexToSemanticSpelling() argument
4112 OS << "unsigned spellingIndexToSemanticSpelling("; in GenerateSpellingIndexToSemanticSpelling()
4113 OS << "const ParsedAttr &Attr) const override {\n"; in GenerateSpellingIndexToSemanticSpelling()
4114 OS << Enum; in GenerateSpellingIndexToSemanticSpelling()
4115 OS << " unsigned Idx = Attr.getAttributeSpellingListIndex();\n"; in GenerateSpellingIndexToSemanticSpelling()
4116 WriteSemanticSpellingSwitch("Idx", SemanticToSyntacticMap, OS); in GenerateSpellingIndexToSemanticSpelling()
4117 OS << "}\n\n"; in GenerateSpellingIndexToSemanticSpelling()
4120 static void GenerateHandleDeclAttribute(const Record &Attr, raw_ostream &OS) { in GenerateHandleDeclAttribute() argument
4126 OS << "AttrHandling handleDeclAttribute(Sema &S, Decl *D,"; in GenerateHandleDeclAttribute()
4127 OS << "const ParsedAttr &Attr) const override {\n"; in GenerateHandleDeclAttribute()
4128 OS << " D->addAttr(::new (S.Context) " << Attr.getName(); in GenerateHandleDeclAttribute()
4129 OS << "Attr(S.Context, Attr));\n"; in GenerateHandleDeclAttribute()
4130 OS << " return AttributeApplied;\n"; in GenerateHandleDeclAttribute()
4131 OS << "}\n\n"; in GenerateHandleDeclAttribute()
4143 void GenerateIsParamExpr(const Record &Attr, raw_ostream &OS) { in GenerateIsParamExpr() argument
4144 OS << "bool isParamExpr(size_t N) const override {\n"; in GenerateIsParamExpr()
4145 OS << " return "; in GenerateIsParamExpr()
4149 OS << "(N == " << I << ") || "; in GenerateIsParamExpr()
4150 OS << "false;\n"; in GenerateIsParamExpr()
4151 OS << "}\n\n"; in GenerateIsParamExpr()
4154 void GenerateHandleAttrWithDelayedArgs(RecordKeeper &Records, raw_ostream &OS) { in GenerateHandleAttrWithDelayedArgs() argument
4155 OS << "static void handleAttrWithDelayedArgs(Sema &S, Decl *D, "; in GenerateHandleAttrWithDelayedArgs()
4156 OS << "const ParsedAttr &Attr) {\n"; in GenerateHandleAttrWithDelayedArgs()
4157 OS << " SmallVector<Expr *, 4> ArgExprs;\n"; in GenerateHandleAttrWithDelayedArgs()
4158 OS << " ArgExprs.reserve(Attr.getNumArgs());\n"; in GenerateHandleAttrWithDelayedArgs()
4159 OS << " for (unsigned I = 0; I < Attr.getNumArgs(); ++I) {\n"; in GenerateHandleAttrWithDelayedArgs()
4160 OS << " assert(!Attr.isArgIdent(I));\n"; in GenerateHandleAttrWithDelayedArgs()
4161 OS << " ArgExprs.push_back(Attr.getArgAsExpr(I));\n"; in GenerateHandleAttrWithDelayedArgs()
4162 OS << " }\n"; in GenerateHandleAttrWithDelayedArgs()
4163 OS << " clang::Attr *CreatedAttr = nullptr;\n"; in GenerateHandleAttrWithDelayedArgs()
4164 OS << " switch (Attr.getKind()) {\n"; in GenerateHandleAttrWithDelayedArgs()
4165 OS << " default:\n"; in GenerateHandleAttrWithDelayedArgs()
4166 OS << " llvm_unreachable(\"Attribute cannot hold delayed arguments.\");\n"; in GenerateHandleAttrWithDelayedArgs()
4172 OS << " case ParsedAttr::AT_" << I.first << ": {\n"; in GenerateHandleAttrWithDelayedArgs()
4173 OS << " CreatedAttr = " << R.getName() << "Attr::CreateWithDelayedArgs"; in GenerateHandleAttrWithDelayedArgs()
4174 OS << "(S.Context, ArgExprs.data(), ArgExprs.size(), Attr);\n"; in GenerateHandleAttrWithDelayedArgs()
4175 OS << " break;\n"; in GenerateHandleAttrWithDelayedArgs()
4176 OS << " }\n"; in GenerateHandleAttrWithDelayedArgs()
4178 OS << " }\n"; in GenerateHandleAttrWithDelayedArgs()
4179 OS << " D->addAttr(CreatedAttr);\n"; in GenerateHandleAttrWithDelayedArgs()
4180 OS << "}\n\n"; in GenerateHandleAttrWithDelayedArgs()
4192 void EmitClangAttrParsedAttrImpl(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrParsedAttrImpl() argument
4193 emitSourceFileHeader("Parsed attribute helpers", OS); in EmitClangAttrParsedAttrImpl()
4195 OS << "#if !defined(WANT_DECL_MERGE_LOGIC) && " in EmitClangAttrParsedAttrImpl()
4214 GenerateCustomAppertainsTo(*Subject, OS); in EmitClangAttrParsedAttrImpl()
4237 OS << "static constexpr ParsedAttrInfo::Spelling " << I->first in EmitClangAttrParsedAttrImpl()
4248 OS << " {AttributeCommonInfo::AS_" << S.variety(); in EmitClangAttrParsedAttrImpl()
4249 OS << ", \"" << Spelling << "\"},\n"; in EmitClangAttrParsedAttrImpl()
4251 OS << "};\n"; in EmitClangAttrParsedAttrImpl()
4268 OS << "static constexpr const char *" << I->first << "ArgNames[] = {\n"; in EmitClangAttrParsedAttrImpl()
4270 OS << '"' << N << "\","; in EmitClangAttrParsedAttrImpl()
4271 OS << "};\n"; in EmitClangAttrParsedAttrImpl()
4274 OS << "struct ParsedAttrInfo" << I->first in EmitClangAttrParsedAttrImpl()
4276 OS << " constexpr ParsedAttrInfo" << I->first << "() : ParsedAttrInfo(\n"; in EmitClangAttrParsedAttrImpl()
4277 OS << " /*AttrKind=*/ParsedAttr::AT_" << AttrName << ",\n"; in EmitClangAttrParsedAttrImpl()
4278 emitArgInfo(Attr, OS); in EmitClangAttrParsedAttrImpl()
4279 OS << " /*HasCustomParsing=*/"; in EmitClangAttrParsedAttrImpl()
4280 OS << Attr.getValueAsBit("HasCustomParsing") << ",\n"; in EmitClangAttrParsedAttrImpl()
4281 OS << " /*AcceptsExprPack=*/"; in EmitClangAttrParsedAttrImpl()
4282 OS << Attr.getValueAsBit("AcceptsExprPack") << ",\n"; in EmitClangAttrParsedAttrImpl()
4283 OS << " /*IsTargetSpecific=*/"; in EmitClangAttrParsedAttrImpl()
4284 OS << Attr.isSubClassOf("TargetSpecificAttr") << ",\n"; in EmitClangAttrParsedAttrImpl()
4285 OS << " /*IsType=*/"; in EmitClangAttrParsedAttrImpl()
4286 OS << (Attr.isSubClassOf("TypeAttr") || Attr.isSubClassOf("DeclOrTypeAttr")) in EmitClangAttrParsedAttrImpl()
4288 OS << " /*IsStmt=*/"; in EmitClangAttrParsedAttrImpl()
4289 OS << (Attr.isSubClassOf("StmtAttr") || Attr.isSubClassOf("DeclOrStmtAttr")) in EmitClangAttrParsedAttrImpl()
4291 OS << " /*IsKnownToGCC=*/"; in EmitClangAttrParsedAttrImpl()
4292 OS << IsKnownToGCC(Attr) << ",\n"; in EmitClangAttrParsedAttrImpl()
4293 OS << " /*IsSupportedByPragmaAttribute=*/"; in EmitClangAttrParsedAttrImpl()
4294 OS << PragmaAttributeSupport.isAttributedSupported(*I->second) << ",\n"; in EmitClangAttrParsedAttrImpl()
4296 OS << " /*Spellings=*/" << I->first << "Spellings,\n"; in EmitClangAttrParsedAttrImpl()
4298 OS << " /*Spellings=*/{},\n"; in EmitClangAttrParsedAttrImpl()
4300 OS << " /*ArgNames=*/" << I->first << "ArgNames"; in EmitClangAttrParsedAttrImpl()
4302 OS << " /*ArgNames=*/{}"; in EmitClangAttrParsedAttrImpl()
4303 OS << ") {}\n"; in EmitClangAttrParsedAttrImpl()
4304 GenerateAppertainsTo(Attr, OS); in EmitClangAttrParsedAttrImpl()
4305 GenerateMutualExclusionsChecks(Attr, Records, OS, MergeDeclOS, MergeStmtOS); in EmitClangAttrParsedAttrImpl()
4306 GenerateLangOptRequirements(Attr, OS); in EmitClangAttrParsedAttrImpl()
4307 GenerateTargetRequirements(Attr, Dupes, OS); in EmitClangAttrParsedAttrImpl()
4308 GenerateSpellingIndexToSemanticSpelling(Attr, OS); in EmitClangAttrParsedAttrImpl()
4309 PragmaAttributeSupport.generateStrictConformsTo(*I->second, OS); in EmitClangAttrParsedAttrImpl()
4310 GenerateHandleDeclAttribute(Attr, OS); in EmitClangAttrParsedAttrImpl()
4311 GenerateIsParamExpr(Attr, OS); in EmitClangAttrParsedAttrImpl()
4312 OS << "static const ParsedAttrInfo" << I->first << " Instance;\n"; in EmitClangAttrParsedAttrImpl()
4313 OS << "};\n"; in EmitClangAttrParsedAttrImpl()
4314 OS << "const ParsedAttrInfo" << I->first << " ParsedAttrInfo" << I->first in EmitClangAttrParsedAttrImpl()
4318 OS << "static const ParsedAttrInfo *AttrInfoMap[] = {\n"; in EmitClangAttrParsedAttrImpl()
4320 OS << "&ParsedAttrInfo" << I->first << "::Instance,\n"; in EmitClangAttrParsedAttrImpl()
4322 OS << "};\n\n"; in EmitClangAttrParsedAttrImpl()
4325 GenerateHandleAttrWithDelayedArgs(Records, OS); in EmitClangAttrParsedAttrImpl()
4328 emitAttributeMatchRules(PragmaAttributeSupport, OS); in EmitClangAttrParsedAttrImpl()
4330 OS << "#elif defined(WANT_DECL_MERGE_LOGIC)\n\n"; in EmitClangAttrParsedAttrImpl()
4333 OS << "static bool DiagnoseMutualExclusions(Sema &S, const NamedDecl *D, " in EmitClangAttrParsedAttrImpl()
4335 OS << MergeDeclOS.str(); in EmitClangAttrParsedAttrImpl()
4336 OS << " return true;\n"; in EmitClangAttrParsedAttrImpl()
4337 OS << "}\n\n"; in EmitClangAttrParsedAttrImpl()
4339 OS << "#elif defined(WANT_STMT_MERGE_LOGIC)\n\n"; in EmitClangAttrParsedAttrImpl()
4342 OS << "static bool DiagnoseMutualExclusions(Sema &S, " in EmitClangAttrParsedAttrImpl()
4344 OS << " for (const Attr *A : C) {\n"; in EmitClangAttrParsedAttrImpl()
4345 OS << MergeStmtOS.str(); in EmitClangAttrParsedAttrImpl()
4346 OS << " }\n"; in EmitClangAttrParsedAttrImpl()
4347 OS << " return true;\n"; in EmitClangAttrParsedAttrImpl()
4348 OS << "}\n\n"; in EmitClangAttrParsedAttrImpl()
4350 OS << "#endif\n"; in EmitClangAttrParsedAttrImpl()
4354 void EmitClangAttrParsedAttrKinds(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrParsedAttrKinds() argument
4355 emitSourceFileHeader("Attribute name matcher", OS); in EmitClangAttrParsedAttrKinds()
4430 OS << "static AttributeCommonInfo::Kind getAttrKind(StringRef Name, "; in EmitClangAttrParsedAttrKinds()
4431 OS << "AttributeCommonInfo::Syntax Syntax) {\n"; in EmitClangAttrParsedAttrKinds()
4432 OS << " if (AttributeCommonInfo::AS_GNU == Syntax) {\n"; in EmitClangAttrParsedAttrKinds()
4433 StringMatcher("Name", GNU, OS).Emit(); in EmitClangAttrParsedAttrKinds()
4434 OS << " } else if (AttributeCommonInfo::AS_Declspec == Syntax) {\n"; in EmitClangAttrParsedAttrKinds()
4435 StringMatcher("Name", Declspec, OS).Emit(); in EmitClangAttrParsedAttrKinds()
4436 OS << " } else if (AttributeCommonInfo::AS_Microsoft == Syntax) {\n"; in EmitClangAttrParsedAttrKinds()
4437 StringMatcher("Name", Microsoft, OS).Emit(); in EmitClangAttrParsedAttrKinds()
4438 OS << " } else if (AttributeCommonInfo::AS_CXX11 == Syntax) {\n"; in EmitClangAttrParsedAttrKinds()
4439 StringMatcher("Name", CXX11, OS).Emit(); in EmitClangAttrParsedAttrKinds()
4440 OS << " } else if (AttributeCommonInfo::AS_C2x == Syntax) {\n"; in EmitClangAttrParsedAttrKinds()
4441 StringMatcher("Name", C2x, OS).Emit(); in EmitClangAttrParsedAttrKinds()
4442 OS << " } else if (AttributeCommonInfo::AS_Keyword == Syntax || "; in EmitClangAttrParsedAttrKinds()
4443 OS << "AttributeCommonInfo::AS_ContextSensitiveKeyword == Syntax) {\n"; in EmitClangAttrParsedAttrKinds()
4444 StringMatcher("Name", Keywords, OS).Emit(); in EmitClangAttrParsedAttrKinds()
4445 OS << " } else if (AttributeCommonInfo::AS_Pragma == Syntax) {\n"; in EmitClangAttrParsedAttrKinds()
4446 StringMatcher("Name", Pragma, OS).Emit(); in EmitClangAttrParsedAttrKinds()
4447 OS << " } else if (AttributeCommonInfo::AS_HLSLSemantic == Syntax) {\n"; in EmitClangAttrParsedAttrKinds()
4448 StringMatcher("Name", HLSLSemantic, OS).Emit(); in EmitClangAttrParsedAttrKinds()
4449 OS << " }\n"; in EmitClangAttrParsedAttrKinds()
4450 OS << " return AttributeCommonInfo::UnknownAttribute;\n" in EmitClangAttrParsedAttrKinds()
4455 void EmitClangAttrTextNodeDump(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrTextNodeDump() argument
4456 emitSourceFileHeader("Attribute text node dumper", OS); in EmitClangAttrTextNodeDump()
4473 SS << " OS << \" \" << A->getSpelling();\n"; in EmitClangAttrTextNodeDump()
4480 VariadicExprArgument("DelayedArgs", R.getName()).writeDump(OS); in EmitClangAttrTextNodeDump()
4483 OS << " void Visit" << R.getName() << "Attr(const " << R.getName() in EmitClangAttrTextNodeDump()
4486 OS << " const auto *SA = cast<" << R.getName() in EmitClangAttrTextNodeDump()
4488 OS << SS.str(); in EmitClangAttrTextNodeDump()
4489 OS << " }\n"; in EmitClangAttrTextNodeDump()
4494 void EmitClangAttrNodeTraverse(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrNodeTraverse() argument
4495 emitSourceFileHeader("Attribute text node traverser", OS); in EmitClangAttrNodeTraverse()
4512 OS << " void Visit" << R.getName() << "Attr(const " << R.getName() in EmitClangAttrNodeTraverse()
4515 OS << " const auto *SA = cast<" << R.getName() in EmitClangAttrNodeTraverse()
4517 OS << SS.str(); in EmitClangAttrNodeTraverse()
4518 OS << " }\n"; in EmitClangAttrNodeTraverse()
4524 raw_ostream &OS) { in EmitClangAttrParserStringSwitches() argument
4525 emitSourceFileHeader("Parser-related llvm::StringSwitch cases", OS); in EmitClangAttrParserStringSwitches()
4526 emitClangAttrArgContextList(Records, OS); in EmitClangAttrParserStringSwitches()
4527 emitClangAttrIdentifierArgList(Records, OS); in EmitClangAttrParserStringSwitches()
4528 emitClangAttrVariadicIdentifierArgList(Records, OS); in EmitClangAttrParserStringSwitches()
4529 emitClangAttrThisIsaIdentifierArgList(Records, OS); in EmitClangAttrParserStringSwitches()
4530 emitClangAttrAcceptsExprPack(Records, OS); in EmitClangAttrParserStringSwitches()
4531 emitClangAttrTypeArgList(Records, OS); in EmitClangAttrParserStringSwitches()
4532 emitClangAttrLateParsedList(Records, OS); in EmitClangAttrParserStringSwitches()
4536 raw_ostream &OS) { in EmitClangAttrSubjectMatchRulesParserStringSwitches() argument
4537 getPragmaAttributeSupport(Records).generateParsingHelpers(OS); in EmitClangAttrSubjectMatchRulesParserStringSwitches()
4540 void EmitClangAttrDocTable(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrDocTable() argument
4541 emitSourceFileHeader("Clang attribute documentation", OS); in EmitClangAttrDocTable()
4553 OS << "\nstatic const char AttrDoc_" << A->getName() << "[] = " in EmitClangAttrDocTable()
4624 raw_ostream &OS) { in WriteCategoryHeader() argument
4626 OS << Name << "\n" << std::string(Name.size(), '=') << "\n"; in WriteCategoryHeader()
4631 OS << ContentStr.trim(); in WriteCategoryHeader()
4633 OS << "\n\n"; in WriteCategoryHeader()
4689 const DocumentationData &Doc, raw_ostream &OS) { in WriteDocumentation() argument
4690 OS << Doc.Heading << "\n" << std::string(Doc.Heading.length(), '-') << "\n"; in WriteDocumentation()
4695 OS << ".. csv-table:: Supported Syntaxes\n"; in WriteDocumentation()
4696 OS << " :header: \"GNU\", \"C++11\", \"C2x\", \"``__declspec``\","; in WriteDocumentation()
4697 OS << " \"Keyword\", \"``#pragma``\", \"HLSL Semantic\", \"``#pragma clang "; in WriteDocumentation()
4698 OS << "attribute``\"\n\n \""; in WriteDocumentation()
4709 OS << " |br| "; in WriteDocumentation()
4710 OS << "``" << Spelling << "``"; in WriteDocumentation()
4714 OS << "\",\""; in WriteDocumentation()
4719 OS << "Yes"; in WriteDocumentation()
4720 OS << "\"\n\n"; in WriteDocumentation()
4725 OS << "This attribute has been deprecated, and may be removed in a future " in WriteDocumentation()
4730 OS << " This attribute has been superseded by ``" << Replacement in WriteDocumentation()
4732 OS << "\n\n"; in WriteDocumentation()
4737 OS << ContentStr.trim(); in WriteDocumentation()
4739 OS << "\n\n\n"; in WriteDocumentation()
4742 void EmitClangAttrDocs(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrDocs() argument
4751 OS << Documentation->getValueAsString("Intro") << "\n"; in EmitClangAttrDocs()
4788 WriteCategoryHeader(I.first, OS); in EmitClangAttrDocs()
4798 WriteDocumentation(Records, Doc, OS); in EmitClangAttrDocs()
4803 raw_ostream &OS) { in EmitTestPragmaAttributeSupportedAttributes() argument
4806 OS << "#pragma clang attribute supports the following attributes:\n"; in EmitTestPragmaAttributeSupportedAttributes()
4810 OS << I.first; in EmitTestPragmaAttributeSupportedAttributes()
4812 OS << " ()\n"; in EmitTestPragmaAttributeSupportedAttributes()
4818 OS << " ("; in EmitTestPragmaAttributeSupportedAttributes()
4824 OS << ", "; in EmitTestPragmaAttributeSupportedAttributes()
4829 OS << RuleSet.getRule().getEnumValueName(); in EmitTestPragmaAttributeSupportedAttributes()
4832 OS << "("; in EmitTestPragmaAttributeSupportedAttributes()
4835 OS << ", "; in EmitTestPragmaAttributeSupportedAttributes()
4836 OS << Rule.value().getEnumValueName(); in EmitTestPragmaAttributeSupportedAttributes()
4838 OS << ")"; in EmitTestPragmaAttributeSupportedAttributes()
4840 OS << ")\n"; in EmitTestPragmaAttributeSupportedAttributes()
4842 OS << "End of supported attributes.\n"; in EmitTestPragmaAttributeSupportedAttributes()