Lines Matching defs:OB

23     OB << Desc;                                                                \
27 static void outputSpaceIfNecessary(OutputBuffer &OB) {
28 if (OB.empty())
31 char C = OB.back();
33 OB << " ";
36 static void outputSingleQualifier(OutputBuffer &OB, Qualifiers Q) {
39 OB << "const";
42 OB << "volatile";
45 OB << "__restrict";
52 static bool outputQualifierIfPresent(OutputBuffer &OB, Qualifiers Q,
58 OB << " ";
60 outputSingleQualifier(OB, Mask);
64 static void outputQualifiers(OutputBuffer &OB, Qualifiers Q, bool SpaceBefore,
69 size_t Pos1 = OB.getCurrentPosition();
70 SpaceBefore = outputQualifierIfPresent(OB, Q, Q_Const, SpaceBefore);
71 SpaceBefore = outputQualifierIfPresent(OB, Q, Q_Volatile, SpaceBefore);
72 SpaceBefore = outputQualifierIfPresent(OB, Q, Q_Restrict, SpaceBefore);
73 size_t Pos2 = OB.getCurrentPosition();
75 OB << " ";
78 static void outputCallingConvention(OutputBuffer &OB, CallingConv CC) {
79 outputSpaceIfNecessary(OB);
83 OB << "__cdecl";
86 OB << "__fastcall";
89 OB << "__pascal";
92 OB << "__regcall";
95 OB << "__stdcall";
98 OB << "__thiscall";
101 OB << "__eabi";
104 OB << "__vectorcall";
107 OB << "__clrcall";
110 OB << "__attribute__((__swiftcall__)) ";
113 OB << "__attribute__((__swiftasynccall__)) ";
121 OutputBuffer OB;
122 this->output(OB, Flags);
123 std::string_view SV = OB;
125 std::free(OB.getBuffer());
129 void PrimitiveTypeNode::outputPre(OutputBuffer &OB, OutputFlags Flags) const {
155 outputQualifiers(OB, Quals, true, false);
158 void NodeArrayNode::output(OutputBuffer &OB, OutputFlags Flags) const {
159 output(OB, Flags, ", ");
162 void NodeArrayNode::output(OutputBuffer &OB, OutputFlags Flags,
167 Nodes[0]->output(OB, Flags);
169 OB << Separator;
170 Nodes[I]->output(OB, Flags);
174 void EncodedStringLiteralNode::output(OutputBuffer &OB,
178 OB << "L\"";
181 OB << "\"";
184 OB << "u\"";
187 OB << "U\"";
190 OB << DecodedString << "\"";
192 OB << "...";
195 void IntegerLiteralNode::output(OutputBuffer &OB, OutputFlags Flags) const {
197 OB << '-';
198 OB << Value;
201 void TemplateParameterReferenceNode::output(OutputBuffer &OB,
204 OB << "{";
206 OB << "&";
209 Symbol->output(OB, Flags);
211 OB << ", ";
215 OB << ThunkOffsets[0];
217 OB << ", " << ThunkOffsets[I];
220 OB << "}";
223 void IdentifierNode::outputTemplateParameters(OutputBuffer &OB,
227 OB << "<";
228 TemplateParams->output(OB, Flags);
229 OB << ">";
232 void DynamicStructorIdentifierNode::output(OutputBuffer &OB,
235 OB << "`dynamic atexit destructor for ";
237 OB << "`dynamic initializer for ";
240 OB << "`";
241 Variable->output(OB, Flags);
242 OB << "''";
244 OB << "'";
245 Name->output(OB, Flags);
246 OB << "''";
250 void NamedIdentifierNode::output(OutputBuffer &OB, OutputFlags Flags) const {
251 OB << Name;
252 outputTemplateParameters(OB, Flags);
255 void IntrinsicFunctionIdentifierNode::output(OutputBuffer &OB,
353 outputTemplateParameters(OB, Flags);
356 void LocalStaticGuardIdentifierNode::output(OutputBuffer &OB,
359 OB << "`local static thread guard'";
361 OB << "`local static guard'";
363 OB << "{" << ScopeIndex << "}";
366 void ConversionOperatorIdentifierNode::output(OutputBuffer &OB,
368 OB << "operator";
369 outputTemplateParameters(OB, Flags);
370 OB << " ";
371 TargetType->output(OB, Flags);
374 void StructorIdentifierNode::output(OutputBuffer &OB, OutputFlags Flags) const {
376 OB << "~";
377 Class->output(OB, Flags);
378 outputTemplateParameters(OB, Flags);
381 void LiteralOperatorIdentifierNode::output(OutputBuffer &OB,
383 OB << "operator \"\"" << Name;
384 outputTemplateParameters(OB, Flags);
387 void FunctionSignatureNode::outputPre(OutputBuffer &OB,
391 OB << "public: ";
393 OB << "protected: ";
395 OB << "private: ";
401 OB << "static ";
404 OB << "virtual ";
407 OB << "extern \"C\" ";
411 ReturnType->outputPre(OB, Flags);
412 OB << " ";
416 outputCallingConvention(OB, CallConvention);
419 void FunctionSignatureNode::outputPost(OutputBuffer &OB,
422 OB << "(";
424 Params->output(OB, Flags);
426 OB << "void";
429 if (OB.back() != '(')
430 OB << ", ";
431 OB << "...";
433 OB << ")";
437 OB << " const";
439 OB << " volatile";
441 OB << " __restrict";
443 OB << " __unaligned";
446 OB << " noexcept";
449 OB << " &";
451 OB << " &&";
454 ReturnType->outputPost(OB, Flags);
457 void ThunkSignatureNode::outputPre(OutputBuffer &OB, OutputFlags Flags) const {
458 OB << "[thunk]: ";
460 FunctionSignatureNode::outputPre(OB, Flags);
463 void ThunkSignatureNode::outputPost(OutputBuffer &OB, OutputFlags Flags) const {
465 OB << "`adjustor{" << ThisAdjust.StaticOffset << "}'";
468 OB << "`vtordispex{" << ThisAdjust.VBPtrOffset << ", "
472 OB << "`vtordisp{" << ThisAdjust.VtordispOffset << ", "
477 FunctionSignatureNode::outputPost(OB, Flags);
480 void PointerTypeNode::outputPre(OutputBuffer &OB, OutputFlags Flags) const {
486 Sig->outputPre(OB, OF_NoCallingConvention);
488 Pointee->outputPre(OB, Flags);
490 outputSpaceIfNecessary(OB);
493 OB << "__unaligned ";
496 OB << "(";
498 OB << "(";
501 outputCallingConvention(OB, Sig->CallConvention);
502 OB << " ";
506 ClassParent->output(OB, Flags);
507 OB << "::";
512 OB << "*";
515 OB << "&";
518 OB << "&&";
523 outputQualifiers(OB, Quals, false, false);
526 void PointerTypeNode::outputPost(OutputBuffer &OB, OutputFlags Flags) const {
529 OB << ")";
531 Pointee->outputPost(OB, Flags);
534 void TagTypeNode::outputPre(OutputBuffer &OB, OutputFlags Flags) const {
542 OB << " ";
544 QualifiedName->output(OB, Flags);
545 outputQualifiers(OB, Quals, true, false);
548 void TagTypeNode::outputPost(OutputBuffer &OB, OutputFlags Flags) const {}
550 void ArrayTypeNode::outputPre(OutputBuffer &OB, OutputFlags Flags) const {
551 ElementType->outputPre(OB, Flags);
552 outputQualifiers(OB, Quals, true, false);
555 void ArrayTypeNode::outputOneDimension(OutputBuffer &OB, OutputFlags Flags,
560 ILN->output(OB, Flags);
563 void ArrayTypeNode::outputDimensionsImpl(OutputBuffer &OB,
568 outputOneDimension(OB, Flags, Dimensions->Nodes[0]);
570 OB << "][";
571 outputOneDimension(OB, Flags, Dimensions->Nodes[I]);
575 void ArrayTypeNode::outputPost(OutputBuffer &OB, OutputFlags Flags) const {
576 OB << "[";
577 outputDimensionsImpl(OB, Flags);
578 OB << "]";
580 ElementType->outputPost(OB, Flags);
583 void SymbolNode::output(OutputBuffer &OB, OutputFlags Flags) const {
584 Name->output(OB, Flags);
587 void FunctionSymbolNode::output(OutputBuffer &OB, OutputFlags Flags) const {
588 Signature->outputPre(OB, Flags);
589 outputSpaceIfNecessary(OB);
590 Name->output(OB, Flags);
591 Signature->outputPost(OB, Flags);
594 void VariableSymbolNode::output(OutputBuffer &OB, OutputFlags Flags) const {
612 OB << AccessSpec << ": ";
614 OB << "static ";
617 Type->outputPre(OB, Flags);
618 outputSpaceIfNecessary(OB);
620 Name->output(OB, Flags);
622 Type->outputPost(OB, Flags);
625 void CustomTypeNode::outputPre(OutputBuffer &OB, OutputFlags Flags) const {
626 Identifier->output(OB, Flags);
628 void CustomTypeNode::outputPost(OutputBuffer &OB, OutputFlags Flags) const {}
630 void QualifiedNameNode::output(OutputBuffer &OB, OutputFlags Flags) const {
631 Components->output(OB, Flags, "::");
634 void RttiBaseClassDescriptorNode::output(OutputBuffer &OB,
636 OB << "`RTTI Base Class Descriptor at (";
637 OB << NVOffset << ", " << VBPtrOffset << ", " << VBTableOffset << ", "
639 OB << ")'";
642 void LocalStaticGuardVariableNode::output(OutputBuffer &OB,
644 Name->output(OB, Flags);
647 void VcallThunkIdentifierNode::output(OutputBuffer &OB,
649 OB << "`vcall'{" << OffsetInVTable << ", {flat}}";
652 void SpecialTableSymbolNode::output(OutputBuffer &OB, OutputFlags Flags) const {
653 outputQualifiers(OB, Quals, false, true);
654 Name->output(OB, Flags);
656 OB << "{for `";
657 TargetName->output(OB, Flags);
658 OB << "'}";