From 39b7309dd5b541c81b78acbbe095d22d7d85d775 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Wed, 15 Jan 2020 08:31:34 -0800 Subject: [PATCH] Fixed method selection when we have append args --- BeefLibs/corlib/src/String.bf | 2 +- IDE/BeefProj.toml | 2 +- IDE/mintest/src/main3.bf | 1 + IDE/src/Program.bf | 5 ----- IDEHelper/Compiler/BfExprEvaluator.cpp | 4 ++-- IDEHelper/Compiler/BfSystem.cpp | 13 +++++++++++++ IDEHelper/Compiler/BfSystem.h | 1 + 7 files changed, 19 insertions(+), 9 deletions(-) diff --git a/BeefLibs/corlib/src/String.bf b/BeefLibs/corlib/src/String.bf index f6441175..01723a44 100644 --- a/BeefLibs/corlib/src/String.bf +++ b/BeefLibs/corlib/src/String.bf @@ -102,7 +102,7 @@ namespace System [AllowAppend] public this(String str, int offset) { - Debug.Assert(offset <= str.Length); + Debug.Assert((uint)offset <= (uint)str.Length); let count = str.mLength - offset; int bufferSize = (count == 0) ? 0 : (count - 1) & ~(sizeof(char8*) - 1); #unwarn diff --git a/IDE/BeefProj.toml b/IDE/BeefProj.toml index e0746b6f..6c86c004 100644 --- a/IDE/BeefProj.toml +++ b/IDE/BeefProj.toml @@ -49,7 +49,7 @@ OtherLinkFlags = "" TargetDirectory = "$(WorkspaceDir)/dist" TargetName = "BeefIDE_d2" OtherLinkFlags = "$(LinkFlags) Comdlg32.lib kernel32.lib user32.lib advapi32.lib shell32.lib IDEHelper64_d.lib BeefySysLib64_d.lib wsock32.lib" -DebugCommandArguments = "-proddir=C:\\Beef\\ide\\mintest" +DebugCommandArguments = "-workspace=c:\\beef\\ide\\mintest" DebugWorkingDirectory = "$(ProjectDir)\\dist" EnvironmentVars = ["_NO_DEBUG_HEAP=1"] diff --git a/IDE/mintest/src/main3.bf b/IDE/mintest/src/main3.bf index 88fd7a55..1a53973e 100644 --- a/IDE/mintest/src/main3.bf +++ b/IDE/mintest/src/main3.bf @@ -49,6 +49,7 @@ struct Blurg StructA sa = .(); sa.mA = 123 + return (int32)123; } } diff --git a/IDE/src/Program.bf b/IDE/src/Program.bf index 46cce0e8..c265a718 100644 --- a/IDE/src/Program.bf +++ b/IDE/src/Program.bf @@ -17,11 +17,6 @@ namespace IDE //System.Collections.Generic.List list; static int32 Main(String[] args) { - /*if ((var str = scope String()) || (var str2 = scope String())) - { - - }*/ - //Test.Test(); #if SMALLTEST Debug.WriteLine("Hey!\n"); #else diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 60b2619c..34e78eee 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -1535,8 +1535,8 @@ NoMatch: if (mBackupMethodDef != NULL) { - int prevParamDiff = (int)mBackupMethodDef->mParams.size() - (int)mArguments.size(); - int paramDiff = (int)checkMethod->mParams.size() - (int)mArguments.size(); + int prevParamDiff = (int)mBackupMethodDef->GetExplicitParamCount() - (int)mArguments.size(); + int paramDiff = (int)checkMethod->GetExplicitParamCount() - (int)mArguments.size(); if ((prevParamDiff < 0) && (prevParamDiff > paramDiff)) return false; if ((prevParamDiff >= 0) && ((paramDiff < 0) || (prevParamDiff < paramDiff))) diff --git a/IDEHelper/Compiler/BfSystem.cpp b/IDEHelper/Compiler/BfSystem.cpp index 8a26c602..bead9c57 100644 --- a/IDEHelper/Compiler/BfSystem.cpp +++ b/IDEHelper/Compiler/BfSystem.cpp @@ -571,6 +571,19 @@ String BfMethodDef::ToString() return methodText; } +int BfMethodDef::GetExplicitParamCount() +{ + for (int i = 0; i < (int)mParams.size(); i++) + { + auto param = mParams[i]; + if ((param->mParamKind != BfParamKind_AppendIdx) && + (param->mParamKind != BfParamKind_ImplicitCapture)) + return (int)mParams.size() - i; + } + + return (int)mParams.size(); +} + /// void BfTypeDef::Reset() diff --git a/IDEHelper/Compiler/BfSystem.h b/IDEHelper/Compiler/BfSystem.h index c0aea511..308d6f1e 100644 --- a/IDEHelper/Compiler/BfSystem.h +++ b/IDEHelper/Compiler/BfSystem.h @@ -772,6 +772,7 @@ public: bool IsEmptyPartial(); bool IsDefaultCtor(); String ToString(); + int GetExplicitParamCount(); }; class BfOperatorDef : public BfMethodDef