这篇教程C++ ASTPrinter类代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中ASTPrinter类的典型用法代码示例。如果您正苦于以下问题:C++ ASTPrinter类的具体用法?C++ ASTPrinter怎么用?C++ ASTPrinter使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。 在下文中一共展示了ASTPrinter类的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: printImplvoid SpecifierTypeRepr::printImpl(ASTPrinter &Printer, const PrintOptions &Opts) const { if (getKind() == TypeReprKind::InOut) { Printer.printKeyword("inout"); } else { assert((getKind() == TypeReprKind::Shared) && "Unknown kind"); Printer.printKeyword("shared"); } Printer << " "; printTypeRepr(Base, Printer, Opts);}
开发者ID:randomstep,项目名称:swift,代码行数:11,
示例2: printImplvoid FunctionTypeRepr::printImpl(ASTPrinter &Printer, const PrintOptions &Opts) const { Printer.callPrintStructurePre(PrintStructureKind::FunctionType); printTypeRepr(ArgsTy, Printer, Opts); if (throws()) { Printer << " "; Printer.printKeyword("throws"); } Printer << " -> "; Printer.callPrintStructurePre(PrintStructureKind::FunctionReturnType); printTypeRepr(RetTy, Printer, Opts); Printer.printStructurePost(PrintStructureKind::FunctionReturnType); Printer.printStructurePost(PrintStructureKind::FunctionType);}
开发者ID:0x4d4746h,项目名称:swift,代码行数:14,
示例3: printvoid TypeRepr::print(ASTPrinter &Printer, const PrintOptions &Opts) const { Printer.printTypePre(TypeLoc(const_cast<TypeRepr *>(this))); SWIFT_DEFER { Printer.printTypePost(TypeLoc(const_cast<TypeRepr *>(this))); }; switch (getKind()) {#define TYPEREPR(CLASS, PARENT) / case TypeReprKind::CLASS: { / auto Ty = static_cast<const CLASS##TypeRepr*>(this); / return Ty->printImpl(Printer, Opts); / }#include "swift/AST/TypeReprNodes.def" } llvm_unreachable("unknown kind!");}
开发者ID:randomstep,项目名称:swift,代码行数:16,
示例4: printAttrsvoid AttributedTypeRepr::printAttrs(ASTPrinter &Printer, const PrintOptions &Options) const { const TypeAttributes &Attrs = getAttrs(); auto hasAttr = [&](TypeAttrKind K) -> bool { if (Options.excludeAttrKind(K)) return false; return Attrs.has(K); }; if (hasAttr(TAK_autoclosure)) Printer.printSimpleAttr("@autoclosure") << " "; if (hasAttr(TAK_escaping)) Printer.printSimpleAttr("@escaping") << " "; if (hasAttr(TAK_thin)) Printer.printSimpleAttr("@thin") << " "; if (hasAttr(TAK_thick)) Printer.printSimpleAttr("@thick") << " "; if (hasAttr(TAK_convention) && Attrs.convention.hasValue()) { Printer.callPrintStructurePre(PrintStructureKind::BuiltinAttribute); Printer.printAttrName("@convention"); Printer << "(" << Attrs.convention.getValue() << ")"; Printer.printStructurePost(PrintStructureKind::BuiltinAttribute); Printer << " "; }}
开发者ID:randomstep,项目名称:swift,代码行数:28,
示例5: printvoid TypeRepr::print(ASTPrinter &Printer, const PrintOptions &Opts) const { // The type part of a NamedTypeRepr will get the callback. if (!isa<NamedTypeRepr>(this)) Printer.printTypePre(TypeLoc(const_cast<TypeRepr *>(this))); defer { if (!isa<NamedTypeRepr>(this)) Printer.printTypePost(TypeLoc(const_cast<TypeRepr *>(this))); }; switch (getKind()) {#define TYPEREPR(CLASS, PARENT) / case TypeReprKind::CLASS: { / auto Ty = static_cast<const CLASS##TypeRepr*>(this); / return Ty->printImpl(Printer, Opts); / }#include "swift/AST/TypeReprNodes.def" } llvm_unreachable("unknown kind!");}
开发者ID:0x4d4746h,项目名称:swift,代码行数:19,
示例6: printvoid DeclAttribute::print(ASTPrinter &Printer, const PrintOptions &Options, const Decl *D) const { if (!printImpl(Printer, Options, D)) return; // Nothing printed. if (isLongAttribute() && Options.PrintLongAttrsOnSeparateLines) Printer.printNewline(); else Printer << " ";}
开发者ID:aisobe,项目名称:swift,代码行数:11,
示例7: adjustPrintOptionsvoid swift::ide::printHeaderInterface( StringRef Filename, ASTContext &Ctx, ASTPrinter &Printer, const PrintOptions &Options) { auto AdjustedOptions = Options; adjustPrintOptions(AdjustedOptions); auto &Importer = static_cast<ClangImporter &>(*Ctx.getClangModuleLoader()); auto &ClangSM = Importer.getClangASTContext().getSourceManager(); auto headerFilter = [&](ClangNode ClangN) -> bool { return true; // no need for filtering. }; SmallVector<Decl *, 32> ClangDecls; llvm::SmallPtrSet<Decl *, 32> SeenDecls; auto headerReceiver = [&](Decl *D) { if (SeenDecls.count(D) == 0) { SeenDecls.insert(D); ClangDecls.push_back(D); } }; Importer.lookupDeclsFromHeader(Filename, headerFilter, headerReceiver); // Sort imported declarations in source order. std::sort(ClangDecls.begin(), ClangDecls.end(), [&](Decl *LHS, Decl *RHS) -> bool { return ClangSM.isBeforeInTranslationUnit( LHS->getClangNode().getLocation(), RHS->getClangNode().getLocation()); }); ASTPrinter *PrinterToUse = &Printer; ClangCommentPrinter RegularCommentPrinter(Printer, Importer); if (Options.PrintRegularClangComments) PrinterToUse = &RegularCommentPrinter; for (auto *D : ClangDecls) { ASTPrinter &Printer = *PrinterToUse; if (!shouldPrint(D, AdjustedOptions)) { Printer.avoidPrintDeclPost(D); continue; } if (D->print(Printer, AdjustedOptions)) Printer << "/n"; }}
开发者ID:peterfriese,项目名称:swift,代码行数:50,
示例8: printShortFormAvailable/// Print the short-form @available() attribute for an array of long-form/// AvailableAttrs that can be represented in the short form./// For example, for:/// @available(OSX, introduced=10.10)/// @available(iOS, introduced=8.0)/// this will print:/// @available(OSX 10.10, iOS 8.0, *)static void printShortFormAvailable(ArrayRef<const DeclAttribute *> Attrs, ASTPrinter &Printer, const PrintOptions &Options) { assert(!Attrs.empty()); Printer << "@available("; for (auto *DA : Attrs) { auto *AvailAttr = cast<AvailableAttr>(DA); assert(AvailAttr->Introduced.hasValue()); Printer << platformString(AvailAttr->Platform) << " " << AvailAttr->Introduced.getValue().getAsString() << ", "; } Printer << "*)"; Printer.printNewline();}
开发者ID:asdfeng,项目名称:swift,代码行数:24,
示例9: printShortFormAvailable/// Print the short-form @available() attribute for an array of long-form/// AvailableAttrs that can be represented in the short form./// For example, for:/// @available(OSX, introduced: 10.10)/// @available(iOS, introduced: 8.0)/// this will print:/// @available(OSX 10.10, iOS 8.0, *)static void printShortFormAvailable(ArrayRef<const DeclAttribute *> Attrs, ASTPrinter &Printer, const PrintOptions &Options) { assert(!Attrs.empty()); Printer << "@available("; auto FirstAvail = cast<AvailableAttr>(Attrs.front()); if (Attrs.size() == 1 && FirstAvail->isLanguageVersionSpecific()) { assert(FirstAvail->Introduced.hasValue()); Printer << "swift " << FirstAvail->Introduced.getValue().getAsString() << ")"; } else { for (auto *DA : Attrs) { auto *AvailAttr = cast<AvailableAttr>(DA); assert(AvailAttr->Introduced.hasValue()); Printer << platformString(AvailAttr->Platform) << " " << AvailAttr->Introduced.getValue().getAsString() << ", "; } Printer << "*)"; } Printer.printNewline();}
开发者ID:aisobe,项目名称:swift,代码行数:31,
示例10: printImplbool DeclAttribute::printImpl(ASTPrinter &Printer, const PrintOptions &Options, const Decl *D) const { // Handle any attributes that are not printed at all before we make printer // callbacks. switch (getKind()) { case DAK_ObjC: if (Options.PrintForSIL && isImplicit()) return false; break; case DAK_RawDocComment: case DAK_ObjCBridged: case DAK_SynthesizedProtocol: case DAK_ShowInInterface: case DAK_Rethrows: case DAK_Infix: return false; default: break; } // Handle any decl-modifiers. // FIXME: Ideally we would handle decl modifiers as a special kind of // attribute, but for now it's simpler to treat them as a keyword in the // printer. switch (getKind()) { // Handle all of the SIMPLE_DECL_ATTRs.#define SIMPLE_DECL_ATTR(X, CLASS, ...) case DAK_##CLASS:#include "swift/AST/Attr.def" case DAK_Inline: case DAK_AccessControl: case DAK_ReferenceOwnership: case DAK_Effects: case DAK_Optimize: if (DeclAttribute::isDeclModifier(getKind())) { Printer.printKeyword(getAttrName()); } else { Printer.printSimpleAttr(getAttrName(), /*needAt=*/true); } return true; case DAK_SetterAccess: Printer.printKeyword(getAttrName()); Printer << "(set)"; return true; default: break; } Printer.callPrintStructurePre(PrintStructureKind::BuiltinAttribute); SWIFT_DEFER { Printer.printStructurePost(PrintStructureKind::BuiltinAttribute); }; switch (getKind()) { case DAK_Semantics: Printer.printAttrName("@_semantics"); Printer << "(/"" << cast<SemanticsAttr>(this)->Value << "/")"; break; case DAK_Alignment: Printer.printAttrName("@_alignment"); Printer << "(" << cast<AlignmentAttr>(this)->getValue() << ")"; break; case DAK_SILGenName: Printer.printAttrName("@_silgen_name"); Printer << "(/"" << cast<SILGenNameAttr>(this)->Name << "/")"; break; case DAK_Available: { Printer.printAttrName("@available"); Printer << "("; auto Attr = cast<AvailableAttr>(this); if (Attr->isLanguageVersionSpecific()) Printer << "swift"; else Printer << Attr->platformString(); if (Attr->isUnconditionallyUnavailable()) Printer << ", unavailable"; else if (Attr->isUnconditionallyDeprecated()) Printer << ", deprecated"; if (Attr->Introduced) Printer << ", introduced: " << Attr->Introduced.getValue().getAsString(); if (Attr->Deprecated) Printer << ", deprecated: " << Attr->Deprecated.getValue().getAsString(); if (Attr->Obsoleted) Printer << ", obsoleted: " << Attr->Obsoleted.getValue().getAsString(); if (!Attr->Rename.empty()) Printer << ", renamed: /"" << Attr->Rename << "/""; // If there's no message, but this is specifically an imported // "unavailable in Swift" attribute, synthesize a message to look good in // the generated interface. if (!Attr->Message.empty()) Printer << ", message: /"" << Attr->Message << "/"";//.........这里部分代码省略.........
开发者ID:aisobe,项目名称:swift,代码行数:101,
示例11: printvoid DeclAttribute::print(ASTPrinter &Printer, const PrintOptions &Options) const { switch (getKind()) { // Handle all of the SIMPLE_DECL_ATTRs.#define SIMPLE_DECL_ATTR(X, CLASS, ...) case DAK_##CLASS:#include "swift/AST/Attr.def" case DAK_Inline: case DAK_Accessibility: case DAK_Ownership: case DAK_Effects: if (!DeclAttribute::isDeclModifier(getKind())) Printer << "@"; Printer << getAttrName(); break; case DAK_Semantics: Printer << "@_semantics(/"" << cast<SemanticsAttr>(this)->Value << "/")"; break; case DAK_Alignment: Printer << "@_alignment(" << cast<AlignmentAttr>(this)->Value << ")"; break; case DAK_SILGenName: Printer << "@_silgen_name(/"" << cast<SILGenNameAttr>(this)->Name << "/")"; break; case DAK_Available: { Printer << "@available("; auto Attr = cast<AvailableAttr>(this); Printer << Attr->platformString(); if (Attr->isUnconditionallyUnavailable()) Printer << ", unavailable"; else if (Attr->isUnconditionallyDeprecated()) Printer << ", deprecated"; if (Attr->Introduced) Printer << ", introduced=" << Attr->Introduced.getValue().getAsString(); if (Attr->Deprecated) Printer << ", deprecated=" << Attr->Deprecated.getValue().getAsString(); if (Attr->Obsoleted) Printer << ", obsoleted=" << Attr->Obsoleted.getValue().getAsString(); // If there's no message, but this is specifically an imported // "unavailable in Swift" attribute, synthesize a message to look good in // the generated interface. if (!Attr->Message.empty()) Printer << ", message=/"" << Attr->Message << "/""; else if (Attr->getUnconditionalAvailability() == UnconditionalAvailabilityKind::UnavailableInSwift) Printer << ", message=/"Not available in Swift/""; Printer << ")"; break; } case DAK_AutoClosure: Printer << "@autoclosure"; if (cast<AutoClosureAttr>(this)->isEscaping()) Printer << "(escaping)"; break; case DAK_ObjC: { if (Options.PrintForSIL && isImplicit()) break; Printer << "@objc"; llvm::SmallString<32> scratch; if (auto Name = cast<ObjCAttr>(this)->getName()) { if (!cast<ObjCAttr>(this)->isNameImplicit()) Printer << "(" << Name->getString(scratch) << ")"; } break; } case DAK_SetterAccessibility: Printer << getAttrName() << "(set)"; break; case DAK_SwiftNativeObjCRuntimeBase: { auto *attr = cast<SwiftNativeObjCRuntimeBaseAttr>(this); Printer << "@_swift_native_objc_runtime_base(" << attr->BaseClassName.str() << ")"; break; } case DAK_RawDocComment: // Not printed. return; case DAK_ObjCBridged: // Not printed. return; case DAK_SynthesizedProtocol: // Not printed. return; case DAK_WarnUnusedResult: { Printer << "@warn_unused_result"; auto *attr = cast<WarnUnusedResultAttr>(this); bool printedParens = false;//.........这里部分代码省略.........
开发者ID:asdfeng,项目名称:swift,代码行数:101,
示例12: printImplbool DeclAttribute::printImpl(ASTPrinter &Printer, const PrintOptions &Options) const { // Handle any attributes that are not printed at all before we make printer // callbacks. switch (getKind()) { case DAK_ObjC: if (Options.PrintForSIL && isImplicit()) return false; break; case DAK_RawDocComment: case DAK_ObjCBridged: case DAK_SynthesizedProtocol: case DAK_ShowInInterface: case DAK_Rethrows: return false; default: break; } // Handle any decl-modifiers. // FIXME: Ideally we would handle decl modifiers as a special kind of // attribute, but for now it's simpler to treat them as a keyword in the // printer. switch (getKind()) { // Handle all of the SIMPLE_DECL_ATTRs.#define SIMPLE_DECL_ATTR(X, CLASS, ...) case DAK_##CLASS:#include "swift/AST/Attr.def" case DAK_Inline: case DAK_Accessibility: case DAK_Ownership: case DAK_Effects: if (DeclAttribute::isDeclModifier(getKind())) { Printer.printKeyword(getAttrName()); } else { Printer.callPrintStructurePre(PrintStructureKind::BuiltinAttribute); Printer.printAttrName(getAttrName(), /*needAt=*/true); Printer.printStructurePost(PrintStructureKind::BuiltinAttribute); } return true; case DAK_SetterAccessibility: Printer.printKeyword(getAttrName()); Printer << "(set)"; return true; default: break; } Printer.callPrintStructurePre(PrintStructureKind::BuiltinAttribute); SWIFT_DEFER { Printer.printStructurePost(PrintStructureKind::BuiltinAttribute); }; switch (getKind()) { case DAK_Semantics: Printer.printAttrName("@_semantics"); Printer << "(/"" << cast<SemanticsAttr>(this)->Value << "/")"; break; case DAK_Alignment: Printer.printAttrName("@_alignment"); Printer << "(" << cast<AlignmentAttr>(this)->Value << ")"; break; case DAK_SILGenName: Printer.printAttrName("@_silgen_name"); Printer << "(/"" << cast<SILGenNameAttr>(this)->Name << "/")"; break; case DAK_Available: { Printer.printAttrName("@available"); Printer << "("; auto Attr = cast<AvailableAttr>(this); Printer << Attr->platformString(); if (Attr->isUnconditionallyUnavailable()) Printer << ", unavailable"; else if (Attr->isUnconditionallyDeprecated()) Printer << ", deprecated"; if (Attr->Introduced) Printer << ", introduced: " << Attr->Introduced.getValue().getAsString(); if (Attr->Deprecated) Printer << ", deprecated: " << Attr->Deprecated.getValue().getAsString(); if (Attr->Obsoleted) Printer << ", obsoleted: " << Attr->Obsoleted.getValue().getAsString(); if (!Attr->Rename.empty()) Printer << ", renamed: /"" << Attr->Rename << "/""; // If there's no message, but this is specifically an imported // "unavailable in Swift" attribute, synthesize a message to look good in // the generated interface. if (!Attr->Message.empty()) Printer << ", message: /"" << Attr->Message << "/""; else if (Attr->getUnconditionalAvailability() == UnconditionalAvailabilityKind::UnavailableInSwift) Printer << ", message: /"Not available in Swift/"";//.........这里部分代码省略.........
开发者ID:davidgloves,项目名称:swift,代码行数:101,
示例13: ValidateArguments//.........这里部分代码省略......... if (IsLanguageHLSL(inputDesc.shaderVersion)) { /* Establish intrinsic adept */ intrinsicAdpet = MakeUnique<HLSLIntrinsicAdept>(); /* Parse HLSL input code */ HLSLParser parser(log_); program = parser.ParseSource( std::make_shared<SourceCode>(std::move(processedInput)), outputDesc.nameMangling, inputDesc.shaderVersion, outputDesc.options.rowMajorAlignment, ((inputDesc.warnings & Warnings::Syntax) != 0) ); } else if (IsLanguageGLSL(inputDesc.shaderVersion)) { /* Establish intrinsic adept */ #if 0 intrinsicAdpet = MakeUnique<GLSLIntrinsicAdept>(); #else //!!! intrinsicAdpet = MakeUnique<HLSLIntrinsicAdept>(); #endif /* Parse GLSL input code */ GLSLParser parser(log_); program = parser.ParseSource( std::make_shared<SourceCode>(std::move(processedInput)), outputDesc.nameMangling, inputDesc.shaderVersion, ((inputDesc.warnings & Warnings::Syntax) != 0) ); } if (!program) return ReturnWithError(R_ParsingSourceFailed); /* ----- Context analysis ----- */ timePoints_.analyzer = Time::now(); bool analyzerResult = false; if (IsLanguageHLSL(inputDesc.shaderVersion)) { /* Analyse HLSL program */ HLSLAnalyzer analyzer(log_); analyzerResult = analyzer.DecorateAST(*program, inputDesc, outputDesc); } /* Print AST */ if (outputDesc.options.showAST) { ASTPrinter printer; printer.PrintAST(program.get()); } if (!analyzerResult) return ReturnWithError(R_AnalyzingSourceFailed); /* Optimize AST */ timePoints_.optimizer = Time::now(); if (outputDesc.options.optimize) { Optimizer optimizer; optimizer.Optimize(*program); } /* ----- Code generation ----- */ timePoints_.generation = Time::now(); bool generatorResult = false; if (IsLanguageGLSL(outputDesc.shaderVersion) || IsLanguageESSL(outputDesc.shaderVersion) || IsLanguageVKSL(outputDesc.shaderVersion)) { /* Generate GLSL output code */ GLSLGenerator generator(log_); generatorResult = generator.GenerateCode(*program, inputDesc, outputDesc, log_); } if (!generatorResult) return ReturnWithError(R_GeneratingOutputCodeFailed); /* ----- Code reflection ----- */ timePoints_.reflection = Time::now(); if (reflectionData) { ReflectionAnalyzer reflectAnalyzer(log_); reflectAnalyzer.Reflect( *program, inputDesc.shaderTarget, *reflectionData, ((inputDesc.warnings & Warnings::CodeReflection) != 0) ); } return true;}
开发者ID:LukasBanana,项目名称:HLSLTranslator,代码行数:101,
注:本文中的ASTPrinter类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 C++ ASTUnit类代码示例 C++ ASTNodeSet类代码示例 |