diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index d024e22b..21bb84fd 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -3668,8 +3668,10 @@ BfTypedValue BfExprEvaluator::LoadLocal(BfLocalVariable* varDecl, bool allowRef) else { BfTypedValueKind kind; - if ((varDecl->mResolvedType->IsComposite()) && (varDecl->IsParam()) && (mModule->mCurMethodState->mMixinState == NULL)) + if ((varDecl->mResolvedType->IsComposite()) && (varDecl->mValue.IsArg())) + { kind = varDecl->mIsReadOnly ? BfTypedValueKind_ReadOnlyAddr : BfTypedValueKind_Addr; + } else kind = BfTypedValueKind_Value; localResult = BfTypedValue(varDecl->mValue, varDecl->mResolvedType, kind); diff --git a/IDEHelper/Tests/src/ConstEval.bf b/IDEHelper/Tests/src/ConstEval.bf index 68bd1bb4..9f74e7d5 100644 --- a/IDEHelper/Tests/src/ConstEval.bf +++ b/IDEHelper/Tests/src/ConstEval.bf @@ -135,6 +135,16 @@ namespace Tests public const let cVal1 = StrToValue("1.23"); } + [Comptime] + static int StrLenMixin(StringView str) + { + mixin test() + { + str.Length + } + return test!(); + } + [Test] public static void TestBasics() { @@ -172,6 +182,7 @@ namespace Tests Test.Assert([ConstEval]MethodB() == 1); Test.Assert(MethodC() == 1753); + Test.Assert(StrLenMixin("ABCD") == 4); } } }