diff --git a/IDEHelper/Compiler/BfResolvedTypeUtils.cpp b/IDEHelper/Compiler/BfResolvedTypeUtils.cpp index c38c5c8f..581a04e7 100644 --- a/IDEHelper/Compiler/BfResolvedTypeUtils.cpp +++ b/IDEHelper/Compiler/BfResolvedTypeUtils.cpp @@ -1209,7 +1209,6 @@ void BfMethodInstance::GetIRFunctionInfo(BfModule* module, BfIRType& returnType, returnType = module->mBfIRBuilder->MapType(mReturnType); } - bool hasExplicitThis = false; for (int paramIdx = -1; paramIdx < GetParamCount(); paramIdx++) { BfType* checkType = NULL; @@ -1224,24 +1223,15 @@ void BfMethodInstance::GetIRFunctionInfo(BfModule* module, BfIRType& returnType, else { if (HasExplicitThis()) - { checkType = GetParamType(0); - - //TODO(BCF): Breaks tests - //hasExplicitThis = true; - } else checkType = GetOwner(); } } else { - if (hasExplicitThis) - { - // We already looked at this - hasExplicitThis = false; - continue; - } + if ((paramIdx == 0) && (mMethodDef->mHasExplicitThis)) + continue; // Skip over the explicit 'this' checkType = GetParamType(paramIdx); } @@ -1355,9 +1345,6 @@ void BfMethodInstance::GetIRFunctionInfo(BfModule* module, BfIRType& returnType, if (checkType2 != NULL) _AddType(checkType2); - - if ((paramIdx == -1) && (mMethodDef->mHasExplicitThis)) - paramIdx++; // Skip over the explicit 'this' } if ((!module->mIsComptimeModule) && (GetStructRetIdx(forceStatic) == 1)) diff --git a/IDEHelper/Tests/src/Functions.bf b/IDEHelper/Tests/src/Functions.bf index 7228b7c3..669c1a4a 100644 --- a/IDEHelper/Tests/src/Functions.bf +++ b/IDEHelper/Tests/src/Functions.bf @@ -130,6 +130,22 @@ namespace Tests } } + [CRepr] + struct StructCRepr + { + public int32 something = 1; + + bool Run() => something == 1; + + public static void Test() + { + StructCRepr sc = .(); + function bool(StructCRepr this) func = => Run; + + Test.Assert(func(sc)); + } + } + public static int UseFunc0(function int (T this, float f) func, T a, float b) { return func(a, b); @@ -182,6 +198,8 @@ namespace Tests UseFunc0(func2, sa, 100.0f); true }); + + StructCRepr.Test(); } } }