diff --git a/src/core/demangle.d b/src/core/demangle.d index 22e7e402ac6..9d9628b3886 100644 --- a/src/core/demangle.d +++ b/src/core/demangle.d @@ -753,6 +753,9 @@ private struct Demangle parseType(); put( ')' ); return dst[beg .. len]; + case 'p': // extern(Pascal) function + pos--; // step back to 'N' + return parseTypeFunction( name ); default: error(); assert( 0 ); @@ -943,6 +946,11 @@ private struct Demangle popFront(); put( "extern (Windows) " ); break; + case 'N': + popFront(); + if( front != 'p' ) + error(); + goto case; case 'V': // Pascal popFront(); put( "extern (Pascal) " ); @@ -1873,8 +1881,9 @@ private template isExternCPP(FT) if (is(FT == function)) private template hasPlainMangling(FT) if (is(FT == function)) { enum c = FT.mangleof[0]; - // C || Pascal || Windows - enum hasPlainMangling = c == 'U' || c == 'V' || c == 'W'; + enum hasPlainMangling = c == 'U' // C + || c == 'V' || (c == 'N' && FT.mangleof[1] == 'p') // Pascal (temporarily support old and new mangling) + || c == 'W'; // Windows } unittest