import parseutils
template procName*: string =
when declared(NimMainModule):
echo "sdf"
when not declaredInScope(internalCProcName):
var internalCProcName {.exportc:"__the_name_should_not_be_used", inject.}: cstring
{.emit: "__the_name_should_not_be_used = __func__;".}
var realProcNameButShouldnotBeUsed {.inject.}: string
discard parseUntil($internalCProcName, realProcNameButShouldnotBeUsed, "__")
realProcNameButShouldnotBeUsed
echo procname()
It got crashed. https://play.nim-lang.org/#ix=2rr
ccache\@mtest.nim.c:76:33: error: initializer element is not computable at load time
__the_name_should_not_be_used = __func__;
^~~~~~~~
ccache\@mtest.nim.c:101:24: error: conflicting types for '__the_name_should_not_be_used'
N_LIB_PRIVATE NCSTRING __the_name_should_not_be_used;
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ccache\@mtest.nim.c:76:1: note: previous definition of '__the_name_should_not_be_used' was here
__the_name_should_not_be_used = __func__;
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
It generates C code like:
__the_name_should_not_be_used = __func__;
.........................................................................................
/* section: NIM_merge_VARS */
N_LIB_PRIVATE NCSTRING __the_name_should_not_be_used;
N_LIB_PRIVATE NimStringDesc* realProcNameButShouldnotBeUsed__Ipp9c7O8sXEIShSL2Z09bqPw;
I need something like this:
/* section: NIM_merge_VARS */
N_LIB_PRIVATE NCSTRING __the_name_should_not_be_used;
N_LIB_PRIVATE NimStringDesc* realProcNameButShouldnotBeUsed__Ipp9c7O8sXEIShSL2Z09bqPw;
......................................................................................
__the_name_should_not_be_used = __func__;
Examples in https://github.com/nim-lang/Nim/issues/8212
Can I achieve that? Any suggestion? Thanks in advance.