diff --git a/src/libraries/Microsoft.PowerFx.Core/Syntax/Nodes/TypeLiteralNode.cs b/src/libraries/Microsoft.PowerFx.Core/Syntax/Nodes/TypeLiteralNode.cs index ca94de3ee2..bb0e56d51b 100644 --- a/src/libraries/Microsoft.PowerFx.Core/Syntax/Nodes/TypeLiteralNode.cs +++ b/src/libraries/Microsoft.PowerFx.Core/Syntax/Nodes/TypeLiteralNode.cs @@ -127,7 +127,7 @@ public override bool PreVisit(CallNode node) public override bool PreVisit(ListNode node) { - if (node.Parent != null && node.Parent is CallNode cn && ValidRecordOfNode(cn)) + if (node.Parent is CallNode cn && ValidRecordOfNode(cn)) { return true; } diff --git a/src/tests/Microsoft.PowerFx.Core.Tests.Shared/UserDefinedTypeTests.cs b/src/tests/Microsoft.PowerFx.Core.Tests.Shared/UserDefinedTypeTests.cs index ff22c7993b..ff6ec89283 100644 --- a/src/tests/Microsoft.PowerFx.Core.Tests.Shared/UserDefinedTypeTests.cs +++ b/src/tests/Microsoft.PowerFx.Core.Tests.Shared/UserDefinedTypeTests.cs @@ -143,6 +143,10 @@ public void TestUDTErrors(string typeDefinition, int expectedErrorCount, string // RecordOf record type [InlineData("Point := Type({ x: Number, y: Number }); PointR := Type(RecordOf(Point)); ", "ErrNamedType_InvalidTypeDefinition")] + + // Inline definitions within RecordOf + [InlineData("T1 := Type(RecordOf(Type([{A:Number}])));", "ErrTypeLiteral_InvalidTypeDefinition")] + [InlineData("T1 := Type(RecordOf(RecordOf([{x:Number, y:Number}])));", "ErrTypeLiteral_InvalidTypeDefinition")] public void TestRecordOfErrors(string typeDefinition, string expectedMessageKey) { var checkResult = new DefinitionsCheckResult() diff --git a/src/tests/Microsoft.PowerFx.Interpreter.Tests.Shared/RecalcEngineTests.cs b/src/tests/Microsoft.PowerFx.Interpreter.Tests.Shared/RecalcEngineTests.cs index d1e3c6a840..5efafa90d1 100644 --- a/src/tests/Microsoft.PowerFx.Interpreter.Tests.Shared/RecalcEngineTests.cs +++ b/src/tests/Microsoft.PowerFx.Interpreter.Tests.Shared/RecalcEngineTests.cs @@ -2056,7 +2056,7 @@ public void UDFImperativeVsRecordAmbiguityTest(string udf, string evalExpression true, 42.0)] - // Fails for anyother type other than table + // Fails for any type other than table [InlineData( "Account := Type(RecordOf(SomeRecord));", "", @@ -2101,6 +2101,14 @@ public void UDFImperativeVsRecordAmbiguityTest(string udf, string evalExpression "Point := Type(RecordOf([{x : Number, y : Number}]));", "", false)] + [InlineData( + "T1 := Type(RecordOf(Type([{A:Number}])));", + "", + false)] + [InlineData( + "T1 := Type(RecordOf(RecordOf([{x:Number, y:Number}])));", + "", + false)] // RecordOf not in type literal [InlineData(