Lines Matching refs:OS
240 virtual void writeAccessors(raw_ostream &OS) const = 0;
241 virtual void writeAccessorDefinitions(raw_ostream &OS) const {} in writeAccessorDefinitions()
242 virtual void writeASTVisitorTraversal(raw_ostream &OS) const {} in writeASTVisitorTraversal()
243 virtual void writeCloneArgs(raw_ostream &OS) const = 0;
244 virtual void writeTemplateInstantiationArgs(raw_ostream &OS) const = 0;
245 virtual void writeTemplateInstantiation(raw_ostream &OS) const {} in writeTemplateInstantiation()
246 virtual void writeCtorBody(raw_ostream &OS) const {} in writeCtorBody()
247 virtual void writeCtorInitializers(raw_ostream &OS) const = 0;
248 virtual void writeCtorDefaultInitializers(raw_ostream &OS) const = 0;
249 virtual void writeCtorParameters(raw_ostream &OS) const = 0;
250 virtual void writeDeclarations(raw_ostream &OS) const = 0;
251 virtual void writePCHReadArgs(raw_ostream &OS) const = 0;
252 virtual void writePCHReadDecls(raw_ostream &OS) const = 0;
253 virtual void writePCHWrite(raw_ostream &OS) const = 0;
255 virtual void writeValue(raw_ostream &OS) const = 0;
256 virtual void writeDump(raw_ostream &OS) const = 0;
257 virtual void writeDumpChildren(raw_ostream &OS) const {} in writeDumpChildren()
258 virtual void writeHasChildren(raw_ostream &OS) const { OS << "false"; } in writeHasChildren()
264 virtual void writeImplicitCtorArgs(raw_ostream &OS) const { in writeImplicitCtorArgs()
265 OS << getUpperName(); in writeImplicitCtorArgs()
278 void writeAccessors(raw_ostream &OS) const override { in writeAccessors()
279 OS << " " << type << " get" << getUpperName() << "() const {\n"; in writeAccessors()
280 OS << " return " << getLowerName() << ";\n"; in writeAccessors()
281 OS << " }"; in writeAccessors()
284 void writeCloneArgs(raw_ostream &OS) const override { in writeCloneArgs()
285 OS << getLowerName(); in writeCloneArgs()
288 void writeTemplateInstantiationArgs(raw_ostream &OS) const override { in writeTemplateInstantiationArgs()
289 OS << "A->get" << getUpperName() << "()"; in writeTemplateInstantiationArgs()
292 void writeCtorInitializers(raw_ostream &OS) const override { in writeCtorInitializers()
293 OS << getLowerName() << "(" << getUpperName() << ")"; in writeCtorInitializers()
296 void writeCtorDefaultInitializers(raw_ostream &OS) const override { in writeCtorDefaultInitializers()
297 OS << getLowerName() << "()"; in writeCtorDefaultInitializers()
300 void writeCtorParameters(raw_ostream &OS) const override { in writeCtorParameters()
301 OS << type << " " << getUpperName(); in writeCtorParameters()
304 void writeDeclarations(raw_ostream &OS) const override { in writeDeclarations()
305 OS << type << " " << getLowerName() << ";"; in writeDeclarations()
308 void writePCHReadDecls(raw_ostream &OS) const override { in writePCHReadDecls()
310 OS << " " << type << " " << getLowerName() << " = " << read << ";\n"; in writePCHReadDecls()
313 void writePCHReadArgs(raw_ostream &OS) const override { in writePCHReadArgs()
314 OS << getLowerName(); in writePCHReadArgs()
317 void writePCHWrite(raw_ostream &OS) const override { in writePCHWrite()
318 OS << " " in writePCHWrite()
340 void writeValue(raw_ostream &OS) const override { in writeValue()
342 OS << "\" << get" << getUpperName() in writeValue()
347 OS << "\" << (get" << getUpperName() << "() ? get" << getUpperName() in writeValue()
350 OS << "\" << get" << getUpperName() << "()->getName() << \""; in writeValue()
352 OS << "\" << get" << getUpperName() << "().getAsString() << \""; in writeValue()
354 OS << "\" << get" << getUpperName() << "().getSourceIndex() << \""; in writeValue()
356 OS << "\" << get" << getUpperName() << "() << \""; in writeValue()
359 void writeDump(raw_ostream &OS) const override { in writeDump()
361 OS << " OS << \" \";\n"; in writeDump()
362 OS << " dumpBareDeclRef(SA->get" << getUpperName() << "());\n"; in writeDump()
366 OS << " if (SA->get" << getUpperName() << "())\n" in writeDump()
371 OS << " if (SA->get" << getUpperName() << "Loc())"; in writeDump()
372 OS << " OS << \" \" << SA->get" << getUpperName() in writeDump()
375 OS << " if (SA->get" << getUpperName() << "()) OS << \" " in writeDump()
378 OS << " OS << \" \" << SA->get" << getUpperName() << "();\n"; in writeDump()
381 OS << " if (SA->get" << getUpperName() << "().isValid())\n "; in writeDump()
382 OS << " OS << \" \" << SA->get" << getUpperName() in writeDump()
385 OS << " OS << \" \" << SA->get" << getUpperName() << "();\n"; in writeDump()
400 void writeAccessors(raw_ostream &OS) const override { in writeAccessors()
401 SimpleArgument::writeAccessors(OS); in writeAccessors()
403 OS << "\n\n static const " << getType() << " Default" << getUpperName() in writeAccessors()
406 OS << (Default != 0 ? "true" : "false"); in writeAccessors()
408 OS << Default; in writeAccessors()
409 OS << ";"; in writeAccessors()
419 void writeAccessors(raw_ostream &OS) const override { in writeAccessors()
420 OS << " llvm::StringRef get" << getUpperName() << "() const {\n"; in writeAccessors()
421 OS << " return llvm::StringRef(" << getLowerName() << ", " in writeAccessors()
423 OS << " }\n"; in writeAccessors()
424 OS << " unsigned get" << getUpperName() << "Length() const {\n"; in writeAccessors()
425 OS << " return " << getLowerName() << "Length;\n"; in writeAccessors()
426 OS << " }\n"; in writeAccessors()
427 OS << " void set" << getUpperName() in writeAccessors()
429 OS << " " << getLowerName() << "Length = S.size();\n"; in writeAccessors()
430 OS << " this->" << getLowerName() << " = new (C, 1) char [" in writeAccessors()
432 OS << " if (!S.empty())\n"; in writeAccessors()
433 OS << " std::memcpy(this->" << getLowerName() << ", S.data(), " in writeAccessors()
435 OS << " }"; in writeAccessors()
438 void writeCloneArgs(raw_ostream &OS) const override { in writeCloneArgs()
439 OS << "get" << getUpperName() << "()"; in writeCloneArgs()
442 void writeTemplateInstantiationArgs(raw_ostream &OS) const override { in writeTemplateInstantiationArgs()
443 OS << "A->get" << getUpperName() << "()"; in writeTemplateInstantiationArgs()
446 void writeCtorBody(raw_ostream &OS) const override { in writeCtorBody()
447 OS << " if (!" << getUpperName() << ".empty())\n"; in writeCtorBody()
448 OS << " std::memcpy(" << getLowerName() << ", " << getUpperName() in writeCtorBody()
452 void writeCtorInitializers(raw_ostream &OS) const override { in writeCtorInitializers()
453 OS << getLowerName() << "Length(" << getUpperName() << ".size())," in writeCtorInitializers()
458 void writeCtorDefaultInitializers(raw_ostream &OS) const override { in writeCtorDefaultInitializers()
459 OS << getLowerName() << "Length(0)," << getLowerName() << "(nullptr)"; in writeCtorDefaultInitializers()
462 void writeCtorParameters(raw_ostream &OS) const override { in writeCtorParameters()
463 OS << "llvm::StringRef " << getUpperName(); in writeCtorParameters()
466 void writeDeclarations(raw_ostream &OS) const override { in writeDeclarations()
467 OS << "unsigned " << getLowerName() << "Length;\n"; in writeDeclarations()
468 OS << "char *" << getLowerName() << ";"; in writeDeclarations()
471 void writePCHReadDecls(raw_ostream &OS) const override { in writePCHReadDecls()
472 OS << " std::string " << getLowerName() in writePCHReadDecls()
476 void writePCHReadArgs(raw_ostream &OS) const override { in writePCHReadArgs()
477 OS << getLowerName(); in writePCHReadArgs()
480 void writePCHWrite(raw_ostream &OS) const override { in writePCHWrite()
481 OS << " Record.AddString(SA->get" << getUpperName() << "());\n"; in writePCHWrite()
484 void writeValue(raw_ostream &OS) const override { in writeValue()
485 OS << "\\\"\" << get" << getUpperName() << "() << \"\\\""; in writeValue()
488 void writeDump(raw_ostream &OS) const override { in writeDump()
489 OS << " OS << \" \\\"\" << SA->get" << getUpperName() in writeDump()
500 void writeAccessors(raw_ostream &OS) const override { in writeAccessors()
501 OS << " bool is" << getUpperName() << "Dependent() const;\n"; in writeAccessors()
502 OS << " bool is" << getUpperName() << "ErrorDependent() const;\n"; in writeAccessors()
504 OS << " unsigned get" << getUpperName() << "(ASTContext &Ctx) const;\n"; in writeAccessors()
506 OS << " bool is" << getUpperName() << "Expr() const {\n"; in writeAccessors()
507 OS << " return is" << getLowerName() << "Expr;\n"; in writeAccessors()
508 OS << " }\n"; in writeAccessors()
510 OS << " Expr *get" << getUpperName() << "Expr() const {\n"; in writeAccessors()
511 OS << " assert(is" << getLowerName() << "Expr);\n"; in writeAccessors()
512 OS << " return " << getLowerName() << "Expr;\n"; in writeAccessors()
513 OS << " }\n"; in writeAccessors()
515 OS << " TypeSourceInfo *get" << getUpperName() << "Type() const {\n"; in writeAccessors()
516 OS << " assert(!is" << getLowerName() << "Expr);\n"; in writeAccessors()
517 OS << " return " << getLowerName() << "Type;\n"; in writeAccessors()
518 OS << " }"; in writeAccessors()
520 OS << " std::optional<unsigned> getCached" << getUpperName() in writeAccessors()
522 OS << " return " << getLowerName() << "Cache;\n"; in writeAccessors()
523 OS << " }"; in writeAccessors()
525 OS << " void setCached" << getUpperName() in writeAccessors()
527 OS << " " << getLowerName() << "Cache = AlignVal;\n"; in writeAccessors()
528 OS << " }"; in writeAccessors()
531 void writeAccessorDefinitions(raw_ostream &OS) const override { in writeAccessorDefinitions()
532 OS << "bool " << getAttrName() << "Attr::is" << getUpperName() in writeAccessorDefinitions()
534 OS << " if (is" << getLowerName() << "Expr)\n"; in writeAccessorDefinitions()
535 OS << " return " << getLowerName() << "Expr && (" << getLowerName() in writeAccessorDefinitions()
538 OS << " else\n"; in writeAccessorDefinitions()
539 OS << " return " << getLowerName() in writeAccessorDefinitions()
541 OS << "}\n"; in writeAccessorDefinitions()
543 OS << "bool " << getAttrName() << "Attr::is" << getUpperName() in writeAccessorDefinitions()
545 OS << " if (is" << getLowerName() << "Expr)\n"; in writeAccessorDefinitions()
546 OS << " return " << getLowerName() << "Expr && " << getLowerName() in writeAccessorDefinitions()
548 OS << " return " << getLowerName() in writeAccessorDefinitions()
550 OS << "}\n"; in writeAccessorDefinitions()
553 void writeASTVisitorTraversal(raw_ostream &OS) const override { in writeASTVisitorTraversal()
555 OS << " if (A->is" << Name << "Expr()) {\n" in writeASTVisitorTraversal()
564 void writeCloneArgs(raw_ostream &OS) const override { in writeCloneArgs()
565 OS << "is" << getLowerName() << "Expr, is" << getLowerName() in writeCloneArgs()
571 void writeTemplateInstantiationArgs(raw_ostream &OS) const override { in writeTemplateInstantiationArgs()
576 void writeCtorBody(raw_ostream &OS) const override { in writeCtorBody()
577 OS << " if (is" << getLowerName() << "Expr)\n"; in writeCtorBody()
578 OS << " " << getLowerName() << "Expr = reinterpret_cast<Expr *>(" in writeCtorBody()
580 OS << " else\n"; in writeCtorBody()
581 OS << " " << getLowerName() in writeCtorBody()
586 void writeCtorInitializers(raw_ostream &OS) const override { in writeCtorInitializers()
587 OS << "is" << getLowerName() << "Expr(Is" << getUpperName() << "Expr)"; in writeCtorInitializers()
590 void writeCtorDefaultInitializers(raw_ostream &OS) const override { in writeCtorDefaultInitializers()
591 OS << "is" << getLowerName() << "Expr(false)"; in writeCtorDefaultInitializers()
594 void writeCtorParameters(raw_ostream &OS) const override { in writeCtorParameters()
595 OS << "bool Is" << getUpperName() << "Expr, void *" << getUpperName(); in writeCtorParameters()
598 void writeImplicitCtorArgs(raw_ostream &OS) const override { in writeImplicitCtorArgs()
599 OS << "Is" << getUpperName() << "Expr, " << getUpperName(); in writeImplicitCtorArgs()
602 void writeDeclarations(raw_ostream &OS) const override { in writeDeclarations()
603 OS << "bool is" << getLowerName() << "Expr;\n"; in writeDeclarations()
604 OS << "union {\n"; in writeDeclarations()
605 OS << "Expr *" << getLowerName() << "Expr;\n"; in writeDeclarations()
606 OS << "TypeSourceInfo *" << getLowerName() << "Type;\n"; in writeDeclarations()
607 OS << "};\n"; in writeDeclarations()
608 OS << "std::optional<unsigned> " << getLowerName() << "Cache;\n"; in writeDeclarations()
611 void writePCHReadArgs(raw_ostream &OS) const override { in writePCHReadArgs()
612 OS << "is" << getLowerName() << "Expr, " << getLowerName() << "Ptr"; in writePCHReadArgs()
615 void writePCHReadDecls(raw_ostream &OS) const override { in writePCHReadDecls()
616 OS << " bool is" << getLowerName() << "Expr = Record.readInt();\n"; in writePCHReadDecls()
617 OS << " void *" << getLowerName() << "Ptr;\n"; in writePCHReadDecls()
618 OS << " if (is" << getLowerName() << "Expr)\n"; in writePCHReadDecls()
619 OS << " " << getLowerName() << "Ptr = Record.readExpr();\n"; in writePCHReadDecls()
620 OS << " else\n"; in writePCHReadDecls()
621 OS << " " << getLowerName() in writePCHReadDecls()
625 void writePCHWrite(raw_ostream &OS) const override { in writePCHWrite()
626 OS << " Record.push_back(SA->is" << getUpperName() << "Expr());\n"; in writePCHWrite()
627 OS << " if (SA->is" << getUpperName() << "Expr())\n"; in writePCHWrite()
628 OS << " Record.AddStmt(SA->get" << getUpperName() << "Expr());\n"; in writePCHWrite()
629 OS << " else\n"; in writePCHWrite()
630 OS << " Record.AddTypeSourceInfo(SA->get" << getUpperName() in writePCHWrite()
640 void writeValue(raw_ostream &OS) const override { in writeValue()
641 OS << "\";\n"; in writeValue()
642 OS << " if (is" << getLowerName() << "Expr && " << getLowerName() in writeValue()
644 OS << " " << getLowerName() in writeValue()
646 OS << " if (!is" << getLowerName() << "Expr && " << getLowerName() in writeValue()
648 OS << " " << getLowerName() in writeValue()
650 OS << " OS << \""; in writeValue()
653 void writeDump(raw_ostream &OS) const override { in writeDump()
654 OS << " if (!SA->is" << getUpperName() << "Expr())\n"; in writeDump()
655 OS << " dumpType(SA->get" << getUpperName() in writeDump()
659 void writeDumpChildren(raw_ostream &OS) const override { in writeDumpChildren()
660 OS << " if (SA->is" << getUpperName() << "Expr())\n"; in writeDumpChildren()
661 OS << " Visit(SA->get" << getUpperName() << "Expr());\n"; in writeDumpChildren()
664 void writeHasChildren(raw_ostream &OS) const override { in writeHasChildren()
665 OS << "SA->is" << getUpperName() << "Expr()"; in writeHasChildren()
674 virtual void writeValueImpl(raw_ostream &OS) const { in writeValueImpl()
675 OS << " OS << Val;\n"; in writeValueImpl()
678 virtual void writeDumpImpl(raw_ostream &OS) const { in writeDumpImpl()
679 OS << " OS << \" \" << Val;\n"; in writeDumpImpl()
698 void writeAccessors(raw_ostream &OS) const override { in writeAccessors()
703 OS << " typedef " << Type << "* " << IteratorType << ";\n"; in writeAccessors()
704 OS << " " << IteratorType << " " << BeginFn << " const {" in writeAccessors()
706 OS << " " << IteratorType << " " << EndFn << " const {" in writeAccessors()
708 OS << " unsigned " << getLowerName() << "_size() const {" in writeAccessors()
710 OS << " llvm::iterator_range<" << IteratorType << "> " << RangeName in writeAccessors()
715 void writeSetter(raw_ostream &OS) const { in writeSetter()
716 OS << " void set" << getUpperName() << "(ASTContext &Ctx, "; in writeSetter()
717 writeCtorParameters(OS); in writeSetter()
718 OS << ") {\n"; in writeSetter()
719 OS << " " << ArgSizeName << " = " << getUpperName() << "Size;\n"; in writeSetter()
720 OS << " " << ArgName << " = new (Ctx, 16) " << getType() << "[" in writeSetter()
722 OS << " "; in writeSetter()
723 writeCtorBody(OS); in writeSetter()
724 OS << " }\n"; in writeSetter()
727 void writeCloneArgs(raw_ostream &OS) const override { in writeCloneArgs()
728 OS << ArgName << ", " << ArgSizeName; in writeCloneArgs()
731 void writeTemplateInstantiationArgs(raw_ostream &OS) const override { in writeTemplateInstantiationArgs()
733 OS << "A->" << getLowerName() << "_begin(), " in writeTemplateInstantiationArgs()
737 void writeASTVisitorTraversal(raw_ostream &OS) const override { in writeASTVisitorTraversal()
741 void writeCtorBody(raw_ostream &OS) const override { in writeCtorBody()
742 OS << " std::copy(" << getUpperName() << ", " << getUpperName() << " + " in writeCtorBody()
746 void writeCtorInitializers(raw_ostream &OS) const override { in writeCtorInitializers()
747 OS << ArgSizeName << "(" << getUpperName() << "Size), " in writeCtorInitializers()
752 void writeCtorDefaultInitializers(raw_ostream &OS) const override { in writeCtorDefaultInitializers()
753 OS << ArgSizeName << "(0), " << ArgName << "(nullptr)"; in writeCtorDefaultInitializers()
756 void writeCtorParameters(raw_ostream &OS) const override { in writeCtorParameters()
757 OS << getType() << " *" << getUpperName() << ", unsigned " in writeCtorParameters()
761 void writeImplicitCtorArgs(raw_ostream &OS) const override { in writeImplicitCtorArgs()
762 OS << getUpperName() << ", " << getUpperName() << "Size"; in writeImplicitCtorArgs()
765 void writeDeclarations(raw_ostream &OS) const override { in writeDeclarations()
766 OS << " unsigned " << ArgSizeName << ";\n"; in writeDeclarations()
767 OS << " " << getType() << " *" << ArgName << ";"; in writeDeclarations()
770 void writePCHReadDecls(raw_ostream &OS) const override { in writePCHReadDecls()
771 OS << " unsigned " << getLowerName() << "Size = Record.readInt();\n"; in writePCHReadDecls()
772 OS << " SmallVector<" << getType() << ", 4> " in writePCHReadDecls()
774 OS << " " << getLowerName() << ".reserve(" << getLowerName() in writePCHReadDecls()
784 OS << " SmallVector<" << StorageType << ", 4> " in writePCHReadDecls()
786 OS << " " << StorageName << ".reserve(" << getLowerName() in writePCHReadDecls()
790 OS << " for (unsigned i = 0; i != " << getLowerName() << "Size; ++i)\n"; in writePCHReadDecls()
792 OS << " " << StorageName << ".push_back(" << read << ");\n"; in writePCHReadDecls()
795 OS << " for (unsigned i = 0; i != " << getLowerName() << "Size; ++i)\n"; in writePCHReadDecls()
796 OS << " " << getLowerName() << ".push_back(" in writePCHReadDecls()
801 void writePCHReadArgs(raw_ostream &OS) const override { in writePCHReadArgs()
802 OS << getLowerName() << ".data(), " << getLowerName() << "Size"; in writePCHReadArgs()
805 void writePCHWrite(raw_ostream &OS) const override { in writePCHWrite()
806 OS << " Record.push_back(SA->" << getLowerName() << "_size());\n"; in writePCHWrite()
807 OS << " for (auto &Val : SA->" << RangeName << "())\n"; in writePCHWrite()
808 OS << " " << WritePCHRecord(Type, "Val"); in writePCHWrite()
811 void writeValue(raw_ostream &OS) const override { in writeValue()
812 OS << "\";\n"; in writeValue()
813 OS << " for (const auto &Val : " << RangeName << "()) {\n" in writeValue()
815 writeValueImpl(OS); in writeValue()
816 OS << " }\n"; in writeValue()
817 OS << " OS << \""; in writeValue()
820 void writeDump(raw_ostream &OS) const override { in writeDump()
821 OS << " for (const auto &Val : SA->" << RangeName << "())\n"; in writeDump()
822 writeDumpImpl(OS); in writeDump()
831 void writeDump(raw_ostream &OS) const override { in writeDump()
832 OS << " for (" << getAttrName() << "Attr::" << getLowerName() in writeDump()
835 OS << " if (I->IsTarget && I->IsTargetSync)\n"; in writeDump()
836 OS << " OS << \" Target_TargetSync\";\n"; in writeDump()
837 OS << " else if (I->IsTarget)\n"; in writeDump()
838 OS << " OS << \" Target\";\n"; in writeDump()
839 OS << " else\n"; in writeDump()
840 OS << " OS << \" TargetSync\";\n"; in writeDump()
841 OS << " }\n"; in writeDump()
844 void writePCHReadDecls(raw_ostream &OS) const override { in writePCHReadDecls()
845 OS << " unsigned " << getLowerName() << "Size = Record.readInt();\n"; in writePCHReadDecls()
846 OS << " SmallVector<OMPInteropInfo, 4> " << getLowerName() << ";\n"; in writePCHReadDecls()
847 OS << " " << getLowerName() << ".reserve(" << getLowerName() in writePCHReadDecls()
849 OS << " for (unsigned I = 0, E = " << getLowerName() << "Size; "; in writePCHReadDecls()
850 OS << "I != E; ++I) {\n"; in writePCHReadDecls()
851 OS << " bool IsTarget = Record.readBool();\n"; in writePCHReadDecls()
852 OS << " bool IsTargetSync = Record.readBool();\n"; in writePCHReadDecls()
853 OS << " " << getLowerName() in writePCHReadDecls()
855 OS << " }\n"; in writePCHReadDecls()
858 void writePCHWrite(raw_ostream &OS) const override { in writePCHWrite()
859 OS << " Record.push_back(SA->" << getLowerName() << "_size());\n"; in writePCHWrite()
860 OS << " for (" << getAttrName() << "Attr::" << getLowerName() in writePCHWrite()
863 OS << " Record.writeBool(I->IsTarget);\n"; in writePCHWrite()
864 OS << " Record.writeBool(I->IsTargetSync);\n"; in writePCHWrite()
865 OS << " }\n"; in writePCHWrite()
875 void writeValueImpl(raw_ostream &OS) const override { in writeValueImpl()
876 OS << " OS << Val.getSourceIndex();\n"; in writeValueImpl()
879 void writeDumpImpl(raw_ostream &OS) const override { in writeDumpImpl()
880 OS << " OS << \" \" << Val.getSourceIndex();\n"; in writeDumpImpl()
929 void writeAccessors(raw_ostream &OS) const override { in writeAccessors()
930 OS << " " << fullType << " get" << getUpperName() << "() const {\n"; in writeAccessors()
931 OS << " return " << getLowerName() << ";\n"; in writeAccessors()
932 OS << " }"; in writeAccessors()
935 void writeCloneArgs(raw_ostream &OS) const override { in writeCloneArgs()
936 OS << getLowerName(); in writeCloneArgs()
939 void writeTemplateInstantiationArgs(raw_ostream &OS) const override { in writeTemplateInstantiationArgs()
940 OS << "A->get" << getUpperName() << "()"; in writeTemplateInstantiationArgs()
942 void writeCtorInitializers(raw_ostream &OS) const override { in writeCtorInitializers()
943 OS << getLowerName() << "(" << getUpperName() << ")"; in writeCtorInitializers()
945 void writeCtorDefaultInitializers(raw_ostream &OS) const override { in writeCtorDefaultInitializers()
946 OS << getLowerName() << "(" << fullType << "(0))"; in writeCtorDefaultInitializers()
948 void writeCtorParameters(raw_ostream &OS) const override { in writeCtorParameters()
949 OS << fullType << " " << getUpperName(); in writeCtorParameters()
951 void writeDeclarations(raw_ostream &OS) const override { in writeDeclarations()
957 OS << "public:\n"; in writeDeclarations()
958 OS << " enum " << shortType << " {\n"; in writeDeclarations()
960 OS << " " << *i << ",\n"; in writeDeclarations()
961 OS << " " << *e << "\n"; in writeDeclarations()
962 OS << " };\n"; in writeDeclarations()
965 OS << "private:\n"; in writeDeclarations()
966 OS << " " << fullType << " " << getLowerName() << ";"; in writeDeclarations()
969 void writePCHReadDecls(raw_ostream &OS) const override { in writePCHReadDecls()
970 OS << " " << fullType << " " << getLowerName() << "(static_cast<" in writePCHReadDecls()
974 void writePCHReadArgs(raw_ostream &OS) const override { in writePCHReadArgs()
975 OS << getLowerName(); in writePCHReadArgs()
978 void writePCHWrite(raw_ostream &OS) const override { in writePCHWrite()
979 OS << "Record.push_back(static_cast<uint64_t>(SA->get" << getUpperName() in writePCHWrite()
983 void writeValue(raw_ostream &OS) const override { in writeValue()
987 OS << "\\\"\" << " << getAttrName() << "Attr::Convert" << shortType in writeValue()
991 void writeDump(raw_ostream &OS) const override { in writeDump()
992 OS << " switch(SA->get" << getUpperName() << "()) {\n"; in writeDump()
994 OS << " case " << fullType << "::" << I << ":\n"; in writeDump()
995 OS << " OS << \" " << I << "\";\n"; in writeDump()
996 OS << " break;\n"; in writeDump()
999 OS << " default:\n"; in writeDump()
1000 OS << " llvm_unreachable(\"Invalid attribute value\");\n"; in writeDump()
1002 OS << " }\n"; in writeDump()
1005 void writeConversion(raw_ostream &OS, bool Header) const { in writeConversion() argument
1007 OS << " static bool ConvertStrTo" << shortType << "(StringRef Val, " in writeConversion()
1009 OS << " static const char *Convert" << shortType << "ToStr(" in writeConversion()
1014 OS << "bool " << getAttrName() << "Attr::ConvertStrTo" << shortType in writeConversion()
1016 OS << " std::optional<" << fullType << "> " in writeConversion()
1019 OS << " .Case(\"" << values[I] << "\", "; in writeConversion()
1020 OS << fullType << "::" << enums[I] << ")\n"; in writeConversion()
1022 OS << " .Default(std::optional<" << fullType << ">());\n"; in writeConversion()
1023 OS << " if (R) {\n"; in writeConversion()
1024 OS << " Out = *R;\n return true;\n }\n"; in writeConversion()
1025 OS << " return false;\n"; in writeConversion()
1026 OS << "}\n\n"; in writeConversion()
1032 OS << "const char *" << getAttrName() << "Attr::Convert" << shortType in writeConversion()
1038 OS << " case " << fullType << "::" << enums[I] << ": return \"" in writeConversion()
1042 OS << " default: llvm_unreachable(\"Invalid attribute value\");\n"; in writeConversion()
1044 OS << " }\n" in writeConversion()
1058 void writeValueImpl(raw_ostream &OS) const override { in writeValueImpl()
1062 OS << " OS << \"\\\"\" << " << getAttrName() << "Attr::Convert" in writeValueImpl()
1090 void writeDeclarations(raw_ostream &OS) const override { in writeDeclarations()
1096 OS << "public:\n"; in writeDeclarations()
1097 OS << " enum " << shortType << " {\n"; in writeDeclarations()
1099 OS << " " << *i << ",\n"; in writeDeclarations()
1100 OS << " " << *e << "\n"; in writeDeclarations()
1101 OS << " };\n"; in writeDeclarations()
1103 OS << "private:\n"; in writeDeclarations()
1105 VariadicArgument::writeDeclarations(OS); in writeDeclarations()
1108 void writeDump(raw_ostream &OS) const override { in writeDump()
1109 OS << " for (" << getAttrName() << "Attr::" << getLowerName() in writeDump()
1112 OS << " switch(*I) {\n"; in writeDump()
1114 OS << " case " << fullType << "::" << UI << ":\n"; in writeDump()
1115 OS << " OS << \" " << UI << "\";\n"; in writeDump()
1116 OS << " break;\n"; in writeDump()
1119 OS << " default:\n"; in writeDump()
1120 OS << " llvm_unreachable(\"Invalid attribute value\");\n"; in writeDump()
1122 OS << " }\n"; in writeDump()
1123 OS << " }\n"; in writeDump()
1126 void writePCHReadDecls(raw_ostream &OS) const override { in writePCHReadDecls()
1127 OS << " unsigned " << getLowerName() << "Size = Record.readInt();\n"; in writePCHReadDecls()
1128 OS << " SmallVector<" << fullType << ", 4> " << getLowerName() in writePCHReadDecls()
1130 OS << " " << getLowerName() << ".reserve(" << getLowerName() in writePCHReadDecls()
1132 OS << " for (unsigned i = " << getLowerName() << "Size; i; --i)\n"; in writePCHReadDecls()
1133 OS << " " << getLowerName() << ".push_back(" in writePCHReadDecls()
1137 void writePCHWrite(raw_ostream &OS) const override { in writePCHWrite()
1138 OS << " Record.push_back(SA->" << getLowerName() << "_size());\n"; in writePCHWrite()
1139 OS << " for (" << getAttrName() << "Attr::" << getLowerName() in writePCHWrite()
1142 OS << " " << WritePCHRecord(fullType, "(*i)"); in writePCHWrite()
1145 void writeConversion(raw_ostream &OS, bool Header) const { in writeConversion() argument
1147 OS << " static bool ConvertStrTo" << shortType << "(StringRef Val, " in writeConversion()
1149 OS << " static const char *Convert" << shortType << "ToStr(" in writeConversion()
1154 OS << "bool " << getAttrName() << "Attr::ConvertStrTo" << shortType in writeConversion()
1156 OS << fullType << " &Out) {\n"; in writeConversion()
1157 OS << " std::optional<" << fullType in writeConversion()
1159 OS << fullType << ">>(Val)\n"; in writeConversion()
1161 OS << " .Case(\"" << values[I] << "\", "; in writeConversion()
1162 OS << fullType << "::" << enums[I] << ")\n"; in writeConversion()
1164 OS << " .Default(std::optional<" << fullType << ">());\n"; in writeConversion()
1165 OS << " if (R) {\n"; in writeConversion()
1166 OS << " Out = *R;\n return true;\n }\n"; in writeConversion()
1167 OS << " return false;\n"; in writeConversion()
1168 OS << "}\n\n"; in writeConversion()
1170 OS << "const char *" << getAttrName() << "Attr::Convert" << shortType in writeConversion()
1176 OS << " case " << fullType << "::" << enums[I] << ": return \"" in writeConversion()
1180 OS << " default: llvm_unreachable(\"Invalid attribute value\");\n"; in writeConversion()
1182 OS << " }\n" in writeConversion()
1194 void writeAccessors(raw_ostream &OS) const override { in writeAccessors()
1195 OS << " VersionTuple get" << getUpperName() << "() const {\n"; in writeAccessors()
1196 OS << " return " << getLowerName() << ";\n"; in writeAccessors()
1197 OS << " }\n"; in writeAccessors()
1198 OS << " void set" << getUpperName() in writeAccessors()
1200 OS << " " << getLowerName() << " = V;\n"; in writeAccessors()
1201 OS << " }"; in writeAccessors()
1204 void writeCloneArgs(raw_ostream &OS) const override { in writeCloneArgs()
1205 OS << "get" << getUpperName() << "()"; in writeCloneArgs()
1208 void writeTemplateInstantiationArgs(raw_ostream &OS) const override { in writeTemplateInstantiationArgs()
1209 OS << "A->get" << getUpperName() << "()"; in writeTemplateInstantiationArgs()
1212 void writeCtorInitializers(raw_ostream &OS) const override { in writeCtorInitializers()
1213 OS << getLowerName() << "(" << getUpperName() << ")"; in writeCtorInitializers()
1216 void writeCtorDefaultInitializers(raw_ostream &OS) const override { in writeCtorDefaultInitializers()
1217 OS << getLowerName() << "()"; in writeCtorDefaultInitializers()
1220 void writeCtorParameters(raw_ostream &OS) const override { in writeCtorParameters()
1221 OS << "VersionTuple " << getUpperName(); in writeCtorParameters()
1224 void writeDeclarations(raw_ostream &OS) const override { in writeDeclarations()
1225 OS << "VersionTuple " << getLowerName() << ";\n"; in writeDeclarations()
1228 void writePCHReadDecls(raw_ostream &OS) const override { in writePCHReadDecls()
1229 OS << " VersionTuple " << getLowerName() in writePCHReadDecls()
1233 void writePCHReadArgs(raw_ostream &OS) const override { in writePCHReadArgs()
1234 OS << getLowerName(); in writePCHReadArgs()
1237 void writePCHWrite(raw_ostream &OS) const override { in writePCHWrite()
1238 OS << " Record.AddVersionTuple(SA->get" << getUpperName() << "());\n"; in writePCHWrite()
1241 void writeValue(raw_ostream &OS) const override { in writeValue()
1242 OS << getLowerName() << "=\" << get" << getUpperName() << "() << \""; in writeValue()
1245 void writeDump(raw_ostream &OS) const override { in writeDump()
1246 OS << " OS << \" \" << SA->get" << getUpperName() << "();\n"; in writeDump()
1256 void writeASTVisitorTraversal(raw_ostream &OS) const override { in writeASTVisitorTraversal()
1257 OS << " if (!" in writeASTVisitorTraversal()
1259 OS << " return false;\n"; in writeASTVisitorTraversal()
1262 void writeTemplateInstantiationArgs(raw_ostream &OS) const override { in writeTemplateInstantiationArgs()
1263 OS << "tempInst" << getUpperName(); in writeTemplateInstantiationArgs()
1266 void writeTemplateInstantiation(raw_ostream &OS) const override { in writeTemplateInstantiation()
1267 OS << " " << getType() << " tempInst" << getUpperName() << ";\n"; in writeTemplateInstantiation()
1268 OS << " {\n"; in writeTemplateInstantiation()
1269 OS << " EnterExpressionEvaluationContext " in writeTemplateInstantiation()
1271 OS << " ExprResult " << "Result = S.SubstExpr(" in writeTemplateInstantiation()
1273 OS << " if (Result.isInvalid())\n"; in writeTemplateInstantiation()
1274 OS << " return nullptr;\n"; in writeTemplateInstantiation()
1275 OS << " tempInst" << getUpperName() << " = Result.get();\n"; in writeTemplateInstantiation()
1276 OS << " }\n"; in writeTemplateInstantiation()
1279 void writeValue(raw_ostream &OS) const override { in writeValue()
1280 OS << "\";\n"; in writeValue()
1281 OS << " get" << getUpperName() in writeValue()
1283 OS << " OS << \""; in writeValue()
1286 void writeDump(raw_ostream &OS) const override {} in writeDump()
1288 void writeDumpChildren(raw_ostream &OS) const override { in writeDumpChildren()
1289 OS << " Visit(SA->get" << getUpperName() << "());\n"; in writeDumpChildren()
1292 void writeHasChildren(raw_ostream &OS) const override { OS << "true"; } in writeHasChildren()
1304 void writeASTVisitorTraversal(raw_ostream &OS) const override { in writeASTVisitorTraversal()
1305 OS << " {\n"; in writeASTVisitorTraversal()
1306 OS << " " << getType() << " *I = A->" << getLowerName() in writeASTVisitorTraversal()
1308 OS << " " << getType() << " *E = A->" << getLowerName() in writeASTVisitorTraversal()
1310 OS << " for (; I != E; ++I) {\n"; in writeASTVisitorTraversal()
1311 OS << " if (!getDerived().TraverseStmt(*I))\n"; in writeASTVisitorTraversal()
1312 OS << " return false;\n"; in writeASTVisitorTraversal()
1313 OS << " }\n"; in writeASTVisitorTraversal()
1314 OS << " }\n"; in writeASTVisitorTraversal()
1317 void writeTemplateInstantiationArgs(raw_ostream &OS) const override { in writeTemplateInstantiationArgs()
1318 OS << "tempInst" << getUpperName() << ", " in writeTemplateInstantiationArgs()
1322 void writeTemplateInstantiation(raw_ostream &OS) const override { in writeTemplateInstantiation()
1323 OS << " auto *tempInst" << getUpperName() in writeTemplateInstantiation()
1326 OS << " {\n"; in writeTemplateInstantiation()
1327 OS << " EnterExpressionEvaluationContext " in writeTemplateInstantiation()
1329 OS << " " << getType() << " *TI = tempInst" << getUpperName() in writeTemplateInstantiation()
1331 OS << " " << getType() << " *I = A->" << getLowerName() in writeTemplateInstantiation()
1333 OS << " " << getType() << " *E = A->" << getLowerName() in writeTemplateInstantiation()
1335 OS << " for (; I != E; ++I, ++TI) {\n"; in writeTemplateInstantiation()
1336 OS << " ExprResult Result = S.SubstExpr(*I, TemplateArgs);\n"; in writeTemplateInstantiation()
1337 OS << " if (Result.isInvalid())\n"; in writeTemplateInstantiation()
1338 OS << " return nullptr;\n"; in writeTemplateInstantiation()
1339 OS << " *TI = Result.get();\n"; in writeTemplateInstantiation()
1340 OS << " }\n"; in writeTemplateInstantiation()
1341 OS << " }\n"; in writeTemplateInstantiation()
1344 void writeDump(raw_ostream &OS) const override {} in writeDump()
1346 void writeDumpChildren(raw_ostream &OS) const override { in writeDumpChildren()
1347 OS << " for (" << getAttrName() << "Attr::" << getLowerName() in writeDumpChildren()
1350 OS << " Visit(*I);\n"; in writeDumpChildren()
1353 void writeHasChildren(raw_ostream &OS) const override { in writeHasChildren()
1354 OS << "SA->" << getLowerName() << "_begin() != " in writeHasChildren()
1372 void writeCtorBody(raw_ostream &OS) const override { in writeCtorBody()
1373 OS << " for (size_t I = 0, E = " << getArgSizeName() << "; I != E;\n" in writeCtorBody()
1384 void writeValueImpl(raw_ostream &OS) const override { in writeValueImpl()
1385 OS << " OS << \"\\\"\" << Val << \"\\\"\";\n"; in writeValueImpl()
1395 void writeAccessors(raw_ostream &OS) const override { in writeAccessors()
1396 OS << " QualType get" << getUpperName() << "() const {\n"; in writeAccessors()
1397 OS << " return " << getLowerName() << "->getType();\n"; in writeAccessors()
1398 OS << " }"; in writeAccessors()
1399 OS << " " << getType() << " get" << getUpperName() << "Loc() const {\n"; in writeAccessors()
1400 OS << " return " << getLowerName() << ";\n"; in writeAccessors()
1401 OS << " }"; in writeAccessors()
1404 void writeASTVisitorTraversal(raw_ostream &OS) const override { in writeASTVisitorTraversal()
1405 OS << " if (auto *TSI = A->get" << getUpperName() << "Loc())\n"; in writeASTVisitorTraversal()
1406 OS << " if (!getDerived().TraverseTypeLoc(TSI->getTypeLoc()))\n"; in writeASTVisitorTraversal()
1407 OS << " return false;\n"; in writeASTVisitorTraversal()
1410 void writeTemplateInstantiation(raw_ostream &OS) const override { in writeTemplateInstantiation()
1411 OS << " " << getType() << " tempInst" << getUpperName() << " =\n"; in writeTemplateInstantiation()
1412 OS << " S.SubstType(A->get" << getUpperName() << "Loc(), " in writeTemplateInstantiation()
1414 OS << " if (!tempInst" << getUpperName() << ")\n"; in writeTemplateInstantiation()
1415 OS << " return nullptr;\n"; in writeTemplateInstantiation()
1418 void writeTemplateInstantiationArgs(raw_ostream &OS) const override { in writeTemplateInstantiationArgs()
1419 OS << "tempInst" << getUpperName(); in writeTemplateInstantiationArgs()
1422 void writePCHWrite(raw_ostream &OS) const override { in writePCHWrite()
1423 OS << " " in writePCHWrite()
1434 void writePCHReadDecls(raw_ostream &OS) const override { in writePCHReadDecls()
1435 OS << " Attr *" << getLowerName() << " = Record.readAttr();"; in writePCHReadDecls()
1438 void writePCHWrite(raw_ostream &OS) const override { in writePCHWrite()
1439 OS << " AddAttr(SA->get" << getUpperName() << "());"; in writePCHWrite()
1442 void writeDump(raw_ostream &OS) const override {} in writeDump()
1444 void writeDumpChildren(raw_ostream &OS) const override { in writeDumpChildren()
1445 OS << " Visit(SA->get" << getUpperName() << "());\n"; in writeDumpChildren()
1448 void writeHasChildren(raw_ostream &OS) const override { OS << "true"; } in writeHasChildren()
1532 static void writeAvailabilityValue(raw_ostream &OS) { in writeAvailabilityValue() argument
1533 OS << "\" << getPlatform()->getName();\n" in writeAvailabilityValue()
1542 static void writeDeprecatedAttrValue(raw_ostream &OS, std::string &Variety) { in writeDeprecatedAttrValue() argument
1543 OS << "\\\"\" << getMessage() << \"\\\"\";\n"; in writeDeprecatedAttrValue()
1546 OS << " if (!getReplacement().empty()) OS << \", \\\"\"" in writeDeprecatedAttrValue()
1548 OS << " OS << \""; in writeDeprecatedAttrValue()
1551 static void writeGetSpellingFunction(const Record &R, raw_ostream &OS) { in writeGetSpellingFunction() argument
1554 OS << "const char *" << R.getName() << "Attr::getSpelling() const {\n"; in writeGetSpellingFunction()
1556 OS << " return \"(No spelling)\";\n}\n\n"; in writeGetSpellingFunction()
1560 OS << " switch (getAttributeSpellingListIndex()) {\n" in writeGetSpellingFunction()
1566 OS << " case " << I << ":\n" in writeGetSpellingFunction()
1569 OS << " }\n"; in writeGetSpellingFunction()
1571 OS << "}\n\n"; in writeGetSpellingFunction()
1577 raw_ostream &OS) { in writePrettyPrintFunction() argument
1580 OS << "void " << R.getName() << "Attr::printPretty(" in writePrettyPrintFunction()
1584 OS << "}\n\n"; in writePrettyPrintFunction()
1588 OS << " bool IsFirstArgument = true; (void)IsFirstArgument;\n" in writePrettyPrintFunction()
1641 OS << " case " << I << " : {\n" in writePrettyPrintFunction()
1645 OS << " printPrettyPragma(OS, Policy);\n"; in writePrettyPrintFunction()
1646 OS << " OS << \"\\n\";"; in writePrettyPrintFunction()
1647 OS << " break;\n"; in writePrettyPrintFunction()
1648 OS << " }\n"; in writePrettyPrintFunction()
1653 OS << " OS << \"("; in writePrettyPrintFunction()
1654 writeAvailabilityValue(OS); in writePrettyPrintFunction()
1655 OS << ")\";\n"; in writePrettyPrintFunction()
1657 OS << " OS << \"("; in writePrettyPrintFunction()
1658 writeDeprecatedAttrValue(OS, Variety); in writePrettyPrintFunction()
1659 OS << ")\";\n"; in writePrettyPrintFunction()
1676 OS << " if (" << arg->getIsOmitted() << ")\n" in writePrettyPrintFunction()
1685 OS << " if (!(" << IsOmitted << ")) {\n"; in writePrettyPrintFunction()
1688 OS << " DelimitAttributeArgument(OS, IsFirstArgument);\n"; in writePrettyPrintFunction()
1689 OS << " OS << \""; in writePrettyPrintFunction()
1690 arg->writeValue(OS); in writePrettyPrintFunction()
1691 OS << "\";\n"; in writePrettyPrintFunction()
1693 OS << " }\n"; in writePrettyPrintFunction()
1697 OS << " if (!IsFirstArgument)\n" in writePrettyPrintFunction()
1700 OS << " OS << \"" << Suffix << "\";\n" in writePrettyPrintFunction()
1706 OS << "}\n"; in writePrettyPrintFunction()
1708 OS << "}\n\n"; in writePrettyPrintFunction()
1732 static void writeAttrAccessorDefinition(const Record &R, raw_ostream &OS) { in writeAttrAccessorDefinition() argument
1744 OS << " bool " << Name in writeAttrAccessorDefinition()
1747 OS << getSpellingListIndex(SpellingList, Spellings[Index]); in writeAttrAccessorDefinition()
1749 OS << " ||\n getAttributeSpellingListIndex() == "; in writeAttrAccessorDefinition()
1751 OS << "; }\n"; in writeAttrAccessorDefinition()
1828 raw_ostream &OS) { in WriteSemanticSpellingSwitch() argument
1829 OS << " switch (" << VarName << ") {\n default: " in WriteSemanticSpellingSwitch()
1832 OS << " case " << I.first << ": return " << I.second << ";\n"; in WriteSemanticSpellingSwitch()
1833 OS << " }\n"; in WriteSemanticSpellingSwitch()
1896 raw_ostream &OS, in emitClangAttrLateParsedListImpl() argument
1911 OS << ".Case(\"" << I.name() << "\", 1)\n"; in emitClangAttrLateParsedListImpl()
1917 raw_ostream &OS) { in emitClangAttrLateParsedList() argument
1918 OS << "#if defined(CLANG_ATTR_LATE_PARSED_LIST)\n"; in emitClangAttrLateParsedList()
1919 emitClangAttrLateParsedListImpl(Records, OS, LateAttrParseKind::Standard); in emitClangAttrLateParsedList()
1920 OS << "#endif // CLANG_ATTR_LATE_PARSED_LIST\n\n"; in emitClangAttrLateParsedList()
1924 raw_ostream &OS) { in emitClangAttrLateParsedExperimentalList() argument
1925 OS << "#if defined(CLANG_ATTR_LATE_PARSED_EXPERIMENTAL_EXT_LIST)\n"; in emitClangAttrLateParsedExperimentalList()
1926 emitClangAttrLateParsedListImpl(Records, OS, in emitClangAttrLateParsedExperimentalList()
1928 OS << "#endif // CLANG_ATTR_LATE_PARSED_EXPERIMENTAL_EXT_LIST\n\n"; in emitClangAttrLateParsedExperimentalList()
2054 void emitMatchRuleList(raw_ostream &OS);
2056 void generateStrictConformsTo(const Record &Attr, raw_ostream &OS);
2058 void generateParsingHelpers(raw_ostream &OS);
2158 void PragmaClangAttributeSupport::emitMatchRuleList(raw_ostream &OS) { in emitMatchRuleList() argument
2159 OS << "#ifndef ATTR_MATCH_SUB_RULE\n"; in emitMatchRuleList()
2160 OS << "#define ATTR_MATCH_SUB_RULE(Value, Spelling, IsAbstract, Parent, " in emitMatchRuleList()
2163 OS << "#endif\n"; in emitMatchRuleList()
2165 OS << (Rule.isSubRule() ? "ATTR_MATCH_SUB_RULE" : "ATTR_MATCH_RULE") << '('; in emitMatchRuleList()
2166 OS << Rule.getEnumValueName() << ", \"" << Rule.getSpelling() << "\", " in emitMatchRuleList()
2169 OS << ", " in emitMatchRuleList()
2172 OS << ")\n"; in emitMatchRuleList()
2174 OS << "#undef ATTR_MATCH_SUB_RULE\n"; in emitMatchRuleList()
2254 raw_ostream &OS) { in generateStrictConformsTo() argument
2259 OS << "void getPragmaAttributeMatchRules(" in generateStrictConformsTo()
2275 OS << " MatchRules.push_back(std::make_pair(" << Rule.getEnumValue() in generateStrictConformsTo()
2280 OS << "}\n\n"; in generateStrictConformsTo()
2283 void PragmaClangAttributeSupport::generateParsingHelpers(raw_ostream &OS) { in generateParsingHelpers() argument
2285 OS << "std::optional<attr::SubjectMatchRule> " in generateParsingHelpers()
2287 OS << " return std::nullopt;\n"; in generateParsingHelpers()
2288 OS << "}\n\n"; in generateParsingHelpers()
2299 OS << "std::optional<attr::SubjectMatchRule> " in generateParsingHelpers()
2303 OS << " if (IsUnless)\n"; in generateParsingHelpers()
2304 OS << " return " in generateParsingHelpers()
2308 OS << " Case(\"" << Rule.getName() << "\", " << Rule.getEnumValue() in generateParsingHelpers()
2311 OS << " Default(std::nullopt);\n"; in generateParsingHelpers()
2312 OS << " return " in generateParsingHelpers()
2316 OS << " Case(\"" << Rule.getName() << "\", " << Rule.getEnumValue() in generateParsingHelpers()
2319 OS << " Default(std::nullopt);\n"; in generateParsingHelpers()
2320 OS << "}\n\n"; in generateParsingHelpers()
2324 OS << "std::pair<std::optional<attr::SubjectMatchRule>, " in generateParsingHelpers()
2327 OS << " return " in generateParsingHelpers()
2340 OS << " Case(\"" << Rule.getName() << "\", std::make_pair(" in generateParsingHelpers()
2343 OS << " Default(std::make_pair(std::nullopt, " in generateParsingHelpers()
2345 OS << "}\n\n"; in generateParsingHelpers()
2348 OS << "const char *validAttributeSubjectMatchSubRules(" in generateParsingHelpers()
2350 OS << " switch (Rule) {\n"; in generateParsingHelpers()
2352 OS << " case " in generateParsingHelpers()
2355 OS << " return \"'"; in generateParsingHelpers()
2359 OS << ", '"; in generateParsingHelpers()
2362 OS << "unless("; in generateParsingHelpers()
2363 OS << Rule.getName(); in generateParsingHelpers()
2365 OS << ')'; in generateParsingHelpers()
2366 OS << "'"; in generateParsingHelpers()
2368 OS << "\";\n"; in generateParsingHelpers()
2370 OS << " default: return nullptr;\n"; in generateParsingHelpers()
2371 OS << " }\n"; in generateParsingHelpers()
2372 OS << "}\n\n"; in generateParsingHelpers()
2391 static void emitClangAttrTypeArgList(RecordKeeper &Records, raw_ostream &OS) { in emitClangAttrTypeArgList() argument
2392 OS << "#if defined(CLANG_ATTR_TYPE_ARG_LIST)\n"; in emitClangAttrTypeArgList()
2406 OS << ".Case(\"" << S.name() << "\", " << "true" << ")\n"; in emitClangAttrTypeArgList()
2409 OS << "#endif // CLANG_ATTR_TYPE_ARG_LIST\n\n"; in emitClangAttrTypeArgList()
2414 static void emitClangAttrArgContextList(RecordKeeper &Records, raw_ostream &OS) { in emitClangAttrArgContextList() argument
2415 OS << "#if defined(CLANG_ATTR_ARG_CONTEXT_LIST)\n"; in emitClangAttrArgContextList()
2425 OS << ".Case(\"" << S.name() << "\", " << "true" << ")\n"; in emitClangAttrArgContextList()
2428 OS << "#endif // CLANG_ATTR_ARG_CONTEXT_LIST\n\n"; in emitClangAttrArgContextList()
2476 raw_ostream &OS) { in emitClangAttrVariadicIdentifierArgList() argument
2477 OS << "#if defined(CLANG_ATTR_VARIADIC_IDENTIFIER_ARG_LIST)\n"; in emitClangAttrVariadicIdentifierArgList()
2487 OS << ".Case(\"" << S.name() << "\", " in emitClangAttrVariadicIdentifierArgList()
2492 OS << "#endif // CLANG_ATTR_VARIADIC_IDENTIFIER_ARG_LIST\n\n"; in emitClangAttrVariadicIdentifierArgList()
2503 raw_ostream &OS) { in emitClangAttrUnevaluatedStringLiteralList() argument
2504 OS << "#if defined(CLANG_ATTR_STRING_LITERAL_ARG_LIST)\n"; in emitClangAttrUnevaluatedStringLiteralList()
2556 OS << ".Case(\"" << S.name() << "\", " << MaskStr << ")\n"; in emitClangAttrUnevaluatedStringLiteralList()
2559 OS << "#endif // CLANG_ATTR_STRING_LITERAL_ARG_LIST\n\n"; in emitClangAttrUnevaluatedStringLiteralList()
2563 static void emitClangAttrIdentifierArgList(RecordKeeper &Records, raw_ostream &OS) { in emitClangAttrIdentifierArgList() argument
2564 OS << "#if defined(CLANG_ATTR_IDENTIFIER_ARG_LIST)\n"; in emitClangAttrIdentifierArgList()
2575 OS << ".Case(\"" << S.name() << "\", " << "true" << ")\n"; in emitClangAttrIdentifierArgList()
2578 OS << "#endif // CLANG_ATTR_IDENTIFIER_ARG_LIST\n\n"; in emitClangAttrIdentifierArgList()
2583 raw_ostream &OS) { in emitClangAttrStrictIdentifierArgAtIndexList() argument
2584 OS << "#if defined(CLANG_ATTR_STRICT_IDENTIFIER_ARG_AT_INDEX_LIST)\n"; in emitClangAttrStrictIdentifierArgAtIndexList()
2601 OS << ".Case(\"" << S.name() << "\", " << enumAtIndex << "ull)\n"; in emitClangAttrStrictIdentifierArgAtIndexList()
2604 OS << "#endif // CLANG_ATTR_STRICT_IDENTIFIER_ARG_AT_INDEX_LIST\n\n"; in emitClangAttrStrictIdentifierArgAtIndexList()
2616 raw_ostream &OS) { in emitClangAttrThisIsaIdentifierArgList() argument
2617 OS << "#if defined(CLANG_ATTR_THIS_ISA_IDENTIFIER_ARG_LIST)\n"; in emitClangAttrThisIsaIdentifierArgList()
2627 OS << ".Case(\"" << S.name() << "\", " in emitClangAttrThisIsaIdentifierArgList()
2632 OS << "#endif // CLANG_ATTR_THIS_ISA_IDENTIFIER_ARG_LIST\n\n"; in emitClangAttrThisIsaIdentifierArgList()
2636 raw_ostream &OS) { in emitClangAttrAcceptsExprPack() argument
2637 OS << "#if defined(CLANG_ATTR_ACCEPTS_EXPR_PACK)\n"; in emitClangAttrAcceptsExprPack()
2646 OS << ".Case(\"" << S.name() << "\", true)\n"; in emitClangAttrAcceptsExprPack()
2649 OS << "#endif // CLANG_ATTR_ACCEPTS_EXPR_PACK\n\n"; in emitClangAttrAcceptsExprPack()
2657 static void emitFormInitializer(raw_ostream &OS, in emitFormInitializer() argument
2662 OS << "{AttributeCommonInfo::AS_" << Spelling.variety() << ", " in emitFormInitializer()
2669 static void emitAttributes(RecordKeeper &Records, raw_ostream &OS, in emitAttributes() argument
2677 OS << "static inline void DelimitAttributeArgument(" in emitAttributes()
2717 OS << "class " << R.getName() << "Attr : public " << SuperName << " {\n"; in emitAttributes()
2719 OS << "\n// " << R.getName() << "Attr implementation\n\n"; in emitAttributes()
2749 Args.back()->writeDeclarations(OS); in emitAttributes()
2750 OS << "\n\n"; in emitAttributes()
2766 DelayedArgs->writeDeclarations(OS); in emitAttributes()
2767 OS << "\n\n"; in emitAttributes()
2772 OS << "public:\n"; in emitAttributes()
2789 OS << SpellingEnum; in emitAttributes()
2799 OS << " static "; in emitAttributes()
2800 OS << R.getName() << "Attr *"; in emitAttributes()
2802 OS << R.getName() << "Attr::"; in emitAttributes()
2803 OS << "Create"; in emitAttributes()
2805 OS << "Implicit"; in emitAttributes()
2807 OS << "WithDelayedArgs"; in emitAttributes()
2808 OS << "("; in emitAttributes()
2809 OS << "ASTContext &Ctx"; in emitAttributes()
2814 OS << ", "; in emitAttributes()
2815 ai->writeCtorParameters(OS); in emitAttributes()
2818 OS << ", "; in emitAttributes()
2819 DelayedArgs->writeCtorParameters(OS); in emitAttributes()
2821 OS << ", const AttributeCommonInfo &CommonInfo"; in emitAttributes()
2822 OS << ")"; in emitAttributes()
2824 OS << ";\n"; in emitAttributes()
2828 OS << " {\n"; in emitAttributes()
2829 OS << " auto *A = new (Ctx) " << R.getName(); in emitAttributes()
2830 OS << "Attr(Ctx, CommonInfo"; in emitAttributes()
2836 OS << ", "; in emitAttributes()
2837 ai->writeImplicitCtorArgs(OS); in emitAttributes()
2840 OS << ");\n"; in emitAttributes()
2842 OS << " A->setImplicit(true);\n"; in emitAttributes()
2845 OS << " if (!A->isAttributeSpellingListCalculated() && " in emitAttributes()
2847 OS << " A->setAttributeSpellingListIndex(0);\n"; in emitAttributes()
2850 OS << " A->setDelayedArgs(Ctx, "; in emitAttributes()
2851 DelayedArgs->writeImplicitCtorArgs(OS); in emitAttributes()
2852 OS << ");\n"; in emitAttributes()
2854 OS << " return A;\n}\n\n"; in emitAttributes()
2860 OS << " static "; in emitAttributes()
2861 OS << R.getName() << "Attr *"; in emitAttributes()
2863 OS << R.getName() << "Attr::"; in emitAttributes()
2864 OS << "Create"; in emitAttributes()
2866 OS << "Implicit"; in emitAttributes()
2868 OS << "WithDelayedArgs"; in emitAttributes()
2869 OS << "("; in emitAttributes()
2870 OS << "ASTContext &Ctx"; in emitAttributes()
2875 OS << ", "; in emitAttributes()
2876 ai->writeCtorParameters(OS); in emitAttributes()
2879 OS << ", "; in emitAttributes()
2880 DelayedArgs->writeCtorParameters(OS); in emitAttributes()
2882 OS << ", SourceRange Range"; in emitAttributes()
2884 OS << " = {}"; in emitAttributes()
2886 OS << ", Spelling S"; in emitAttributes()
2888 OS << " = " << SemanticToSyntacticMap[0]; in emitAttributes()
2890 OS << ")"; in emitAttributes()
2892 OS << ";\n"; in emitAttributes()
2896 OS << " {\n"; in emitAttributes()
2897 OS << " AttributeCommonInfo I(Range, "; in emitAttributes()
2900 OS << "AT_" << ParsedAttrSpellingItr->first; in emitAttributes()
2902 OS << "NoSemaHandlerAttribute"; in emitAttributes()
2905 OS << ", AttributeCommonInfo::Form::Implicit()"; in emitAttributes()
2907 OS << ", "; in emitAttributes()
2908 emitFormInitializer(OS, Spellings[0], "0"); in emitAttributes()
2910 OS << ", [&]() {\n"; in emitAttributes()
2911 OS << " switch (S) {\n"; in emitAttributes()
2919 OS << " case " << Name << ":\n"; in emitAttributes()
2920 OS << " return AttributeCommonInfo::Form"; in emitAttributes()
2921 emitFormInitializer(OS, S, Name); in emitAttributes()
2922 OS << ";\n"; in emitAttributes()
2925 OS << " default:\n"; in emitAttributes()
2926 OS << " llvm_unreachable(\"Unknown attribute spelling!\");\n" in emitAttributes()
2928 emitFormInitializer(OS, Spellings[0], "0"); in emitAttributes()
2929 OS << ";\n" in emitAttributes()
2934 OS << ");\n"; in emitAttributes()
2935 OS << " return Create"; in emitAttributes()
2937 OS << "Implicit"; in emitAttributes()
2939 OS << "WithDelayedArgs"; in emitAttributes()
2940 OS << "(Ctx"; in emitAttributes()
2945 OS << ", "; in emitAttributes()
2946 ai->writeImplicitCtorArgs(OS); in emitAttributes()
2949 OS << ", "; in emitAttributes()
2950 DelayedArgs->writeImplicitCtorArgs(OS); in emitAttributes()
2952 OS << ", I);\n"; in emitAttributes()
2953 OS << "}\n\n"; in emitAttributes()
2964 OS << " // Factory methods\n"; in emitAttributes()
2990 OS << " "; in emitAttributes()
2992 OS << R.getName() << "Attr::"; in emitAttributes()
2993 OS << R.getName() in emitAttributes()
2995 OS << '\n'; in emitAttributes()
2999 OS << " , "; in emitAttributes()
3000 ai->writeCtorParameters(OS); in emitAttributes()
3001 OS << "\n"; in emitAttributes()
3004 OS << " )"; in emitAttributes()
3006 OS << ";\n"; in emitAttributes()
3009 OS << "\n : " << SuperName << "(Ctx, CommonInfo, "; in emitAttributes()
3010 OS << "attr::" << R.getName() << ", "; in emitAttributes()
3013 OS << "/*IsLateParsed=*/"; in emitAttributes()
3016 OS << "false"; in emitAttributes()
3027 OS << "true"; in emitAttributes()
3032 OS << ", " in emitAttributes()
3036 OS << ")\n"; in emitAttributes()
3039 OS << " , "; in emitAttributes()
3041 ai->writeCtorDefaultInitializers(OS); in emitAttributes()
3043 ai->writeCtorInitializers(OS); in emitAttributes()
3045 OS << "\n"; in emitAttributes()
3048 OS << " , "; in emitAttributes()
3049 DelayedArgs->writeCtorDefaultInitializers(OS); in emitAttributes()
3050 OS << "\n"; in emitAttributes()
3053 OS << " {\n"; in emitAttributes()
3058 ai->writeCtorBody(OS); in emitAttributes()
3060 OS << "}\n\n"; in emitAttributes()
3064 OS << "\n // Constructors\n"; in emitAttributes()
3088 OS << '\n'; in emitAttributes()
3089 OS << " " << R.getName() << "Attr *clone(ASTContext &C) const;\n"; in emitAttributes()
3090 OS << " void printPretty(raw_ostream &OS,\n" in emitAttributes()
3092 OS << " const char *getSpelling() const;\n"; in emitAttributes()
3098 OS << " Spelling getSemanticSpelling() const;\n"; in emitAttributes()
3100 OS << R.getName() << "Attr::Spelling " << R.getName() in emitAttributes()
3103 SemanticToSyntacticMap, OS); in emitAttributes()
3104 OS << "}\n"; in emitAttributes()
3109 writeAttrAccessorDefinition(R, OS); in emitAttributes()
3113 ai->writeAccessors(OS); in emitAttributes()
3115 ai->writeAccessorDefinitions(OS); in emitAttributes()
3117 OS << "\n\n"; in emitAttributes()
3123 static_cast<const EnumArgument *>(ai.get())->writeConversion(OS, in emitAttributes()
3127 OS, Header); in emitAttributes()
3132 DelayedArgs->writeAccessors(OS); in emitAttributes()
3133 DelayedArgs->writeSetter(OS); in emitAttributes()
3136 OS << R.getValueAsString("AdditionalMembers"); in emitAttributes()
3137 OS << "\n\n"; in emitAttributes()
3139 OS << " static bool classof(const Attr *A) { return A->getKind() == " in emitAttributes()
3142 OS << "};\n\n"; in emitAttributes()
3145 DelayedArgs->writeAccessorDefinitions(OS); in emitAttributes()
3147 OS << R.getName() << "Attr *" << R.getName() in emitAttributes()
3149 OS << " auto *A = new (C) " << R.getName() << "Attr(C, *this"; in emitAttributes()
3151 OS << ", "; in emitAttributes()
3152 ai->writeCloneArgs(OS); in emitAttributes()
3154 OS << ");\n"; in emitAttributes()
3155 OS << " A->Inherited = Inherited;\n"; in emitAttributes()
3156 OS << " A->IsPackExpansion = IsPackExpansion;\n"; in emitAttributes()
3157 OS << " A->setImplicit(Implicit);\n"; in emitAttributes()
3159 OS << " A->setDelayedArgs(C, "; in emitAttributes()
3160 DelayedArgs->writeCloneArgs(OS); in emitAttributes()
3161 OS << ");\n"; in emitAttributes()
3163 OS << " return A;\n}\n\n"; in emitAttributes()
3165 writePrettyPrintFunction(R, Args, OS); in emitAttributes()
3166 writeGetSpellingFunction(R, OS); in emitAttributes()
3171 void clang::EmitClangAttrClass(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrClass() argument
3172 emitSourceFileHeader("Attribute classes' definitions", OS, Records); in EmitClangAttrClass()
3174 OS << "#ifndef LLVM_CLANG_ATTR_CLASSES_INC\n"; in EmitClangAttrClass()
3175 OS << "#define LLVM_CLANG_ATTR_CLASSES_INC\n\n"; in EmitClangAttrClass()
3177 emitAttributes(Records, OS, true); in EmitClangAttrClass()
3179 OS << "#endif // LLVM_CLANG_ATTR_CLASSES_INC\n"; in EmitClangAttrClass()
3183 void clang::EmitClangAttrImpl(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrImpl() argument
3184 emitSourceFileHeader("Attribute classes' member function definitions", OS, in EmitClangAttrImpl()
3187 emitAttributes(Records, OS, false); in EmitClangAttrImpl()
3194 OS << " switch (getKind()) {\n"; in EmitClangAttrImpl()
3200 OS << " case attr::" << R.getName() << ":\n"; in EmitClangAttrImpl()
3201 OS << " return cast<" << R.getName() << "Attr>(this)->" << Method in EmitClangAttrImpl()
3204 OS << " }\n"; in EmitClangAttrImpl()
3205 OS << " llvm_unreachable(\"Unexpected attribute kind!\");\n"; in EmitClangAttrImpl()
3206 OS << "}\n\n"; in EmitClangAttrImpl()
3209 OS << "const char *Attr::getSpelling() const {\n"; in EmitClangAttrImpl()
3212 OS << "Attr *Attr::clone(ASTContext &C) const {\n"; in EmitClangAttrImpl()
3215 OS << "void Attr::printPretty(raw_ostream &OS, " in EmitClangAttrImpl()
3220 static void emitAttrList(raw_ostream &OS, StringRef Class, in emitAttrList() argument
3223 OS << Class << "(" << Cur->getName() << ")\n"; in emitAttrList()
3256 static void emitDefaultDefine(raw_ostream &OS, StringRef name, in emitDefaultDefine() argument
3258 OS << "#ifndef " << name << "\n"; in emitDefaultDefine()
3259 OS << "#define " << name << "(NAME) "; in emitDefaultDefine()
3260 if (superName) OS << superName << "(NAME)"; in emitDefaultDefine()
3261 OS << "\n#endif\n\n"; in emitDefaultDefine()
3277 void emitDefaultDefines(raw_ostream &OS) const { in emitDefaultDefines()
3280 emitDefaultDefine(OS, Descriptor.MacroName, in emitDefaultDefines()
3285 void emitUndefs(raw_ostream &OS) const { in emitUndefs()
3286 OS << "#undef " << Descriptor.MacroName << "\n"; in emitUndefs()
3289 void emitAttrList(raw_ostream &OS) const { in emitAttrList()
3291 SubClass->emitAttrList(OS); in emitAttrList()
3294 ::emitAttrList(OS, Descriptor.MacroName, Attrs); in emitAttrList()
3302 void emitAttrRange(raw_ostream &OS) const { in emitAttrRange()
3303 OS << "ATTR_RANGE(" << Descriptor.TableGenName in emitAttrRange()
3367 void emitDefaultDefines(raw_ostream &OS) const { in emitDefaultDefines()
3369 Class->emitDefaultDefines(OS); in emitDefaultDefines()
3373 void emitUndefs(raw_ostream &OS) const { in emitUndefs()
3375 Class->emitUndefs(OS); in emitUndefs()
3379 void emitAttrLists(raw_ostream &OS) const { in emitAttrLists()
3381 Classes[0]->emitAttrList(OS); in emitAttrLists()
3384 void emitAttrRanges(raw_ostream &OS) const { in emitAttrRanges()
3386 Class->emitAttrRange(OS); in emitAttrRanges()
3420 void EmitClangAttrList(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrList() argument
3421 emitSourceFileHeader("List of all attributes that Clang recognizes", OS, in EmitClangAttrList()
3427 Hierarchy.emitDefaultDefines(OS); in EmitClangAttrList()
3428 emitDefaultDefine(OS, "PRAGMA_SPELLING_ATTR", nullptr); in EmitClangAttrList()
3445 Hierarchy.emitAttrLists(OS); in EmitClangAttrList()
3448 emitAttrList(OS, "PRAGMA_SPELLING_ATTR", PragmaAttrs); in EmitClangAttrList()
3451 OS << "#ifdef ATTR_RANGE\n"; in EmitClangAttrList()
3452 Hierarchy.emitAttrRanges(OS); in EmitClangAttrList()
3453 OS << "#undef ATTR_RANGE\n"; in EmitClangAttrList()
3454 OS << "#endif\n"; in EmitClangAttrList()
3456 Hierarchy.emitUndefs(OS); in EmitClangAttrList()
3457 OS << "#undef PRAGMA_SPELLING_ATTR\n"; in EmitClangAttrList()
3461 void EmitClangAttrSubjectMatchRuleList(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrSubjectMatchRuleList() argument
3463 "List of all attribute subject matching rules that Clang recognizes", OS, in EmitClangAttrSubjectMatchRuleList()
3467 emitDefaultDefine(OS, "ATTR_MATCH_RULE", nullptr); in EmitClangAttrSubjectMatchRuleList()
3468 PragmaAttributeSupport.emitMatchRuleList(OS); in EmitClangAttrSubjectMatchRuleList()
3469 OS << "#undef ATTR_MATCH_RULE\n"; in EmitClangAttrSubjectMatchRuleList()
3473 void EmitClangAttrPCHRead(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrPCHRead() argument
3474 emitSourceFileHeader("Attribute deserialization code", OS, Records); in EmitClangAttrPCHRead()
3482 OS << " switch (Kind) {\n"; in EmitClangAttrPCHRead()
3488 OS << " case attr::" << R.getName() << ": {\n"; in EmitClangAttrPCHRead()
3490 OS << " bool isInherited = Record.readInt();\n"; in EmitClangAttrPCHRead()
3491 OS << " bool isImplicit = Record.readInt();\n"; in EmitClangAttrPCHRead()
3492 OS << " bool isPackExpansion = Record.readInt();\n"; in EmitClangAttrPCHRead()
3497 DelayedArgs->writePCHReadDecls(OS); in EmitClangAttrPCHRead()
3503 Args.back()->writePCHReadDecls(OS); in EmitClangAttrPCHRead()
3505 OS << " New = new (Context) " << R.getName() << "Attr(Context, Info"; in EmitClangAttrPCHRead()
3507 OS << ", "; in EmitClangAttrPCHRead()
3508 ri->writePCHReadArgs(OS); in EmitClangAttrPCHRead()
3510 OS << ");\n"; in EmitClangAttrPCHRead()
3512 OS << " cast<InheritableAttr>(New)->setInherited(isInherited);\n"; in EmitClangAttrPCHRead()
3513 OS << " New->setImplicit(isImplicit);\n"; in EmitClangAttrPCHRead()
3514 OS << " New->setPackExpansion(isPackExpansion);\n"; in EmitClangAttrPCHRead()
3516 OS << " cast<" << R.getName() in EmitClangAttrPCHRead()
3518 DelayedArgs->writePCHReadArgs(OS); in EmitClangAttrPCHRead()
3519 OS << ");\n"; in EmitClangAttrPCHRead()
3521 OS << " break;\n"; in EmitClangAttrPCHRead()
3522 OS << " }\n"; in EmitClangAttrPCHRead()
3524 OS << " }\n"; in EmitClangAttrPCHRead()
3528 void EmitClangAttrPCHWrite(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrPCHWrite() argument
3529 emitSourceFileHeader("Attribute serialization code", OS, Records); in EmitClangAttrPCHWrite()
3534 OS << " switch (A->getKind()) {\n"; in EmitClangAttrPCHWrite()
3539 OS << " case attr::" << R.getName() << ": {\n"; in EmitClangAttrPCHWrite()
3542 OS << " const auto *SA = cast<" << R.getName() in EmitClangAttrPCHWrite()
3545 OS << " Record.push_back(SA->isInherited());\n"; in EmitClangAttrPCHWrite()
3546 OS << " Record.push_back(A->isImplicit());\n"; in EmitClangAttrPCHWrite()
3547 OS << " Record.push_back(A->isPackExpansion());\n"; in EmitClangAttrPCHWrite()
3549 VariadicExprArgument("DelayedArgs", R.getName()).writePCHWrite(OS); in EmitClangAttrPCHWrite()
3552 createArgument(*Arg, R.getName())->writePCHWrite(OS); in EmitClangAttrPCHWrite()
3553 OS << " break;\n"; in EmitClangAttrPCHWrite()
3554 OS << " }\n"; in EmitClangAttrPCHWrite()
3556 OS << " }\n"; in EmitClangAttrPCHWrite()
3645 raw_ostream &OS, const std::string &Variety, in GenerateHasAttrSpellingStringSwitch() argument
3712 OS << " .Case(\"" << Spelling.name() << "\", " << TestStr << ")\n"; in GenerateHasAttrSpellingStringSwitch()
3714 OS << " .Default(0);\n"; in GenerateHasAttrSpellingStringSwitch()
3721 raw_ostream &OS) { in EmitClangRegularKeywordAttributeInfo() argument
3725 OS); in EmitClangRegularKeywordAttributeInfo()
3736 OS << "KEYWORD_ATTRIBUTE(" in EmitClangRegularKeywordAttributeInfo()
3740 OS << "#undef KEYWORD_ATTRIBUTE\n"; in EmitClangRegularKeywordAttributeInfo()
3744 void EmitClangAttrHasAttrImpl(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrHasAttrImpl() argument
3745 emitSourceFileHeader("Code to implement the __has_attribute logic", OS, in EmitClangAttrHasAttrImpl()
3780 OS << "const llvm::Triple &T = Target.getTriple();\n"; in EmitClangAttrHasAttrImpl()
3781 OS << "switch (Syntax) {\n"; in EmitClangAttrHasAttrImpl()
3782 OS << "case AttributeCommonInfo::Syntax::AS_GNU:\n"; in EmitClangAttrHasAttrImpl()
3783 OS << " return llvm::StringSwitch<int>(Name)\n"; in EmitClangAttrHasAttrImpl()
3784 GenerateHasAttrSpellingStringSwitch(GNU, OS, "GNU"); in EmitClangAttrHasAttrImpl()
3785 OS << "case AttributeCommonInfo::Syntax::AS_Declspec:\n"; in EmitClangAttrHasAttrImpl()
3786 OS << " return llvm::StringSwitch<int>(Name)\n"; in EmitClangAttrHasAttrImpl()
3787 GenerateHasAttrSpellingStringSwitch(Declspec, OS, "Declspec"); in EmitClangAttrHasAttrImpl()
3788 OS << "case AttributeCommonInfo::Syntax::AS_Microsoft:\n"; in EmitClangAttrHasAttrImpl()
3789 OS << " return llvm::StringSwitch<int>(Name)\n"; in EmitClangAttrHasAttrImpl()
3790 GenerateHasAttrSpellingStringSwitch(Microsoft, OS, "Microsoft"); in EmitClangAttrHasAttrImpl()
3791 OS << "case AttributeCommonInfo::Syntax::AS_Pragma:\n"; in EmitClangAttrHasAttrImpl()
3792 OS << " return llvm::StringSwitch<int>(Name)\n"; in EmitClangAttrHasAttrImpl()
3793 GenerateHasAttrSpellingStringSwitch(Pragma, OS, "Pragma"); in EmitClangAttrHasAttrImpl()
3794 OS << "case AttributeCommonInfo::Syntax::AS_HLSLAnnotation:\n"; in EmitClangAttrHasAttrImpl()
3795 OS << " return llvm::StringSwitch<int>(Name)\n"; in EmitClangAttrHasAttrImpl()
3796 GenerateHasAttrSpellingStringSwitch(HLSLAnnotation, OS, "HLSLAnnotation"); in EmitClangAttrHasAttrImpl()
3797 auto fn = [&OS](const char *Spelling, in EmitClangAttrHasAttrImpl()
3802 OS << "case AttributeCommonInfo::Syntax::AS_" << Spelling << ": {\n"; in EmitClangAttrHasAttrImpl()
3806 OS << " else "; in EmitClangAttrHasAttrImpl()
3808 OS << "if (ScopeName == \"\") {\n"; in EmitClangAttrHasAttrImpl()
3810 OS << "if (ScopeName == \"" << I->first << "\") {\n"; in EmitClangAttrHasAttrImpl()
3811 OS << " return llvm::StringSwitch<int>(Name)\n"; in EmitClangAttrHasAttrImpl()
3812 GenerateHasAttrSpellingStringSwitch(I->second, OS, Spelling, I->first); in EmitClangAttrHasAttrImpl()
3813 OS << "}"; in EmitClangAttrHasAttrImpl()
3815 OS << "\n} break;\n"; in EmitClangAttrHasAttrImpl()
3819 OS << "case AttributeCommonInfo::Syntax::AS_Keyword:\n"; in EmitClangAttrHasAttrImpl()
3820 OS << "case AttributeCommonInfo::Syntax::AS_ContextSensitiveKeyword:\n"; in EmitClangAttrHasAttrImpl()
3821 OS << " llvm_unreachable(\"hasAttribute not supported for keyword\");\n"; in EmitClangAttrHasAttrImpl()
3822 OS << " return 0;\n"; in EmitClangAttrHasAttrImpl()
3823 OS << "case AttributeCommonInfo::Syntax::AS_Implicit:\n"; in EmitClangAttrHasAttrImpl()
3824 OS << " llvm_unreachable (\"hasAttribute not supported for " in EmitClangAttrHasAttrImpl()
3826 OS << " return 0;\n"; in EmitClangAttrHasAttrImpl()
3828 OS << "}\n"; in EmitClangAttrHasAttrImpl()
3831 void EmitClangAttrSpellingListIndex(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrSpellingListIndex() argument
3834 OS, Records); in EmitClangAttrSpellingListIndex()
3836 OS << " switch (getParsedKind()) {\n"; in EmitClangAttrSpellingListIndex()
3837 OS << " case IgnoredAttribute:\n"; in EmitClangAttrSpellingListIndex()
3838 OS << " case UnknownAttribute:\n"; in EmitClangAttrSpellingListIndex()
3839 OS << " case NoSemaHandlerAttribute:\n"; in EmitClangAttrSpellingListIndex()
3840 OS << " llvm_unreachable(\"Ignored/unknown shouldn't get here\");\n"; in EmitClangAttrSpellingListIndex()
3846 OS << " case AT_" << I.first << ": {\n"; in EmitClangAttrSpellingListIndex()
3848 OS << " if (Name == \"" << Spellings[I].name() << "\" && " in EmitClangAttrSpellingListIndex()
3854 OS << " break;\n"; in EmitClangAttrSpellingListIndex()
3855 OS << " }\n"; in EmitClangAttrSpellingListIndex()
3858 OS << " }\n"; in EmitClangAttrSpellingListIndex()
3859 OS << " return 0;\n"; in EmitClangAttrSpellingListIndex()
3863 void EmitClangAttrASTVisitor(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrASTVisitor() argument
3864 emitSourceFileHeader("Used by RecursiveASTVisitor to visit attributes.", OS, in EmitClangAttrASTVisitor()
3872 OS << "#ifdef ATTR_VISITOR_DECLS_ONLY\n\n"; in EmitClangAttrASTVisitor()
3877 OS << " bool Traverse" in EmitClangAttrASTVisitor()
3879 OS << " bool Visit" in EmitClangAttrASTVisitor()
3884 OS << "\n#else // ATTR_VISITOR_DECLS_ONLY\n\n"; in EmitClangAttrASTVisitor()
3892 OS << "template <typename Derived>\n" in EmitClangAttrASTVisitor()
3902 createArgument(*Arg, R.getName())->writeASTVisitorTraversal(OS); in EmitClangAttrASTVisitor()
3906 .writeASTVisitorTraversal(OS); in EmitClangAttrASTVisitor()
3908 OS << " return true;\n"; in EmitClangAttrASTVisitor()
3909 OS << "}\n\n"; in EmitClangAttrASTVisitor()
3913 OS << "template <typename Derived>\n" in EmitClangAttrASTVisitor()
3925 OS << " case attr::" << R.getName() << ":\n" in EmitClangAttrASTVisitor()
3929 OS << " }\n"; // end switch in EmitClangAttrASTVisitor()
3930 OS << " llvm_unreachable(\"bad attribute kind\");\n"; in EmitClangAttrASTVisitor()
3931 OS << "}\n"; // end function in EmitClangAttrASTVisitor()
3932 OS << "#endif // ATTR_VISITOR_DECLS_ONLY\n"; in EmitClangAttrASTVisitor()
3936 raw_ostream &OS, in EmitClangAttrTemplateInstantiateHelper() argument
3939 OS << " switch (At->getKind()) {\n"; in EmitClangAttrTemplateInstantiateHelper()
3944 OS << " case attr::" << R.getName() << ": {\n"; in EmitClangAttrTemplateInstantiateHelper()
3950 OS << " return nullptr;\n"; in EmitClangAttrTemplateInstantiateHelper()
3951 OS << " }\n"; in EmitClangAttrTemplateInstantiateHelper()
3955 OS << " const auto *A = cast<" in EmitClangAttrTemplateInstantiateHelper()
3960 OS << " return A->clone(C);\n"; in EmitClangAttrTemplateInstantiateHelper()
3961 OS << " }\n"; in EmitClangAttrTemplateInstantiateHelper()
3973 ai->writeTemplateInstantiation(OS); in EmitClangAttrTemplateInstantiateHelper()
3975 OS << " return new (C) " << R.getName() << "Attr(C, *A"; in EmitClangAttrTemplateInstantiateHelper()
3977 OS << ", "; in EmitClangAttrTemplateInstantiateHelper()
3978 ai->writeTemplateInstantiationArgs(OS); in EmitClangAttrTemplateInstantiateHelper()
3980 OS << ");\n" in EmitClangAttrTemplateInstantiateHelper()
3983 OS << " } // end switch\n" in EmitClangAttrTemplateInstantiateHelper()
3989 void EmitClangAttrTemplateInstantiate(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrTemplateInstantiate() argument
3990 emitSourceFileHeader("Template instantiation code for attributes", OS, in EmitClangAttrTemplateInstantiate()
3995 OS << "namespace clang {\n" in EmitClangAttrTemplateInstantiate()
4000 EmitClangAttrTemplateInstantiateHelper(Attrs, OS, /*AppliesToDecl*/false); in EmitClangAttrTemplateInstantiate()
4001 OS << "}\n\n" in EmitClangAttrTemplateInstantiate()
4005 EmitClangAttrTemplateInstantiateHelper(Attrs, OS, /*AppliesToDecl*/true); in EmitClangAttrTemplateInstantiate()
4006 OS << "}\n\n" in EmitClangAttrTemplateInstantiate()
4012 void EmitClangAttrParsedAttrList(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrParsedAttrList() argument
4013 emitSourceFileHeader("List of all attributes that Clang recognizes", OS, in EmitClangAttrParsedAttrList()
4016 OS << "#ifndef PARSED_ATTR\n"; in EmitClangAttrParsedAttrList()
4017 OS << "#define PARSED_ATTR(NAME) NAME\n"; in EmitClangAttrParsedAttrList()
4018 OS << "#endif\n\n"; in EmitClangAttrParsedAttrList()
4022 OS << "PARSED_ATTR(" << I.first << ")\n"; in EmitClangAttrParsedAttrList()
4030 static void emitArgInfo(const Record &R, raw_ostream &OS) { in emitArgInfo() argument
4050 OS << " /*NumArgs=*/" << ArgCount << ",\n"; in emitArgInfo()
4051 OS << " /*OptArgs=*/" << (HasVariadic ? 15 : OptCount) << ",\n"; in emitArgInfo()
4052 OS << " /*NumArgMembers=*/" << ArgMemberCount << ",\n"; in emitArgInfo()
4133 static void GenerateCustomAppertainsTo(const Record &Subject, raw_ostream &OS) { in GenerateCustomAppertainsTo() argument
4152 OS << "static bool " << FnName << "(const Decl *D) {\n"; in GenerateCustomAppertainsTo()
4153 OS << " if (const auto *S = dyn_cast<"; in GenerateCustomAppertainsTo()
4154 OS << GetSubjectWithSuffix(Base); in GenerateCustomAppertainsTo()
4155 OS << ">(D))\n"; in GenerateCustomAppertainsTo()
4156 OS << " return " << Subject.getValueAsString("CheckCode") << ";\n"; in GenerateCustomAppertainsTo()
4157 OS << " return false;\n"; in GenerateCustomAppertainsTo()
4158 OS << "}\n\n"; in GenerateCustomAppertainsTo()
4163 static void GenerateAppertainsTo(const Record &Attr, raw_ostream &OS) { in GenerateAppertainsTo() argument
4199 OS << "bool diagAppertainsToDecl(Sema &S, const ParsedAttr &AL, "; in GenerateAppertainsTo()
4200 OS << "const Decl *D) const override {\n"; in GenerateAppertainsTo()
4201 OS << " S.Diag(AL.getLoc(), diag::err_attribute_invalid_on_decl)\n"; in GenerateAppertainsTo()
4202 OS << " << AL << AL.isRegularKeywordAttribute() << " in GenerateAppertainsTo()
4204 OS << " return false;\n"; in GenerateAppertainsTo()
4205 OS << "}\n\n"; in GenerateAppertainsTo()
4210 OS << "bool diagAppertainsToDecl(Sema &S, "; in GenerateAppertainsTo()
4211 OS << "const ParsedAttr &Attr, const Decl *D) const override {\n"; in GenerateAppertainsTo()
4212 OS << " if ("; in GenerateAppertainsTo()
4220 OS << "!" << functionNameForCustomAppertainsTo(**I) << "(D)"; in GenerateAppertainsTo()
4222 OS << "!isa<" << GetSubjectWithSuffix(*I) << ">(D)"; in GenerateAppertainsTo()
4225 OS << " && "; in GenerateAppertainsTo()
4227 OS << ") {\n"; in GenerateAppertainsTo()
4228 OS << " S.Diag(Attr.getLoc(), diag::"; in GenerateAppertainsTo()
4229 OS << (Warn ? "warn_attribute_wrong_decl_type_str" in GenerateAppertainsTo()
4231 OS << ")\n"; in GenerateAppertainsTo()
4232 OS << " << Attr << Attr.isRegularKeywordAttribute() << "; in GenerateAppertainsTo()
4233 OS << CalculateDiagnostic(*SubjectObj) << ";\n"; in GenerateAppertainsTo()
4234 OS << " return false;\n"; in GenerateAppertainsTo()
4235 OS << " }\n"; in GenerateAppertainsTo()
4236 OS << " return true;\n"; in GenerateAppertainsTo()
4237 OS << "}\n\n"; in GenerateAppertainsTo()
4244 OS << "bool diagAppertainsToStmt(Sema &S, const ParsedAttr &AL, "; in GenerateAppertainsTo()
4245 OS << "const Stmt *St) const override {\n"; in GenerateAppertainsTo()
4246 OS << " S.Diag(AL.getLoc(), diag::err_decl_attribute_invalid_on_stmt)\n"; in GenerateAppertainsTo()
4247 OS << " << AL << AL.isRegularKeywordAttribute() << " in GenerateAppertainsTo()
4249 OS << " return false;\n"; in GenerateAppertainsTo()
4250 OS << "}\n\n"; in GenerateAppertainsTo()
4254 OS << "bool diagAppertainsToStmt(Sema &S, "; in GenerateAppertainsTo()
4255 OS << "const ParsedAttr &Attr, const Stmt *St) const override {\n"; in GenerateAppertainsTo()
4256 OS << " if ("; in GenerateAppertainsTo()
4258 OS << "!isa<" << (*I)->getName() << ">(St)"; in GenerateAppertainsTo()
4260 OS << " && "; in GenerateAppertainsTo()
4262 OS << ") {\n"; in GenerateAppertainsTo()
4263 OS << " S.Diag(Attr.getLoc(), diag::"; in GenerateAppertainsTo()
4264 OS << (Warn ? "warn_attribute_wrong_decl_type_str" in GenerateAppertainsTo()
4266 OS << ")\n"; in GenerateAppertainsTo()
4267 OS << " << Attr << Attr.isRegularKeywordAttribute() << "; in GenerateAppertainsTo()
4268 OS << CalculateDiagnostic(*SubjectObj) << ";\n"; in GenerateAppertainsTo()
4269 OS << " return false;\n"; in GenerateAppertainsTo()
4270 OS << " }\n"; in GenerateAppertainsTo()
4271 OS << " return true;\n"; in GenerateAppertainsTo()
4272 OS << "}\n\n"; in GenerateAppertainsTo()
4281 raw_ostream &OS, in GenerateMutualExclusionsChecks() argument
4327 OS << " using ParsedAttrInfo::diagMutualExclusion;\n\n"; in GenerateMutualExclusionsChecks()
4333 OS << " bool diagMutualExclusion(Sema &S, const ParsedAttr &AL, " in GenerateMutualExclusionsChecks()
4336 OS << " if (const auto *A = D->getAttr<" << A << ">()) {\n"; in GenerateMutualExclusionsChecks()
4337 OS << " S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible)" in GenerateMutualExclusionsChecks()
4340 OS << " S.Diag(A->getLocation(), diag::note_conflicting_attribute);"; in GenerateMutualExclusionsChecks()
4341 OS << " \nreturn false;\n"; in GenerateMutualExclusionsChecks()
4342 OS << " }\n"; in GenerateMutualExclusionsChecks()
4344 OS << " return true;\n"; in GenerateMutualExclusionsChecks()
4345 OS << " }\n\n"; in GenerateMutualExclusionsChecks()
4413 raw_ostream &OS) { in emitAttributeMatchRules() argument
4414 OS << "static bool checkAttributeMatchRuleAppliesTo(const Decl *D, " in emitAttributeMatchRules()
4416 OS << " switch (rule) {\n"; in emitAttributeMatchRules()
4419 OS << " case " << Rule.getEnumValue() << ":\n"; in emitAttributeMatchRules()
4420 OS << " assert(false && \"Abstract matcher rule isn't allowed\");\n"; in emitAttributeMatchRules()
4421 OS << " return false;\n"; in emitAttributeMatchRules()
4426 OS << " case " << Rule.getEnumValue() << ":\n"; in emitAttributeMatchRules()
4427 OS << " return "; in emitAttributeMatchRules()
4433 OS << functionNameForCustomAppertainsTo(**I) << "(D)"; in emitAttributeMatchRules()
4435 OS << "isa<" << GetSubjectWithSuffix(*I) << ">(D)"; in emitAttributeMatchRules()
4438 OS << " || "; in emitAttributeMatchRules()
4440 OS << ";\n"; in emitAttributeMatchRules()
4442 OS << " }\n"; in emitAttributeMatchRules()
4443 OS << " llvm_unreachable(\"Invalid match rule\");\nreturn false;\n"; in emitAttributeMatchRules()
4444 OS << "}\n\n"; in emitAttributeMatchRules()
4448 raw_ostream &OS) { in GenerateLangOptRequirements() argument
4455 OS << "bool acceptsLangOpts(const LangOptions &LangOpts) const override {\n"; in GenerateLangOptRequirements()
4456 OS << " return " << GenerateTestExpression(LangOpts) << ";\n"; in GenerateLangOptRequirements()
4457 OS << "}\n\n"; in GenerateLangOptRequirements()
4462 raw_ostream &OS) { in GenerateTargetRequirements() argument
4494 OS << "bool existsInTarget(const TargetInfo &Target) const override {\n"; in GenerateTargetRequirements()
4496 OS << " const llvm::Triple &T = Target.getTriple(); (void)T;\n"; in GenerateTargetRequirements()
4497 OS << " return " << Test << ";\n"; in GenerateTargetRequirements()
4498 OS << "}\n\n"; in GenerateTargetRequirements()
4504 raw_ostream &OS) { in GenerateSpellingTargetRequirements() argument
4538 OS << "bool spellingExistsInTarget(const TargetInfo &Target,\n"; in GenerateSpellingTargetRequirements()
4539 OS << " const unsigned SpellingListIndex) const " in GenerateSpellingTargetRequirements()
4542 OS << " const llvm::Triple &T = Target.getTriple(); (void)T;\n"; in GenerateSpellingTargetRequirements()
4543 OS << " return " << Test << ";\n", OS << "}\n\n"; in GenerateSpellingTargetRequirements()
4547 raw_ostream &OS) { in GenerateSpellingIndexToSemanticSpelling() argument
4564 OS << "unsigned spellingIndexToSemanticSpelling("; in GenerateSpellingIndexToSemanticSpelling()
4565 OS << "const ParsedAttr &Attr) const override {\n"; in GenerateSpellingIndexToSemanticSpelling()
4566 OS << Enum; in GenerateSpellingIndexToSemanticSpelling()
4567 OS << " unsigned Idx = Attr.getAttributeSpellingListIndex();\n"; in GenerateSpellingIndexToSemanticSpelling()
4568 WriteSemanticSpellingSwitch("Idx", SemanticToSyntacticMap, OS); in GenerateSpellingIndexToSemanticSpelling()
4569 OS << "}\n\n"; in GenerateSpellingIndexToSemanticSpelling()
4572 static void GenerateHandleDeclAttribute(const Record &Attr, raw_ostream &OS) { in GenerateHandleDeclAttribute() argument
4578 OS << "AttrHandling handleDeclAttribute(Sema &S, Decl *D,"; in GenerateHandleDeclAttribute()
4579 OS << "const ParsedAttr &Attr) const override {\n"; in GenerateHandleDeclAttribute()
4580 OS << " D->addAttr(::new (S.Context) " << Attr.getName(); in GenerateHandleDeclAttribute()
4581 OS << "Attr(S.Context, Attr));\n"; in GenerateHandleDeclAttribute()
4582 OS << " return AttributeApplied;\n"; in GenerateHandleDeclAttribute()
4583 OS << "}\n\n"; in GenerateHandleDeclAttribute()
4595 void GenerateIsParamExpr(const Record &Attr, raw_ostream &OS) { in GenerateIsParamExpr() argument
4596 OS << "bool isParamExpr(size_t N) const override {\n"; in GenerateIsParamExpr()
4597 OS << " return "; in GenerateIsParamExpr()
4601 OS << "(N == " << I << ") || "; in GenerateIsParamExpr()
4602 OS << "false;\n"; in GenerateIsParamExpr()
4603 OS << "}\n\n"; in GenerateIsParamExpr()
4606 void GenerateHandleAttrWithDelayedArgs(RecordKeeper &Records, raw_ostream &OS) { in GenerateHandleAttrWithDelayedArgs() argument
4607 OS << "static void handleAttrWithDelayedArgs(Sema &S, Decl *D, "; in GenerateHandleAttrWithDelayedArgs()
4608 OS << "const ParsedAttr &Attr) {\n"; in GenerateHandleAttrWithDelayedArgs()
4609 OS << " SmallVector<Expr *, 4> ArgExprs;\n"; in GenerateHandleAttrWithDelayedArgs()
4610 OS << " ArgExprs.reserve(Attr.getNumArgs());\n"; in GenerateHandleAttrWithDelayedArgs()
4611 OS << " for (unsigned I = 0; I < Attr.getNumArgs(); ++I) {\n"; in GenerateHandleAttrWithDelayedArgs()
4612 OS << " assert(!Attr.isArgIdent(I));\n"; in GenerateHandleAttrWithDelayedArgs()
4613 OS << " ArgExprs.push_back(Attr.getArgAsExpr(I));\n"; in GenerateHandleAttrWithDelayedArgs()
4614 OS << " }\n"; in GenerateHandleAttrWithDelayedArgs()
4615 OS << " clang::Attr *CreatedAttr = nullptr;\n"; in GenerateHandleAttrWithDelayedArgs()
4616 OS << " switch (Attr.getKind()) {\n"; in GenerateHandleAttrWithDelayedArgs()
4617 OS << " default:\n"; in GenerateHandleAttrWithDelayedArgs()
4618 OS << " llvm_unreachable(\"Attribute cannot hold delayed arguments.\");\n"; in GenerateHandleAttrWithDelayedArgs()
4624 OS << " case ParsedAttr::AT_" << I.first << ": {\n"; in GenerateHandleAttrWithDelayedArgs()
4625 OS << " CreatedAttr = " << R.getName() << "Attr::CreateWithDelayedArgs"; in GenerateHandleAttrWithDelayedArgs()
4626 OS << "(S.Context, ArgExprs.data(), ArgExprs.size(), Attr);\n"; in GenerateHandleAttrWithDelayedArgs()
4627 OS << " break;\n"; in GenerateHandleAttrWithDelayedArgs()
4628 OS << " }\n"; in GenerateHandleAttrWithDelayedArgs()
4630 OS << " }\n"; in GenerateHandleAttrWithDelayedArgs()
4631 OS << " D->addAttr(CreatedAttr);\n"; in GenerateHandleAttrWithDelayedArgs()
4632 OS << "}\n\n"; in GenerateHandleAttrWithDelayedArgs()
4644 void EmitClangAttrParsedAttrImpl(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrParsedAttrImpl() argument
4645 emitSourceFileHeader("Parsed attribute helpers", OS, Records); in EmitClangAttrParsedAttrImpl()
4647 OS << "#if !defined(WANT_DECL_MERGE_LOGIC) && " in EmitClangAttrParsedAttrImpl()
4666 GenerateCustomAppertainsTo(*Subject, OS); in EmitClangAttrParsedAttrImpl()
4689 OS << "static constexpr ParsedAttrInfo::Spelling " << I->first in EmitClangAttrParsedAttrImpl()
4700 OS << " {AttributeCommonInfo::AS_" << S.variety(); in EmitClangAttrParsedAttrImpl()
4701 OS << ", \"" << Spelling << "\"},\n"; in EmitClangAttrParsedAttrImpl()
4703 OS << "};\n"; in EmitClangAttrParsedAttrImpl()
4720 OS << "static constexpr const char *" << I->first << "ArgNames[] = {\n"; in EmitClangAttrParsedAttrImpl()
4722 OS << '"' << N << "\","; in EmitClangAttrParsedAttrImpl()
4723 OS << "};\n"; in EmitClangAttrParsedAttrImpl()
4726 OS << "struct ParsedAttrInfo" << I->first in EmitClangAttrParsedAttrImpl()
4728 OS << " constexpr ParsedAttrInfo" << I->first << "() : ParsedAttrInfo(\n"; in EmitClangAttrParsedAttrImpl()
4729 OS << " /*AttrKind=*/ParsedAttr::AT_" << AttrName << ",\n"; in EmitClangAttrParsedAttrImpl()
4730 emitArgInfo(Attr, OS); in EmitClangAttrParsedAttrImpl()
4731 OS << " /*HasCustomParsing=*/"; in EmitClangAttrParsedAttrImpl()
4732 OS << Attr.getValueAsBit("HasCustomParsing") << ",\n"; in EmitClangAttrParsedAttrImpl()
4733 OS << " /*AcceptsExprPack=*/"; in EmitClangAttrParsedAttrImpl()
4734 OS << Attr.getValueAsBit("AcceptsExprPack") << ",\n"; in EmitClangAttrParsedAttrImpl()
4735 OS << " /*IsTargetSpecific=*/"; in EmitClangAttrParsedAttrImpl()
4736 OS << Attr.isSubClassOf("TargetSpecificAttr") << ",\n"; in EmitClangAttrParsedAttrImpl()
4737 OS << " /*IsType=*/"; in EmitClangAttrParsedAttrImpl()
4738 OS << (Attr.isSubClassOf("TypeAttr") || Attr.isSubClassOf("DeclOrTypeAttr")) in EmitClangAttrParsedAttrImpl()
4740 OS << " /*IsStmt=*/"; in EmitClangAttrParsedAttrImpl()
4741 OS << (Attr.isSubClassOf("StmtAttr") || Attr.isSubClassOf("DeclOrStmtAttr")) in EmitClangAttrParsedAttrImpl()
4743 OS << " /*IsKnownToGCC=*/"; in EmitClangAttrParsedAttrImpl()
4744 OS << IsKnownToGCC(Attr) << ",\n"; in EmitClangAttrParsedAttrImpl()
4745 OS << " /*IsSupportedByPragmaAttribute=*/"; in EmitClangAttrParsedAttrImpl()
4746 OS << PragmaAttributeSupport.isAttributedSupported(*I->second) << ",\n"; in EmitClangAttrParsedAttrImpl()
4748 OS << " /*Spellings=*/" << I->first << "Spellings,\n"; in EmitClangAttrParsedAttrImpl()
4750 OS << " /*Spellings=*/{},\n"; in EmitClangAttrParsedAttrImpl()
4752 OS << " /*ArgNames=*/" << I->first << "ArgNames"; in EmitClangAttrParsedAttrImpl()
4754 OS << " /*ArgNames=*/{}"; in EmitClangAttrParsedAttrImpl()
4755 OS << ") {}\n"; in EmitClangAttrParsedAttrImpl()
4756 GenerateAppertainsTo(Attr, OS); in EmitClangAttrParsedAttrImpl()
4757 GenerateMutualExclusionsChecks(Attr, Records, OS, MergeDeclOS, MergeStmtOS); in EmitClangAttrParsedAttrImpl()
4758 GenerateLangOptRequirements(Attr, OS); in EmitClangAttrParsedAttrImpl()
4759 GenerateTargetRequirements(Attr, Dupes, OS); in EmitClangAttrParsedAttrImpl()
4761 Attr, Attr.getValueAsListOfDefs("TargetSpecificSpellings"), OS); in EmitClangAttrParsedAttrImpl()
4762 GenerateSpellingIndexToSemanticSpelling(Attr, OS); in EmitClangAttrParsedAttrImpl()
4763 PragmaAttributeSupport.generateStrictConformsTo(*I->second, OS); in EmitClangAttrParsedAttrImpl()
4764 GenerateHandleDeclAttribute(Attr, OS); in EmitClangAttrParsedAttrImpl()
4765 GenerateIsParamExpr(Attr, OS); in EmitClangAttrParsedAttrImpl()
4766 OS << "static const ParsedAttrInfo" << I->first << " Instance;\n"; in EmitClangAttrParsedAttrImpl()
4767 OS << "};\n"; in EmitClangAttrParsedAttrImpl()
4768 OS << "const ParsedAttrInfo" << I->first << " ParsedAttrInfo" << I->first in EmitClangAttrParsedAttrImpl()
4772 OS << "static const ParsedAttrInfo *AttrInfoMap[] = {\n"; in EmitClangAttrParsedAttrImpl()
4774 OS << "&ParsedAttrInfo" << I->first << "::Instance,\n"; in EmitClangAttrParsedAttrImpl()
4776 OS << "};\n\n"; in EmitClangAttrParsedAttrImpl()
4779 GenerateHandleAttrWithDelayedArgs(Records, OS); in EmitClangAttrParsedAttrImpl()
4782 emitAttributeMatchRules(PragmaAttributeSupport, OS); in EmitClangAttrParsedAttrImpl()
4784 OS << "#elif defined(WANT_DECL_MERGE_LOGIC)\n\n"; in EmitClangAttrParsedAttrImpl()
4787 OS << "static bool DiagnoseMutualExclusions(Sema &S, const NamedDecl *D, " in EmitClangAttrParsedAttrImpl()
4789 OS << DeclMergeChecks; in EmitClangAttrParsedAttrImpl()
4790 OS << " return true;\n"; in EmitClangAttrParsedAttrImpl()
4791 OS << "}\n\n"; in EmitClangAttrParsedAttrImpl()
4793 OS << "#elif defined(WANT_STMT_MERGE_LOGIC)\n\n"; in EmitClangAttrParsedAttrImpl()
4796 OS << "static bool DiagnoseMutualExclusions(Sema &S, " in EmitClangAttrParsedAttrImpl()
4798 OS << " for (const Attr *A : C) {\n"; in EmitClangAttrParsedAttrImpl()
4799 OS << StmtMergeChecks; in EmitClangAttrParsedAttrImpl()
4800 OS << " }\n"; in EmitClangAttrParsedAttrImpl()
4801 OS << " return true;\n"; in EmitClangAttrParsedAttrImpl()
4802 OS << "}\n\n"; in EmitClangAttrParsedAttrImpl()
4804 OS << "#endif\n"; in EmitClangAttrParsedAttrImpl()
4808 void EmitClangAttrParsedAttrKinds(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrParsedAttrKinds() argument
4809 emitSourceFileHeader("Attribute name matcher", OS, Records); in EmitClangAttrParsedAttrKinds()
4884 OS << "static AttributeCommonInfo::Kind getAttrKind(StringRef Name, "; in EmitClangAttrParsedAttrKinds()
4885 OS << "AttributeCommonInfo::Syntax Syntax) {\n"; in EmitClangAttrParsedAttrKinds()
4886 OS << " if (AttributeCommonInfo::AS_GNU == Syntax) {\n"; in EmitClangAttrParsedAttrKinds()
4887 StringMatcher("Name", GNU, OS).Emit(); in EmitClangAttrParsedAttrKinds()
4888 OS << " } else if (AttributeCommonInfo::AS_Declspec == Syntax) {\n"; in EmitClangAttrParsedAttrKinds()
4889 StringMatcher("Name", Declspec, OS).Emit(); in EmitClangAttrParsedAttrKinds()
4890 OS << " } else if (AttributeCommonInfo::AS_Microsoft == Syntax) {\n"; in EmitClangAttrParsedAttrKinds()
4891 StringMatcher("Name", Microsoft, OS).Emit(); in EmitClangAttrParsedAttrKinds()
4892 OS << " } else if (AttributeCommonInfo::AS_CXX11 == Syntax) {\n"; in EmitClangAttrParsedAttrKinds()
4893 StringMatcher("Name", CXX11, OS).Emit(); in EmitClangAttrParsedAttrKinds()
4894 OS << " } else if (AttributeCommonInfo::AS_C23 == Syntax) {\n"; in EmitClangAttrParsedAttrKinds()
4895 StringMatcher("Name", C23, OS).Emit(); in EmitClangAttrParsedAttrKinds()
4896 OS << " } else if (AttributeCommonInfo::AS_Keyword == Syntax || "; in EmitClangAttrParsedAttrKinds()
4897 OS << "AttributeCommonInfo::AS_ContextSensitiveKeyword == Syntax) {\n"; in EmitClangAttrParsedAttrKinds()
4898 StringMatcher("Name", Keywords, OS).Emit(); in EmitClangAttrParsedAttrKinds()
4899 OS << " } else if (AttributeCommonInfo::AS_Pragma == Syntax) {\n"; in EmitClangAttrParsedAttrKinds()
4900 StringMatcher("Name", Pragma, OS).Emit(); in EmitClangAttrParsedAttrKinds()
4901 OS << " } else if (AttributeCommonInfo::AS_HLSLAnnotation == Syntax) {\n"; in EmitClangAttrParsedAttrKinds()
4902 StringMatcher("Name", HLSLAnnotation, OS).Emit(); in EmitClangAttrParsedAttrKinds()
4903 OS << " }\n"; in EmitClangAttrParsedAttrKinds()
4904 OS << " return AttributeCommonInfo::UnknownAttribute;\n" in EmitClangAttrParsedAttrKinds()
4909 void EmitClangAttrTextNodeDump(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrTextNodeDump() argument
4910 emitSourceFileHeader("Attribute text node dumper", OS, Records); in EmitClangAttrTextNodeDump()
4934 VariadicExprArgument("DelayedArgs", R.getName()).writeDump(OS); in EmitClangAttrTextNodeDump()
4937 OS << " void Visit" << R.getName() << "Attr(const " << R.getName() in EmitClangAttrTextNodeDump()
4940 OS << " const auto *SA = cast<" << R.getName() in EmitClangAttrTextNodeDump()
4942 OS << FunctionContent; in EmitClangAttrTextNodeDump()
4943 OS << " }\n"; in EmitClangAttrTextNodeDump()
4948 void EmitClangAttrNodeTraverse(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrNodeTraverse() argument
4949 emitSourceFileHeader("Attribute text node traverser", OS, Records); in EmitClangAttrNodeTraverse()
4966 OS << " void Visit" << R.getName() << "Attr(const " << R.getName() in EmitClangAttrNodeTraverse()
4969 OS << " const auto *SA = cast<" << R.getName() in EmitClangAttrNodeTraverse()
4971 OS << FunctionContent; in EmitClangAttrNodeTraverse()
4972 OS << " }\n"; in EmitClangAttrNodeTraverse()
4977 void EmitClangAttrParserStringSwitches(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrParserStringSwitches() argument
4978 emitSourceFileHeader("Parser-related llvm::StringSwitch cases", OS, Records); in EmitClangAttrParserStringSwitches()
4979 emitClangAttrArgContextList(Records, OS); in EmitClangAttrParserStringSwitches()
4980 emitClangAttrIdentifierArgList(Records, OS); in EmitClangAttrParserStringSwitches()
4981 emitClangAttrUnevaluatedStringLiteralList(Records, OS); in EmitClangAttrParserStringSwitches()
4982 emitClangAttrVariadicIdentifierArgList(Records, OS); in EmitClangAttrParserStringSwitches()
4983 emitClangAttrThisIsaIdentifierArgList(Records, OS); in EmitClangAttrParserStringSwitches()
4984 emitClangAttrAcceptsExprPack(Records, OS); in EmitClangAttrParserStringSwitches()
4985 emitClangAttrTypeArgList(Records, OS); in EmitClangAttrParserStringSwitches()
4986 emitClangAttrLateParsedList(Records, OS); in EmitClangAttrParserStringSwitches()
4987 emitClangAttrLateParsedExperimentalList(Records, OS); in EmitClangAttrParserStringSwitches()
4988 emitClangAttrStrictIdentifierArgAtIndexList(Records, OS); in EmitClangAttrParserStringSwitches()
4992 raw_ostream &OS) { in EmitClangAttrSubjectMatchRulesParserStringSwitches() argument
4993 getPragmaAttributeSupport(Records).generateParsingHelpers(OS); in EmitClangAttrSubjectMatchRulesParserStringSwitches()
4996 void EmitClangAttrDocTable(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrDocTable() argument
4997 emitSourceFileHeader("Clang attribute documentation", OS, Records); in EmitClangAttrDocTable()
5009 OS << "\nstatic const char AttrDoc_" << A->getName() << "[] = " in EmitClangAttrDocTable()
5081 raw_ostream &OS) { in WriteCategoryHeader() argument
5083 OS << Name << "\n" << std::string(Name.size(), '=') << "\n"; in WriteCategoryHeader()
5088 OS << ContentStr.trim(); in WriteCategoryHeader()
5090 OS << "\n\n"; in WriteCategoryHeader()
5146 const DocumentationData &Doc, raw_ostream &OS) { in WriteDocumentation() argument
5147 OS << Doc.Heading << "\n" << std::string(Doc.Heading.length(), '-') << "\n"; in WriteDocumentation()
5152 OS << ".. csv-table:: Supported Syntaxes\n"; in WriteDocumentation()
5153 OS << " :header: \"GNU\", \"C++11\", \"C23\", \"``__declspec``\","; in WriteDocumentation()
5154 OS << " \"Keyword\", \"``#pragma``\", \"HLSL Annotation\", \"``#pragma " in WriteDocumentation()
5156 OS << "attribute``\"\n\n \""; in WriteDocumentation()
5167 OS << " |br| "; in WriteDocumentation()
5168 OS << "``" << Spelling << "``"; in WriteDocumentation()
5172 OS << "\",\""; in WriteDocumentation()
5177 OS << "Yes"; in WriteDocumentation()
5178 OS << "\"\n\n"; in WriteDocumentation()
5183 OS << "This attribute has been deprecated, and may be removed in a future " in WriteDocumentation()
5188 OS << " This attribute has been superseded by ``" << Replacement in WriteDocumentation()
5190 OS << "\n\n"; in WriteDocumentation()
5195 OS << ContentStr.trim(); in WriteDocumentation()
5197 OS << "\n\n\n"; in WriteDocumentation()
5200 void EmitClangAttrDocs(RecordKeeper &Records, raw_ostream &OS) { in EmitClangAttrDocs() argument
5209 OS << Documentation->getValueAsString("Intro") << "\n"; in EmitClangAttrDocs()
5246 WriteCategoryHeader(I.first, OS); in EmitClangAttrDocs()
5256 WriteDocumentation(Records, Doc, OS); in EmitClangAttrDocs()
5261 raw_ostream &OS) { in EmitTestPragmaAttributeSupportedAttributes() argument
5264 OS << "#pragma clang attribute supports the following attributes:\n"; in EmitTestPragmaAttributeSupportedAttributes()
5268 OS << I.first; in EmitTestPragmaAttributeSupportedAttributes()
5270 OS << " ()\n"; in EmitTestPragmaAttributeSupportedAttributes()
5276 OS << " ("; in EmitTestPragmaAttributeSupportedAttributes()
5282 OS << ", "; in EmitTestPragmaAttributeSupportedAttributes()
5287 OS << RuleSet.getRule().getEnumValueName(); in EmitTestPragmaAttributeSupportedAttributes()
5290 OS << "("; in EmitTestPragmaAttributeSupportedAttributes()
5293 OS << ", "; in EmitTestPragmaAttributeSupportedAttributes()
5294 OS << Rule.value().getEnumValueName(); in EmitTestPragmaAttributeSupportedAttributes()
5296 OS << ")"; in EmitTestPragmaAttributeSupportedAttributes()
5298 OS << ")\n"; in EmitTestPragmaAttributeSupportedAttributes()
5300 OS << "End of supported attributes.\n"; in EmitTestPragmaAttributeSupportedAttributes()