diff --git a/IDE/Tests/CompileFail001/src/Generics.bf b/IDE/Tests/CompileFail001/src/Generics.bf index 6f851c63..1e4d7db0 100644 --- a/IDE/Tests/CompileFail001/src/Generics.bf +++ b/IDE/Tests/CompileFail001/src/Generics.bf @@ -99,9 +99,15 @@ namespace IDETest TestGen(a); //FAIL Unable to determine generic argument 'TItem' } + static void Method7() where T : var where comptype(typeof(T)) : class + { + + } + public static void TestGenBug() { TestPreGen>(); + Method7(); //FAIL The type 'int' must be a reference type in order to use it as parameter 'comptype(typeof(T))' for 'IDETest.Generics.Method7()' } } } diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index ff30e5b3..ed3d3707 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -2287,14 +2287,17 @@ bool BfMethodMatcher::CheckMethod(BfTypeInstance* targetTypeInstance, BfTypeInst auto genericParamType = (BfGenericParamType*)externType; if (genericParamType->mGenericParamKind == BfGenericParamKind_Method) { - auto genericArg = (*genericArgumentsSubstitute)[genericParamType->mGenericParamIdx]; - if (genericArg == NULL) + if (genericArgumentsSubstitute != NULL) { - if (allowEmptyGenericSet.Contains(genericParamType->mGenericParamIdx)) - continue; - goto NoMatch; + auto genericArg = (*genericArgumentsSubstitute)[genericParamType->mGenericParamIdx]; + if (genericArg == NULL) + { + if (allowEmptyGenericSet.Contains(genericParamType->mGenericParamIdx)) + continue; + goto NoMatch; + } + externType = genericArg; } - externType = genericArg; } } diff --git a/IDEHelper/Tests/src/Generics.bf b/IDEHelper/Tests/src/Generics.bf index 8901b9c3..dd2c642b 100644 --- a/IDEHelper/Tests/src/Generics.bf +++ b/IDEHelper/Tests/src/Generics.bf @@ -331,6 +331,16 @@ namespace Tests return (TOut)val; } + static void MethodH(T val) where T2 : List + { + + } + + static void MethodI(T val) where comptype(typeof(T2)) : List + { + + } + [Test] public static void TestBasics() { @@ -404,6 +414,7 @@ namespace Tests Test.Assert(Conv(12.34f) == 12); Test.Assert(Conv(12.34f) == 12); + //MethodH(scope List()); } }