diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index fb2694a9..68af0188 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -7460,7 +7460,7 @@ void BfExprEvaluator::FinishDeferredEvals(SizedArrayImpl& argValu { auto expr = BfNodeDynCast(argValues[argIdx].mExpression); if (expr != NULL) - argValue = mModule->CreateValueFromExpression(expr); + argValue = mModule->CreateValueFromExpression(expr, argValues[argIdx].mExpectedType); } } } @@ -10076,6 +10076,9 @@ BfTypedValue BfExprEvaluator::MatchMethod(BfAstNode* targetSrc, BfMethodBoundExp if ((refType != NULL) && (refType->IsPrimitiveType())) { + for (auto& resolvedArg : argValues.mResolvedArgs) + resolvedArg.mExpectedType = refType; + FinishDeferredEvals(argValues); if (argValues.mResolvedArgs.IsEmpty()) @@ -23882,6 +23885,7 @@ void BfExprEvaluator::PerformBinaryOperation(BfAstNode* leftExpression, BfAstNod if ((binaryOp == BfBinaryOp_LeftShift) || (binaryOp == BfBinaryOp_RightShift)) { forceLeftType = true; + mModule->FixIntUnknown(leftValue); } if (rightValue.mType->IsRef())