Skip to content

Commit d65fd53

Browse files
committed
Feature(compiler): CPPMangler - support fn/method without parameters
1 parent 0a3c92e commit d65fd53

1 file changed

Lines changed: 15 additions & 26 deletions

File tree

src/backend/llvm/cpp.mangler.ts

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11

22
import * 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

Comments
 (0)