public bool TryGetFunction(out ES_FunctionData *funcData, out string?roslynName) { if (Type != MappingType.Function) { funcData = null; roslynName = null; return(false); } funcData = (ES_FunctionData *)valuePointer; roslynName = valueString; return(true); }
internal static string MangleGlobalFunctionName([DisallowNull] ES_FunctionData *func) { // Sample name: "System.Math__FMath.Sin" using var mangleChars = new StructPooledList <char> (CL_ClearMode.Auto); // The namespace. mangleChars.AddRange(func->Name.NamespaceNameString); // The mangled namespace separator. mangleChars.AddRange("__"); // The function name. mangleChars.AddRange(func->Name.TypeNameString); return(mangleChars.Span.GetPooledString()); }
private unsafe void AddFunctionToTree(ES_FunctionData *functionData, TreeViewItem parentItem) { var typeNode = AddNodeToTree($"Function {functionData->Name.TypeNameString}", parentItem); AddNodeToTree($"Fully qualified name: {functionData->Name.GetNameAsTypeString ()}", typeNode); AddNodeToTree($"Source unit: {functionData->SourceUnitString}", typeNode); var protoData = functionData->FunctionType; AddNodeToTree($"Return type: {protoData->ReturnType->Name.GetNameAsTypeString ()}", typeNode); var argsListNode = AddNodeToTree($"Arguments list", typeNode); var reqArgsCount = protoData->ArgumentsList.Length - functionData->OptionalArgsCount; for (var i = 0; i < protoData->ArgumentsList.Length; i++) { var argProto = protoData->ArgumentsList.Span [i]; var argData = functionData->Arguments.Span [i]; var argType = string.Empty; var argTypeName = "[NULL]"; var argName = StringPool.Shared.GetOrAdd(argData.Name.Span, Encoding.ASCII); var argDef = string.Empty; if (argProto.ArgType != ES_ArgumentType.Normal) { argType = $"{argProto.ArgType} "; } if (argProto.ValueType != null) { argTypeName = argProto.ValueType->Name.GetNameAsTypeString(); } if (i >= reqArgsCount) { argDef = " = [...]"; } AddNodeToTree($"{argType}{argName} {argTypeName}{argDef}", argsListNode); } }
internal static string MangleMemberFunctionName([DisallowNull] ES_TypeInfo *owner, [DisallowNull] ES_FunctionData *func) { using var mangleChars = new StructPooledList <char> (CL_ClearMode.Auto); // The type name. mangleChars.AddRange(owner->Name.TypeNameString); // The mangled namespace separator. mangleChars.AddRange("__"); // The function name. mangleChars.AddRange(func->Name.TypeNameString); return(mangleChars.Span.GetPooledString()); }