Skip to content

Commit 3f3f674

Browse files
committed
Feature: CPPMangler - make it real
1 parent b8f11f1 commit 3f3f674

2 files changed

Lines changed: 20 additions & 5 deletions

File tree

src/backend/llvm/cpp.mangler.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,21 @@ import * as ts from 'typescript';
33

44
export class CPPMangler {
55
static getFunctionName(name: string, parameters: ts.NodeArray<ts.ParameterDeclaration>): string {
6-
if (name === 'puts') {
7-
return name;
8-
}
6+
return '_Z' + name.length + name + parameters.map(
7+
(parameter) => {
8+
if (parameter.type) {
9+
switch (parameter.type.kind) {
10+
case ts.SyntaxKind.NumberKeyword:
11+
return 'd';
12+
default:
13+
throw new Error(
14+
`Unsupported mangling parameter type: ${parameter.type.kind}`
15+
);
16+
}
17+
}
918

10-
return '_Z13number2stringd';
19+
throw new Error('Unsupported mangling without type');
20+
}
21+
);
1122
}
1223
}

src/backend/llvm/index.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,11 @@ export function generateModuleFromProgram(program: ts.Program): llvm.Module {
324324
llvm.Function.create(
325325
number2stringFnType,
326326
llvm.LinkageTypes.ExternalLinkage,
327-
CPPMangler.getFunctionName("number2string", <any>[]),
327+
CPPMangler.getFunctionName("number2string", <any>[
328+
{
329+
type: { kind: ts.SyntaxKind.NumberKeyword }
330+
}
331+
]),
328332
ctx.llvmModule
329333
);
330334

0 commit comments

Comments
 (0)