From 5eb835f0332868fd56ac14ce7560e0ae9cfafec9 Mon Sep 17 00:00:00 2001 From: David Siher <32305650+dsiher@users.noreply.github.com> Date: Thu, 3 Feb 2022 19:16:54 -0800 Subject: Fixed naming conflicts in heterogeneous-hello-world (#2114) * Fixed naming conflicts in heterogeneous-hello-world Added 3 new modifiers (`__unmangled`, `__exportDirectly`, `__externLib`) `__unmangled` causes mangleName() to return the normal name of the decl. `__exportDirectly` changes parent decl name concatenation behavior to use "::" instead of "." (for Name Hint) and emits the name hint when it exists, otherwise it emits the mangled name. `__externLib` stops Slang from emitting the corresponding struct. Also made necessary changes to heterogeneous-hello-world so that this new functionality is shown off. * Undo unintentional formatting changes Co-authored-by: Yong He --- source/slang/slang-mangle.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'source/slang/slang-mangle.cpp') diff --git a/source/slang/slang-mangle.cpp b/source/slang/slang-mangle.cpp index b0568994f..acb561531 100644 --- a/source/slang/slang-mangle.cpp +++ b/source/slang/slang-mangle.cpp @@ -453,12 +453,20 @@ namespace Slang // forward to something else? E.g., what if we // are asked to mangle the name of a `typedef`? + auto decl = declRef.getDecl(); + + // Handle `__unmangled` modifier by simply emitting + // the given name. + if (decl->hasModifier()) + { + emit(context, decl->getName()->text); + return; + } + // We will start with a unique prefix to avoid // clashes with user-defined symbols: emitRaw(context, "_S"); - auto decl = declRef.getDecl(); - // Next we will add a bit of info to register // the *kind* of declaration we are dealing with. // -- cgit v1.2.3