50 lines
1.4 KiB
C#
50 lines
1.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace HybridCLR.Editor.ABI
|
|
{
|
|
|
|
public class ParamInfo
|
|
{
|
|
public TypeInfo Type { get; set; }
|
|
|
|
public int Index { get; set; }
|
|
|
|
//public bool IsNative2ManagedByAddress => Type.PorType >= ParamOrReturnType.STRUCT_NOT_PASS_AS_VALUE;
|
|
public bool IsPassToManagedByAddress => Type.GetParamSlotNum() > 1;
|
|
|
|
public bool IsPassToNativeByAddress => Type.PorType == ParamOrReturnType.STRUCTURE_AS_REF_PARAM;
|
|
|
|
public string Native2ManagedParamValue(PlatformABI canv)
|
|
{
|
|
return IsPassToManagedByAddress ? $"(uint64_t)&__arg{Index}" : $"*(uint64_t*)&__arg{Index}";
|
|
}
|
|
|
|
public string Managed2NativeParamValue(PlatformABI canv)
|
|
{
|
|
return IsPassToNativeByAddress ? $"(uint64_t)(localVarBase+argVarIndexs[{Index}])" : $"*({Type.GetTypeName()}*)(localVarBase+argVarIndexs[{Index}])";
|
|
}
|
|
}
|
|
|
|
public class ReturnInfo
|
|
{
|
|
public TypeInfo Type { get; set; }
|
|
|
|
public bool IsVoid => Type.PorType == ParamOrReturnType.VOID;
|
|
|
|
public int GetParamSlotNum(PlatformABI canv)
|
|
{
|
|
return Type.GetParamSlotNum();
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return Type.GetTypeName();
|
|
}
|
|
}
|
|
}
|