From 6e0c964f8736ce9e863caa9cf23bd7415608ac3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=9F=D0=BE=D0=B3=D0=BE=D1=80=D0=B5=D0=BB=D0=BE=D0=B2?= Date: Wed, 13 Mar 2019 12:58:17 +0300 Subject: [PATCH] Tuples matching: length check. --- .../TreeConversion/SyntaxTreeVisitorNodes/Patterns.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/TreeConverter/TreeConversion/SyntaxTreeVisitorNodes/Patterns.cs b/TreeConverter/TreeConversion/SyntaxTreeVisitorNodes/Patterns.cs index 3c9b3df2d..ef1f5074c 100644 --- a/TreeConverter/TreeConversion/SyntaxTreeVisitorNodes/Patterns.cs +++ b/TreeConverter/TreeConversion/SyntaxTreeVisitorNodes/Patterns.cs @@ -267,13 +267,17 @@ namespace PascalABCCompiler.TreeConverter var patternType = convert_strong(patternExpression).type; var expressionType = convert_strong(matchedExpression).type; - var expressionTypeName = expressionType.name; - var patternTypeName = patternType.name; + var expressionTypeName = expressionType.BaseFullName; + var patternTypeName = patternType.BaseFullName; + var tupleName = "System.Tuple"; if (type_table.is_derived(patternType, expressionType) || type_table.is_derived(expressionType, patternType) || AreTheSameType(patternType, expressionType) || - (expressionTypeName.StartsWith("Tuple") && patternTypeName.StartsWith("Tuple"))) + (expressionTypeName.StartsWith(tupleName) && + patternTypeName.StartsWith(tupleName) && + int.Parse(expressionTypeName.Substring(tupleName.Length + 1, 1)) == + int.Parse(patternTypeName.Substring(tupleName.Length + 1, 1)))) return; AddError(get_location(matchedExpression), "EXPRESSION_OF_TYPE_{0}_CANNOT_BE_MATCHED_AGAINST_PATTERN_WITH_TYPE_{1}", expressionType.name, patternType.name);