Răsfoiți Sursa

Fixed int-unknown shift, wantType with int(X) style cast

Brian Fiete 9 luni în urmă
părinte
comite
c555b8b7ef
1 a modificat fișierele cu 5 adăugiri și 1 ștergeri
  1. 5 1
      IDEHelper/Compiler/BfExprEvaluator.cpp

+ 5 - 1
IDEHelper/Compiler/BfExprEvaluator.cpp

@@ -7460,7 +7460,7 @@ void BfExprEvaluator::FinishDeferredEvals(SizedArrayImpl<BfResolvedArg>& argValu
 			{
 				auto expr = BfNodeDynCast<BfExpression>(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())