From b78a8ba006fc9253cd1fd88fb7dd1eacfa749dfa Mon Sep 17 00:00:00 2001 From: "Harsh Aggarwal (NVIDIA)" Date: Thu, 24 Apr 2025 10:11:30 +0530 Subject: Fix #6544: Properly format nested type names in extensions (#6769) * Fix #6544: Properly format nested type names in extensions Modify DeclRefBase::toText to properly handle types defined in extensions by qualifying them with their parent type name. This ensures getFullName() returns the full name like 'FullPrecisionOptimizer.State' instead of just '.State'. Also handle other nested types in structs/classes similarly. * Update extension reflection handling - with generics args and namespaces - stopping namespace inclusion for extension members - Update to use getTargetType() to handle the generic arguments - update test cases * Simplify code to remove using parentDecl --- .../diagnostics/extension-full-name.slang.expected | 41 ++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 tests/diagnostics/extension-full-name.slang.expected (limited to 'tests/diagnostics/extension-full-name.slang.expected') diff --git a/tests/diagnostics/extension-full-name.slang.expected b/tests/diagnostics/extension-full-name.slang.expected new file mode 100644 index 000000000..8001298c1 --- /dev/null +++ b/tests/diagnostics/extension-full-name.slang.expected @@ -0,0 +1,41 @@ +result code = -1 +standard error = { +tests/diagnostics/extension-full-name.slang(184): error 30019: expected an expression of type 'GenericType.State', got 'int' + state1 = 0; // Error: expected expr of type 'GenericType.State', got 'int' + ^ +tests/diagnostics/extension-full-name.slang(185): error 30019: expected an expression of type 'GenericType.InnerType.Options', got 'int' + options1 = 0; // Error: expected expr of type 'GenericType.InnerType.Options', got 'int' + ^ +tests/diagnostics/extension-full-name.slang(186): error 30019: expected an expression of type 'NonGenericType.Config', got 'int' + config1 = 0; // Error: expected expr of type 'NonGenericType.Config', got 'int' + ^ +tests/diagnostics/extension-full-name.slang(187): error 30019: expected an expression of type 'Container.Nested.Settings', got 'int' + settings1 = 0; // Error: expected expr of type 'Container.Nested.Settings', got 'int' + ^ +tests/diagnostics/extension-full-name.slang(188): error 30019: expected an expression of type 'Container.Nested.DeepNested.Record', got 'int' + record1 = 0; // Error: expected expr of type 'Container.Nested.DeepNested.Record', got 'int' + ^ +tests/diagnostics/extension-full-name.slang(196): error 30027: 'getOptions' is not a member of 'GenericType.InnerType'. + intInner.getOptions(); // This won't compile as intInner doesn't have getOptions + ^~~~~~~~~~ +tests/diagnostics/extension-full-name.slang(226): error 30019: expected an expression of type 'GenericType.InnerType.Options', got 'GenericType.State' + .createState(); // Error: expected expr of type 'GenericType.InnerType.Options', + ^ +tests/diagnostics/extension-full-name.slang(228): error 30019: expected an expression of type 'GenericType.State', got 'NonGenericType.Config' + state1 = nonGenType.createConfig(); // Error: expected expr of type 'GenericType.State', + ^ +tests/diagnostics/extension-full-name.slang(230): error 30019: expected an expression of type 'NonGenericType.Config', got 'Container.Nested.Settings' + config1 = nested.createSettings(); // Error: expected expr of type 'NonGenericType.Config', got + ^ +tests/diagnostics/extension-full-name.slang(304): error 30019: expected an expression of type 'Bar[3].DataStats', got 'int' + barStats = 0; // Error: expected expr of type 'Bar[3].DataStats', got 'int' + ^ +tests/diagnostics/extension-full-name.slang(312): error 30019: expected an expression of type 'Bar[2].DataStats', got 'Bar[3].DataStats' + bar2Stats = barArray.computeStats(); // Error: expected expr of type 'Bar[2].DataStats', got 'Bar[3].DataStats' + ^ +tests/diagnostics/extension-full-name.slang(355): error 30019: expected an expression of type 'SimpleBase.NamedConfig', got 'int' + config = 0; // Error: expected expr of type 'SimpleBase.NamedConfig', got 'int' + ^ +} +standard output = { +} -- cgit v1.2.3