11
22import * as ts from 'typescript' ;
33
4- export class CPPMangler {
5- static getMethodName ( clazz : string , method : string , parameters : ts . NodeArray < ts . ParameterDeclaration > ) : string {
6- const name = clazz + '__' + method ;
7-
8- return '_Z' + name . length + name + parameters . map (
4+ function mangleParameters ( parameters : ts . NodeArray < ts . ParameterDeclaration > ) : string {
5+ if ( parameters . length > 0 ) {
6+ return parameters . map (
97 ( parameter ) => {
108 if ( parameter . type ) {
119 switch ( parameter . type . kind ) {
@@ -24,29 +22,20 @@ export class CPPMangler {
2422
2523 throw new Error ( 'Unsupported mangling without type' ) ;
2624 }
27- ) ;
25+ ) . join ( ) ;
2826 }
2927
30- static getFunctionName ( name : string , parameters : ts . NodeArray < ts . ParameterDeclaration > ) : string {
31- return '_Z' + name . length + name + parameters . map (
32- ( parameter ) => {
33- if ( parameter . type ) {
34- switch ( parameter . type . kind ) {
35- case ts . SyntaxKind . NumberKeyword :
36- return 'd' ;
37- case ts . SyntaxKind . StringKeyword :
38- return 'PKc' ;
39- case ts . SyntaxKind . BooleanKeyword :
40- return 'b' ;
41- default :
42- throw new Error (
43- `Unsupported mangling parameter type: ${ parameter . type . kind } `
44- ) ;
45- }
46- }
28+ return 'v' ;
29+ }
4730
48- throw new Error ( 'Unsupported mangling without type' ) ;
49- }
50- ) ;
31+ export class CPPMangler {
32+ static getMethodName ( clazz : string , method : string , parameters : ts . NodeArray < ts . ParameterDeclaration > ) : string {
33+ const name = clazz + '__' + method ;
34+
35+ return '_Z' + name . length + name + mangleParameters ( parameters ) ;
36+ }
37+
38+ static getFunctionName ( name : string , parameters : ts . NodeArray < ts . ParameterDeclaration > ) : string {
39+ return '_Z' + name . length + name + mangleParameters ( parameters ) ;
5140 }
5241}
0 commit comments