Skip to content

Commit f6638d6

Browse files
committed
Feature: Support more math operators
1 parent d28f30c commit f6638d6

3 files changed

Lines changed: 33 additions & 5 deletions

File tree

src/Backend/LLVM/index.ts

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,14 +98,42 @@ function buildFromBinaryExpression(
9898
builder: llvm.IRBuilder
9999
): llvm.Value {
100100
switch (expr.operator) {
101-
case '+':
101+
case '+': {
102102
const left = buildFromExpression(expr.left, ctx, builder);
103103
const right = buildFromExpression(expr.right, ctx, builder);
104104

105105
return builder.createFAdd(
106106
loadIfNeeded(left, builder, ctx),
107107
loadIfNeeded(right, builder, ctx)
108108
);
109+
}
110+
case '-': {
111+
const left = buildFromExpression(expr.left, ctx, builder);
112+
const right = buildFromExpression(expr.right, ctx, builder);
113+
114+
return builder.createFSub(
115+
loadIfNeeded(left, builder, ctx),
116+
loadIfNeeded(right, builder, ctx)
117+
);
118+
}
119+
case '*': {
120+
const left = buildFromExpression(expr.left, ctx, builder);
121+
const right = buildFromExpression(expr.right, ctx, builder);
122+
123+
return builder.createFMul(
124+
loadIfNeeded(left, builder, ctx),
125+
loadIfNeeded(right, builder, ctx)
126+
);
127+
}
128+
case '/': {
129+
const left = buildFromExpression(expr.left, ctx, builder);
130+
const right = buildFromExpression(expr.right, ctx, builder);
131+
132+
return builder.createFDiv(
133+
loadIfNeeded(left, builder, ctx),
134+
loadIfNeeded(right, builder, ctx)
135+
);
136+
}
109137
default:
110138
throw new Error(
111139
`Unsupported BinaryExpression.operator: "${expr.type}"`

src/Frontend/TypeScript/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ import {parse} from '@babel/parser'
33
const example = `
44
{
55
function doMath(): number {
6-
const a = 1.2;
7-
const b = 2.5;
6+
const a = 5.5;
7+
const b = 14.5;
88
9-
return a + b;
9+
return ((a + b) * 50) / 10;
1010
}
1111
1212
doMath();

src/cli.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ llvm.initializeAllAsmPrinters();
1515

1616
const llvmModule = generateModuleFromFile(ast);
1717

18-
// llvm.verifyModule(llvmModule);
18+
llvm.verifyModule(llvmModule);
1919

2020
console.log(llvmModule.print());
2121

0 commit comments

Comments
 (0)