diff --git a/src/Analysis/Ast/Impl/Analyzer/Evaluation/ExpressionEval.Operators.cs b/src/Analysis/Ast/Impl/Analyzer/Evaluation/ExpressionEval.Operators.cs index 0e4a08786..dd9569905 100644 --- a/src/Analysis/Ast/Impl/Analyzer/Evaluation/ExpressionEval.Operators.cs +++ b/src/Analysis/Ast/Impl/Analyzer/Evaluation/ExpressionEval.Operators.cs @@ -95,12 +95,7 @@ private IMember GetValueFromBinaryOp(Expression expr) { case PythonOperator.NotIn: // Assume all of these return True/False return Interpreter.GetBuiltinType(BuiltinTypeId.Bool); - } - var left = GetValueFromExpression(binop.Left) ?? UnknownType; - var right = GetValueFromExpression(binop.Right) ?? UnknownType; - - switch (binop.Operator) { case PythonOperator.Divide: case PythonOperator.TrueDivide: if (Interpreter.LanguageVersion.Is3x()) { @@ -110,30 +105,33 @@ private IMember GetValueFromBinaryOp(Expression expr) { break; } - if (right.GetPythonType()?.TypeId == BuiltinTypeId.Float) { + var left = GetValueFromExpression(binop.Left) ?? UnknownType; + var right = GetValueFromExpression(binop.Right) ?? UnknownType; + + + var rightType = right.GetPythonType(); + if (rightType?.TypeId == BuiltinTypeId.Float) { return right; } - if (left.GetPythonType()?.TypeId == BuiltinTypeId.Float) { + var leftType = left.GetPythonType(); + if (leftType?.TypeId == BuiltinTypeId.Float) { return left; } - if (right.GetPythonType()?.TypeId == BuiltinTypeId.Long) { + if (rightType?.TypeId == BuiltinTypeId.Long) { return right; } - if (left.GetPythonType()?.TypeId == BuiltinTypeId.Long) { + if (leftType?.TypeId == BuiltinTypeId.Long) { return left; } - if (binop.Operator == PythonOperator.Add - && left.GetPythonType()?.TypeId == BuiltinTypeId.List - && right.GetPythonType()?.TypeId == BuiltinTypeId.List) { - - var leftVar = GetValueFromExpression(binop.Left) as IPythonCollection; - var rightVar = GetValueFromExpression(binop.Right) as IPythonCollection; + if (binop.Operator == PythonOperator.Add + && leftType?.TypeId == BuiltinTypeId.List && rightType?.TypeId == BuiltinTypeId.List + && left is IPythonCollection lc && right is IPythonCollection rc) { - return PythonCollectionType.CreateConcatenatedList(Module.Interpreter, GetLoc(expr), leftVar?.Contents, rightVar?.Contents); + return PythonCollectionType.CreateConcatenatedList(Module.Interpreter, GetLoc(expr), lc.Contents, rc.Contents); } return left.IsUnknown() ? right : left; diff --git a/src/Analysis/Ast/Test/AssignmentTests.cs b/src/Analysis/Ast/Test/AssignmentTests.cs index 439d6dea5..f80d0c7a0 100644 --- a/src/Analysis/Ast/Test/AssignmentTests.cs +++ b/src/Analysis/Ast/Test/AssignmentTests.cs @@ -297,5 +297,11 @@ public async Task IncompleteTuple() { analysis.Should().HaveVariable("a").OfType(BuiltinTypeId.Int) .And.HaveVariable("b").OfType(BuiltinTypeId.Int); } + + [TestMethod, Priority(0)] + public async Task Uts46dataModule() { + const string code = @"from idna.uts46data import *"; + await GetAnalysisAsync(code); + } } }