From cbdee1b1873ff0b7be887bccfbe5409e1a7ba685 Mon Sep 17 00:00:00 2001 From: Tim Foley Date: Tue, 14 Apr 2020 10:55:10 -0700 Subject: Fix front-end handling of generic static methods (#1319) * Fix front-end handling of generic static methods The front-end logic that was testing if a member was usable as a static member neglected to unwrap any generic-ness and look at the declaration inside (the parser currently puts all modifiers on the inner declaration instead of the outer generic). The test case included here is not a full compute test so that it only runs the front-end checking logic (where we had the bug). * fixup: tabs->spaces --- .../static-members/generic-static-method.slang | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 tests/language-feature/static-members/generic-static-method.slang (limited to 'tests') diff --git a/tests/language-feature/static-members/generic-static-method.slang b/tests/language-feature/static-members/generic-static-method.slang new file mode 100644 index 000000000..b1868175f --- /dev/null +++ b/tests/language-feature/static-members/generic-static-method.slang @@ -0,0 +1,30 @@ +// generic-static-method.slang + +// Confirm that the compiler can handle a generic +// `static` method declaration and call. + +//TEST:SIMPLE: + +interface IFrobnicator +{ + float frobnicate(float value); +} + +struct Doubler : IFrobnicator +{ + float frobnicate(float value) { return 2.0f * value; } +} + +struct FrobnicateHelpers +{ + static float doubleFrobnicate(F f, float value) + { + return f.frobnicate(f.frobnicate(value)); + } +} + +float test(float value) +{ + Doubler d; + return FrobnicateHelpers.doubleFrobnicate(d, value); +} -- cgit v1.2.3