From 10c81963527f6afcf15908c064acda694f534ec7 Mon Sep 17 00:00:00 2001 From: EinBurgbauer Date: Thu, 20 May 2021 17:19:18 +0200 Subject: [PATCH] fixed thiscall compile crash now hopefully --- IDEHelper/Compiler/BfResolvedTypeUtils.cpp | 5 ++--- IDEHelper/Tests/src/Functions.bf | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/IDEHelper/Compiler/BfResolvedTypeUtils.cpp b/IDEHelper/Compiler/BfResolvedTypeUtils.cpp index c38c5c8f..27f74558 100644 --- a/IDEHelper/Compiler/BfResolvedTypeUtils.cpp +++ b/IDEHelper/Compiler/BfResolvedTypeUtils.cpp @@ -1227,8 +1227,7 @@ void BfMethodInstance::GetIRFunctionInfo(BfModule* module, BfIRType& returnType, { checkType = GetParamType(0); - //TODO(BCF): Breaks tests - //hasExplicitThis = true; + hasExplicitThis = true; } else checkType = GetOwner(); @@ -1236,7 +1235,7 @@ void BfMethodInstance::GetIRFunctionInfo(BfModule* module, BfIRType& returnType, } else { - if (hasExplicitThis) + if (hasExplicitThis && paramIdx == 0) { // We already looked at this hasExplicitThis = false; diff --git a/IDEHelper/Tests/src/Functions.bf b/IDEHelper/Tests/src/Functions.bf index 7228b7c3..a174bdd6 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);