public virtual string GetDeclName(Declaration declaration, TypePrintScopeKind scope) { switch (scope) { case TypePrintScopeKind.Local: return(PrintLogicalNames ? declaration.LogicalOriginalName : declaration.OriginalName); case TypePrintScopeKind.Qualified: if (declaration.Namespace is Class) { return($"{declaration.Namespace.Visit(this)}::{declaration.OriginalName}"); } return(PrintLogicalNames ? declaration.QualifiedLogicalOriginalName : declaration.QualifiedOriginalName); case TypePrintScopeKind.GlobalQualified: if (declaration.Namespace is Class) { return($"{declaration.Namespace.Visit(this)}::{declaration.OriginalName}"); } var qualifier = PrintFlavorKind == CppTypePrintFlavorKind.Cpp ? "::" : string.Empty; return(qualifier + GetDeclName(declaration, TypePrintScopeKind.Qualified)); } throw new NotSupportedException(); }
public static string GetCIdentifier(BindingContext context, Declaration decl, TypePrintScopeKind scope = TypePrintScopeKind.Qualified) { var cTypePrinter = new CppTypePrinter(context) { PrintFlavorKind = CppTypePrintFlavorKind.C, ScopeKind = TypePrintScopeKind.Local }; var functionName = cTypePrinter.VisitDeclaration(decl).ToString(); if (scope == TypePrintScopeKind.Local) { return(functionName); } cTypePrinter.ScopeKind = scope; var qualifiedParentName = cTypePrinter.VisitDeclaration(decl.Namespace).ToString(); // HACK: CppTypePrinter code calls into decl.QualifiedName, which does not take into // account language flavor, that code needs to be reworked. For now, hack around it. qualifiedParentName = qualifiedParentName.Replace("::", "_"); return($"{qualifiedParentName}_{functionName}"); }
public override TypePrinterResult GetDeclName(Declaration declaration, TypePrintScopeKind scope) { var result = base.GetDeclName(declaration, scope); result.Type = result.Type.Replace("::", NamespaceSeparator); return(result); }
public TypePrinterResult GetDeclName(Declaration declaration, TypePrintScopeKind scope) { switch (scope) { case TypePrintScopeKind.Local: { if (ContextKind == TypePrinterContextKind.Managed) { return(PrintLogicalNames ? declaration.LogicalName : declaration.Name); } return(PrintLogicalNames ? declaration.LogicalOriginalName : declaration.OriginalName); } case TypePrintScopeKind.Qualified: { if (ContextKind == TypePrinterContextKind.Managed) { var outputNamespace = declaration.TranslationUnit?.Module?.OutputNamespace; if (!string.IsNullOrEmpty(outputNamespace)) { return($"{outputNamespace}::{declaration.QualifiedName}"); } return(declaration.QualifiedName); } if (declaration.Namespace is Class) { return($"{declaration.Namespace.Visit(this)}::{declaration.OriginalName}"); } return(PrintLogicalNames ? declaration.QualifiedLogicalOriginalName : declaration.QualifiedOriginalName); } case TypePrintScopeKind.GlobalQualified: { var name = (ContextKind == TypePrinterContextKind.Managed) ? declaration.Name : declaration.OriginalName; if (declaration.Namespace is Class) { return($"{declaration.Namespace.Visit(this)}::{name}"); } var qualifier = PrintFlavorKind == CppTypePrintFlavorKind.Cpp ? "::" : string.Empty; return(qualifier + GetDeclName(declaration, TypePrintScopeKind.Qualified)); } } throw new NotSupportedException(); }
public virtual TypePrinterResult GetDeclName(Declaration declaration, TypePrintScopeKind scope) { switch (scope) { case TypePrintScopeKind.Local: { if (ContextKind == TypePrinterContextKind.Managed) { return(PrintLogicalNames ? declaration.LogicalName : declaration.Name); } if (PrefixSpecialFunctions) { if (declaration is Function { IsOperator : true } function) { return($"operator_{function.OperatorKind}"); } } return(PrintLogicalNames ? declaration.LogicalOriginalName : declaration.OriginalName); } case TypePrintScopeKind.Qualified: { if (ContextKind == TypePrinterContextKind.Managed) { var outputNamespace = GlobalNamespace(declaration); if (!string.IsNullOrEmpty(outputNamespace)) { return($"{outputNamespace}{NamespaceSeparator}{declaration.QualifiedName}"); } return(declaration.QualifiedName); } if (declaration.Namespace is Class) { var declName = GetDeclName(declaration, TypePrintScopeKind.Local); bool printTags = PrintTags; PrintTags = false; TypePrinterResult declContext = declaration.Namespace.Visit(this); PrintTags = printTags; return($"{declContext}{NamespaceSeparator}{declName}"); } return(PrintLogicalNames ? declaration.QualifiedLogicalOriginalName : declaration.QualifiedOriginalName); } case TypePrintScopeKind.GlobalQualified: { var name = (ContextKind == TypePrinterContextKind.Managed) ? declaration.Name : declaration.OriginalName; if (declaration.Namespace is Class) { return($"{declaration.Namespace.Visit(this)}{NamespaceSeparator}{name}"); } var qualifier = HasGlobalNamespacePrefix ? NamespaceSeparator : string.Empty; return(qualifier + GetDeclName(declaration, TypePrintScopeKind.Qualified)); } } throw new NotSupportedException(); }
public void PushScope(TypePrintScopeKind kind) => scopeKinds.Push(kind);