Example #1
0
        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);
        }
Example #2
0
    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());
    }
Example #3
0
    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);
        }
    }
Example #4
0
    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());
    }