mirror of
				https://github.com/Ryujinx/Ryujinx.git
				synced 2025-11-04 01:53:43 +00:00 
			
		
		
		
	Slight Code Refactoring (#4373)
* Simplify return statements by using ternary expressions * Remove a redundant type conversion * Reduce nesting by inverting "if" statements * Try to improve code readability by using LINQ and inverting "if" statements * Try to improve code readability by using LINQ, using ternary expressions, and inverting "if" statements * Add line breaks to long LINQ * Add line breaks to long LINQ
This commit is contained in:
		
							parent
							
								
									7ca779a26d
								
							
						
					
					
						commit
						460f96967d
					
				@ -4,6 +4,7 @@ using Microsoft.CodeAnalysis.CSharp.Syntax;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Diagnostics;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
 | 
			
		||||
namespace Ryujinx.Horizon.Generators.Kernel
 | 
			
		||||
{
 | 
			
		||||
@ -151,24 +152,15 @@ namespace Ryujinx.Horizon.Generators.Kernel
 | 
			
		||||
                GenerateMethod32(generator, context.Compilation, method);
 | 
			
		||||
                GenerateMethod64(generator, context.Compilation, method);
 | 
			
		||||
 | 
			
		||||
                foreach (var attributeList in method.AttributeLists)
 | 
			
		||||
                foreach (AttributeSyntax attribute in method.AttributeLists.SelectMany(attributeList =>
 | 
			
		||||
                             attributeList.Attributes.Where(attribute =>
 | 
			
		||||
                                 GetCanonicalTypeName(context.Compilation, attribute) == TypeSvcAttribute)))
 | 
			
		||||
                {
 | 
			
		||||
                    foreach (var attribute in attributeList.Attributes)
 | 
			
		||||
                    {
 | 
			
		||||
                        if (GetCanonicalTypeName(context.Compilation, attribute) != TypeSvcAttribute)
 | 
			
		||||
                        {
 | 
			
		||||
                            continue;
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        foreach (var attributeArg in attribute.ArgumentList.Arguments)
 | 
			
		||||
                        {
 | 
			
		||||
                            if (attributeArg.Expression.Kind() == SyntaxKind.NumericLiteralExpression)
 | 
			
		||||
                            {
 | 
			
		||||
                                LiteralExpressionSyntax numericLiteral = (LiteralExpressionSyntax)attributeArg.Expression;
 | 
			
		||||
                                syscalls.Add(new SyscallIdAndName((int)numericLiteral.Token.Value, method.Identifier.Text));
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    syscalls.AddRange(from attributeArg in attribute.ArgumentList.Arguments
 | 
			
		||||
                        where attributeArg.Expression.Kind() == SyntaxKind.NumericLiteralExpression
 | 
			
		||||
                        select (LiteralExpressionSyntax)attributeArg.Expression
 | 
			
		||||
                        into numericLiteral
 | 
			
		||||
                        select new SyscallIdAndName((int)numericLiteral.Token.Value, method.Identifier.Text));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -510,28 +502,14 @@ namespace Ryujinx.Horizon.Generators.Kernel
 | 
			
		||||
 | 
			
		||||
        private static string GenerateCastFromUInt64(string value, string canonicalTargetTypeName, string targetTypeName)
 | 
			
		||||
        {
 | 
			
		||||
            if (canonicalTargetTypeName == TypeSystemBoolean)
 | 
			
		||||
            {
 | 
			
		||||
                return $"({value} & 1) != 0";
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return $"({targetTypeName}){value}";
 | 
			
		||||
            return canonicalTargetTypeName == TypeSystemBoolean ? $"({value} & 1) != 0" : $"({targetTypeName}){value}";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private static bool IsPointerSized(Compilation compilation, ParameterSyntax parameterSyntax)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (var attributeList in parameterSyntax.AttributeLists)
 | 
			
		||||
            {
 | 
			
		||||
                foreach (var attribute in attributeList.Attributes)
 | 
			
		||||
                {
 | 
			
		||||
                    if (GetCanonicalTypeName(compilation, attribute) == TypePointerSizedAttribute)
 | 
			
		||||
                    {
 | 
			
		||||
                        return true;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return false;
 | 
			
		||||
            return parameterSyntax.AttributeLists.Any(attributeList =>
 | 
			
		||||
                attributeList.Attributes.Any(attribute =>
 | 
			
		||||
                    GetCanonicalTypeName(compilation, attribute) == TypePointerSizedAttribute));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Initialize(GeneratorInitializationContext context)
 | 
			
		||||
 | 
			
		||||
@ -16,38 +16,37 @@ namespace Ryujinx.Horizon.Generators.Kernel
 | 
			
		||||
 | 
			
		||||
        public void OnVisitSyntaxNode(SyntaxNode syntaxNode)
 | 
			
		||||
        {
 | 
			
		||||
            if (syntaxNode is ClassDeclarationSyntax classDeclaration && classDeclaration.AttributeLists.Count != 0)
 | 
			
		||||
            if (!(syntaxNode is ClassDeclarationSyntax classDeclaration) || classDeclaration.AttributeLists.Count == 0)
 | 
			
		||||
            {
 | 
			
		||||
                foreach (var attributeList in classDeclaration.AttributeLists)
 | 
			
		||||
                {
 | 
			
		||||
                    if (attributeList.Attributes.Any(x => x.Name.GetText().ToString() == "SvcImpl"))
 | 
			
		||||
                    {
 | 
			
		||||
                        foreach (var memberDeclaration in classDeclaration.Members)
 | 
			
		||||
                        {
 | 
			
		||||
                            if (memberDeclaration is MethodDeclarationSyntax methodDeclaration)
 | 
			
		||||
                            {
 | 
			
		||||
                                VisitMethod(methodDeclaration);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
            if (!classDeclaration.AttributeLists.Any(attributeList =>
 | 
			
		||||
                    attributeList.Attributes.Any(x => x.Name.GetText().ToString() == "SvcImpl")))
 | 
			
		||||
            {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            foreach (var memberDeclaration in classDeclaration.Members)
 | 
			
		||||
            {
 | 
			
		||||
                if (memberDeclaration is MethodDeclarationSyntax methodDeclaration)
 | 
			
		||||
                {
 | 
			
		||||
                    VisitMethod(methodDeclaration);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void VisitMethod(MethodDeclarationSyntax methodDeclaration)
 | 
			
		||||
        {
 | 
			
		||||
            if (methodDeclaration.AttributeLists.Count != 0)
 | 
			
		||||
            if (methodDeclaration.AttributeLists.Count == 0)
 | 
			
		||||
            {
 | 
			
		||||
                foreach (var attributeList in methodDeclaration.AttributeLists)
 | 
			
		||||
                {
 | 
			
		||||
                    if (attributeList.Attributes.Any(x => x.Name.GetText().ToString() == "Svc"))
 | 
			
		||||
                    {
 | 
			
		||||
                        SvcImplementations.Add(methodDeclaration);
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (methodDeclaration.AttributeLists.Any(attributeList =>
 | 
			
		||||
                    attributeList.Attributes.Any(x => x.Name.GetText().ToString() == "Svc")))
 | 
			
		||||
            {
 | 
			
		||||
                SvcImplementations.Add(methodDeclaration);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -40,12 +40,7 @@ namespace Ryujinx.Horizon.Sdk.Sf
 | 
			
		||||
            var    runtimeMetadata = context.Processor.GetRuntimeMetadata();
 | 
			
		||||
            Result result          = context.Processor.PrepareForProcess(ref context, runtimeMetadata);
 | 
			
		||||
 | 
			
		||||
            if (result.IsFailure)
 | 
			
		||||
            {
 | 
			
		||||
                return result;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return _invoke(ref context, _processor, runtimeMetadata, inRawData, ref outHeader);
 | 
			
		||||
            return result.IsFailure ? result : _invoke(ref context, _processor, runtimeMetadata, inRawData, ref outHeader);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void GetCmifOutHeaderPointer(ref Span<CmifOutHeader> outHeader, ref Span<byte> outRawData)
 | 
			
		||||
 | 
			
		||||
@ -53,7 +53,7 @@ namespace Ryujinx.Horizon.Sdk.Sf
 | 
			
		||||
 | 
			
		||||
        public static void SerializeArg<T>(Span<byte> outRawData, int offset, T value) where T : unmanaged
 | 
			
		||||
        {
 | 
			
		||||
            MemoryMarshal.Cast<byte, T>(outRawData.Slice(offset, Unsafe.SizeOf<T>()))[0] = (T)value;
 | 
			
		||||
            MemoryMarshal.Cast<byte, T>(outRawData.Slice(offset, Unsafe.SizeOf<T>()))[0] = value;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void SerializeCopyHandle(HipcMessageData response, int index, int value)
 | 
			
		||||
 | 
			
		||||
@ -41,10 +41,8 @@ namespace Ryujinx.Horizon.Sdk.Sf
 | 
			
		||||
        {
 | 
			
		||||
            _args = args;
 | 
			
		||||
 | 
			
		||||
            for (int i = 0; i < args.Length; i++)
 | 
			
		||||
            foreach (CommandArg argInfo in args)
 | 
			
		||||
            {
 | 
			
		||||
                var argInfo = args[i];
 | 
			
		||||
 | 
			
		||||
                switch (argInfo.Type)
 | 
			
		||||
                {
 | 
			
		||||
                    case CommandArgType.Buffer:
 | 
			
		||||
@ -239,14 +237,13 @@ namespace Ryujinx.Horizon.Sdk.Sf
 | 
			
		||||
            {
 | 
			
		||||
                return mode == HipcBufferMode.NonSecure;
 | 
			
		||||
            }
 | 
			
		||||
            else if (flags.HasFlag(HipcBufferFlags.MapTransferAllowsNonDevice))
 | 
			
		||||
 | 
			
		||||
            if (flags.HasFlag(HipcBufferFlags.MapTransferAllowsNonDevice))
 | 
			
		||||
            {
 | 
			
		||||
                return mode == HipcBufferMode.NonDevice;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                return mode == HipcBufferMode.Normal;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return mode == HipcBufferMode.Normal;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void SetOutBuffers(HipcMessageData response, bool[] isBufferMapAlias)
 | 
			
		||||
@ -261,28 +258,30 @@ namespace Ryujinx.Horizon.Sdk.Sf
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                var flags = _args[i].BufferFlags;
 | 
			
		||||
                if (flags.HasFlag(HipcBufferFlags.Out))
 | 
			
		||||
                if (!flags.HasFlag(HipcBufferFlags.Out))
 | 
			
		||||
                {
 | 
			
		||||
                    var buffer = _bufferRanges[i];
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                    if (flags.HasFlag(HipcBufferFlags.Pointer))
 | 
			
		||||
                var buffer = _bufferRanges[i];
 | 
			
		||||
 | 
			
		||||
                if (flags.HasFlag(HipcBufferFlags.Pointer))
 | 
			
		||||
                {
 | 
			
		||||
                    response.SendStatics[recvPointerIndex] = new HipcStaticDescriptor(buffer.Address, (ushort)buffer.Size, recvPointerIndex);
 | 
			
		||||
                }
 | 
			
		||||
                else if (flags.HasFlag(HipcBufferFlags.AutoSelect))
 | 
			
		||||
                {
 | 
			
		||||
                    if (!isBufferMapAlias[i])
 | 
			
		||||
                    {
 | 
			
		||||
                        response.SendStatics[recvPointerIndex] = new HipcStaticDescriptor(buffer.Address, (ushort)buffer.Size, recvPointerIndex);
 | 
			
		||||
                    }
 | 
			
		||||
                    else if (flags.HasFlag(HipcBufferFlags.AutoSelect))
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        if (!isBufferMapAlias[i])
 | 
			
		||||
                        {
 | 
			
		||||
                            response.SendStatics[recvPointerIndex] = new HipcStaticDescriptor(buffer.Address, (ushort)buffer.Size, recvPointerIndex);
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            response.SendStatics[recvPointerIndex] = new HipcStaticDescriptor(0UL, 0, recvPointerIndex);
 | 
			
		||||
                        }
 | 
			
		||||
                        response.SendStatics[recvPointerIndex] = new HipcStaticDescriptor(0UL, 0, recvPointerIndex);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    recvPointerIndex++;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                recvPointerIndex++;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -339,15 +338,17 @@ namespace Ryujinx.Horizon.Sdk.Sf
 | 
			
		||||
 | 
			
		||||
            int inObjectIndex = 0;
 | 
			
		||||
 | 
			
		||||
            for (int i = 0; i < _args.Length; i++)
 | 
			
		||||
            foreach (CommandArg t in _args)
 | 
			
		||||
            {
 | 
			
		||||
                if (_args[i].Type == CommandArgType.InObject)
 | 
			
		||||
                if (t.Type != CommandArgType.InObject)
 | 
			
		||||
                {
 | 
			
		||||
                    int index    = inObjectIndex++;
 | 
			
		||||
                    var inObject = inObjects[index];
 | 
			
		||||
 | 
			
		||||
                    objects[index] = inObject?.ServiceObject;
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                int index    = inObjectIndex++;
 | 
			
		||||
                var inObject = inObjects[index];
 | 
			
		||||
 | 
			
		||||
                objects[index] = inObject?.ServiceObject;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return Result.Success;
 | 
			
		||||
 | 
			
		||||
@ -37,12 +37,7 @@ namespace Ryujinx.Horizon.Sm.Impl
 | 
			
		||||
 | 
			
		||||
            result = GetServiceImpl(out handle, ref _services[serviceIndex]);
 | 
			
		||||
 | 
			
		||||
            if (result == KernelResult.SessionCountExceeded)
 | 
			
		||||
            {
 | 
			
		||||
                return SmResult.OutOfSessions;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return result;
 | 
			
		||||
            return result == KernelResult.SessionCountExceeded ? SmResult.OutOfSessions : result;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private Result GetServiceImpl(out int handle, ref ServiceInfo serviceInfo)
 | 
			
		||||
@ -61,13 +56,7 @@ namespace Ryujinx.Horizon.Sm.Impl
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // TODO: Validation with GetProcessInfo etc.
 | 
			
		||||
 | 
			
		||||
            if (HasServiceInfo(name))
 | 
			
		||||
            {
 | 
			
		||||
                return SmResult.AlreadyRegistered;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return RegisterServiceImpl(out handle, processId, name, maxSessions, isLight);
 | 
			
		||||
            return HasServiceInfo(name) ? SmResult.AlreadyRegistered : RegisterServiceImpl(out handle, processId, name, maxSessions, isLight);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public Result RegisterServiceForSelf(out int handle, ServiceName name, int maxSessions)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user