From ec0224edc3a867bbf059e790ad7b2a1a881a0705 Mon Sep 17 00:00:00 2001 From: Yong He Date: Mon, 11 Dec 2023 16:13:32 -0800 Subject: Diagnose for invalid decl nesting + namespace lookup fixes. (#3397) * Diagnose for invalid decl nesting. * Fix. * Fix. * Fix. * Fix `namespace` lookup and `using` resolution. * fix project files. * revert project files. * Enhance namespace syntax, docs. * Fixes. --------- Co-authored-by: Yong He --- .../namespaces/namespace-import/m.slang | 5 ++++ .../namespaces/namespace-import/test.slang | 29 ++++++++++++++++++++++ .../namespaces/namespace-include/a.slang | 28 +++++++++++++++++++++ .../namespaces/namespace-include/b.slang | 11 ++++++++ .../namespaces/namespace-include/m.slang | 11 ++++++++ .../namespaces/namespace-include/m2.slang | 9 +++++++ .../namespaces/namespace-using/a.slang | 10 ++++++++ .../namespaces/namespace-using/a1.slang | 6 +++++ .../namespaces/namespace-using/b.slang | 18 ++++++++++++++ 9 files changed, 127 insertions(+) create mode 100644 tests/language-feature/namespaces/namespace-import/m.slang create mode 100644 tests/language-feature/namespaces/namespace-import/test.slang create mode 100644 tests/language-feature/namespaces/namespace-include/a.slang create mode 100644 tests/language-feature/namespaces/namespace-include/b.slang create mode 100644 tests/language-feature/namespaces/namespace-include/m.slang create mode 100644 tests/language-feature/namespaces/namespace-include/m2.slang create mode 100644 tests/language-feature/namespaces/namespace-using/a.slang create mode 100644 tests/language-feature/namespaces/namespace-using/a1.slang create mode 100644 tests/language-feature/namespaces/namespace-using/b.slang (limited to 'tests/language-feature/namespaces') diff --git a/tests/language-feature/namespaces/namespace-import/m.slang b/tests/language-feature/namespaces/namespace-import/m.slang new file mode 100644 index 000000000..16a35d9b4 --- /dev/null +++ b/tests/language-feature/namespaces/namespace-import/m.slang @@ -0,0 +1,5 @@ +module m; +namespace ns1.ns2 +{ + public int g() { return 1; } +} diff --git a/tests/language-feature/namespaces/namespace-import/test.slang b/tests/language-feature/namespaces/namespace-import/test.slang new file mode 100644 index 000000000..285883c69 --- /dev/null +++ b/tests/language-feature/namespaces/namespace-import/test.slang @@ -0,0 +1,29 @@ +//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -shaderobj + +module test; + +import m; + +namespace ns1.ns2 +{ + int f() + { + // Should be able to access g() from m. + return g(); + } +} + +using ns1.ns2; + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer outputBuffer; + +[numthreads(4, 1, 1)] +void computeMain(int3 dispatchThreadID : SV_DispatchThreadID) +{ + int tid = dispatchThreadID.x; + int inVal = tid; + int outVal = f() + g() + ns1.ns2.g(); + outputBuffer[tid] = outVal; + // CHECK: 3 +} diff --git a/tests/language-feature/namespaces/namespace-include/a.slang b/tests/language-feature/namespaces/namespace-include/a.slang new file mode 100644 index 000000000..6660f590d --- /dev/null +++ b/tests/language-feature/namespaces/namespace-include/a.slang @@ -0,0 +1,28 @@ +//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -shaderobj + +module a; + +__include b; + +namespace ns1 +{ +namespace ns2 +{ + int l() { return k(); } // should be able to find k() in b. +} +} + +using ns1.ns2; + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer outputBuffer; + +[numthreads(4, 1, 1)] +void computeMain(int3 dispatchThreadID: SV_DispatchThreadID) +{ + int tid = dispatchThreadID.x; + int inVal = tid; + int outVal = k() + l() + ns1.ns2.f(); + outputBuffer[tid] = outVal; + // CHECK: 7 +} diff --git a/tests/language-feature/namespaces/namespace-include/b.slang b/tests/language-feature/namespaces/namespace-include/b.slang new file mode 100644 index 000000000..95f8b388a --- /dev/null +++ b/tests/language-feature/namespaces/namespace-include/b.slang @@ -0,0 +1,11 @@ +implementing a; + +import m; + +namespace ns1 +{ +namespace ns2 +{ + int k() { return f() + g(); } // should be able to find ns1::ns2::f in m. +} +} diff --git a/tests/language-feature/namespaces/namespace-include/m.slang b/tests/language-feature/namespaces/namespace-include/m.slang new file mode 100644 index 000000000..4eb3db527 --- /dev/null +++ b/tests/language-feature/namespaces/namespace-include/m.slang @@ -0,0 +1,11 @@ +module m; + +__include m2; + +namespace ns1 +{ +namespace ns2 +{ + public int f() { return 1; } +} +} diff --git a/tests/language-feature/namespaces/namespace-include/m2.slang b/tests/language-feature/namespaces/namespace-include/m2.slang new file mode 100644 index 000000000..71a9be85a --- /dev/null +++ b/tests/language-feature/namespaces/namespace-include/m2.slang @@ -0,0 +1,9 @@ +implementing m; + +namespace ns1 +{ +namespace ns2 +{ + public int g() { return 2; } +} +} diff --git a/tests/language-feature/namespaces/namespace-using/a.slang b/tests/language-feature/namespaces/namespace-using/a.slang new file mode 100644 index 000000000..25c606c6e --- /dev/null +++ b/tests/language-feature/namespaces/namespace-using/a.slang @@ -0,0 +1,10 @@ +module a; + +__include a1; + +namespace ns2 +{ + public int f() { return 1; } +} + +using ns; diff --git a/tests/language-feature/namespaces/namespace-using/a1.slang b/tests/language-feature/namespaces/namespace-using/a1.slang new file mode 100644 index 000000000..f417cd47c --- /dev/null +++ b/tests/language-feature/namespaces/namespace-using/a1.slang @@ -0,0 +1,6 @@ +implementing a; + +namespace ns +{ + using ns2; +} diff --git a/tests/language-feature/namespaces/namespace-using/b.slang b/tests/language-feature/namespaces/namespace-using/b.slang new file mode 100644 index 000000000..3e5816662 --- /dev/null +++ b/tests/language-feature/namespaces/namespace-using/b.slang @@ -0,0 +1,18 @@ +//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -shaderobj + +module b; + +import a; + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer outputBuffer; + +[numthreads(4, 1, 1)] +void computeMain(int3 dispatchThreadID: SV_DispatchThreadID) +{ + int tid = dispatchThreadID.x; + int inVal = tid; + int outVal = f() + ns.f(); + outputBuffer[tid] = outVal; + // CHECK: 2 +} -- cgit v1.2.3