diff --git a/IDEHelper/Compiler/BfMangler.cpp b/IDEHelper/Compiler/BfMangler.cpp index 5792fe23..257e5633 100644 --- a/IDEHelper/Compiler/BfMangler.cpp +++ b/IDEHelper/Compiler/BfMangler.cpp @@ -535,18 +535,16 @@ void BfGNUMangler::Mangle(MangleContext& mangleContext, StringImpl& name, BfType else if (type->IsRef()) { BfRefType* refType = (BfRefType*)type; - if ((refType->mRefKind == BfRefType::RefKind_Mut) && (!mangleContext.mCCompat)) + if (refType->mRefKind == BfRefType::RefKind_In) + { + isConst = true; + } + else if ((refType->mRefKind == BfRefType::RefKind_Mut) && (!mangleContext.mCCompat)) { name += "U3mut"; Mangle(mangleContext, name, refType->mElementType); return; - } - else if ((refType->mRefKind == BfRefType::RefKind_In) && (!mangleContext.mCCompat)) - { - name += "U2in"; - Mangle(mangleContext, name, refType->mElementType); - return; - } + } else if ((refType->mRefKind == BfRefType::RefKind_Out) && (!mangleContext.mCCompat)) { name += "U3out"; @@ -1649,14 +1647,12 @@ void BfMSMangler::Mangle(MangleContext& mangleContext, StringImpl& name, BfType* name += "A"; if (mangleContext.mIs64Bit) name += "E"; - if (isConst) + if ((isConst) || (refType->mRefKind == BfRefType::RefKind_In)) name += "B"; else name += "A"; if (refType->mRefKind == BfRefType::RefKind_Mut) - name += "mut$"; - else if (refType->mRefKind == BfRefType::RefKind_In) - name += "in$"; + name += "mut$"; else if (refType->mRefKind == BfRefType::RefKind_Out) name += "out$"; Mangle(mangleContext, name, refType->mElementType); diff --git a/IDEHelper/Tests/src/Interop.bf b/IDEHelper/Tests/src/Interop.bf index 3176ddce..141aa49b 100644 --- a/IDEHelper/Tests/src/Interop.bf +++ b/IDEHelper/Tests/src/Interop.bf @@ -19,6 +19,9 @@ namespace Tests [LinkName(.CPP)] [return: MangleConst] public extern ref float MethodA2([MangleConst]ref float val); + [LinkName(.CPP)] + [return: MangleConst] + public extern ref float MethodA3(in float val); } [CRepr] @@ -399,6 +402,7 @@ namespace Tests Test.Assert(StructA.sVal == 1234); float f = 123; Test.Assert(sa0.MethodA2(ref f) == 123); + Test.Assert(sa0.MethodA3(f) == 123); StartTest("Func0"); Test.Assert(Func0(12, 34) == 3412);