Skip to content

Commit abc86c8

Browse files
committed
Feature(compiler): Support BinaryExpression - equals
1 parent b1160c5 commit abc86c8

4 files changed

Lines changed: 40 additions & 2 deletions

File tree

src/backend/llvm/code-generation/binary-expression.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,18 @@ export class BinaryExpressionCodeGenerator implements NodeGenerateInterface<ts.B
8989
)
9090
);
9191
}
92+
// a == b
93+
case ts.SyntaxKind.EqualsEqualsToken: {
94+
const left = buildFromExpression(node.left, ctx, builder);
95+
const right = buildFromExpression(node.right, ctx, builder);
96+
97+
return new Primitive(
98+
builder.createFCmpOEQ(
99+
loadIfNeeded(left, builder),
100+
loadIfNeeded(right, builder)
101+
)
102+
);
103+
}
92104
// a ^ b
93105
case ts.SyntaxKind.CaretEqualsToken:
94106
case ts.SyntaxKind.CaretToken: {
@@ -212,4 +224,4 @@ export class BinaryExpressionCodeGenerator implements NodeGenerateInterface<ts.B
212224
);
213225
}
214226
}
215-
}
227+
}

src/backend/llvm/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ export function passFunctionDeclaration(parent: ts.FunctionDeclaration, ctx: Con
7575
);
7676
let fn = llvm.Function.create(fnType, llvm.LinkageTypes.ExternalLinkage, <string>parent.name.escapedText, ctx.llvmModule);
7777

78-
7978
let block = llvm.BasicBlock.create(ctx.llvmContext, 'Entry', fn);
8079
let irBuilder = new llvm.IRBuilder(block);
8180

tests/snapshots/math/binary-expression.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
11

22
{
3+
function equalTwoNumbers(left: number, right: number): void {
4+
console_log("equalTwoNumbers");
5+
console_log(left);
6+
console_log(right);
7+
8+
if (left == right) {
9+
console_log("true");
10+
} else {
11+
console_log("false");
12+
}
13+
14+
console_log("");
15+
}
16+
317
function compareNumberLeftLessRight(left: number, right: number): void {
418
console_log("compareNumberLeftLessRight");
519
console_log(left);
@@ -28,6 +42,9 @@
2842
console_log("");
2943
}
3044

45+
equalTwoNumbers(1, 1);
46+
equalTwoNumbers(1, 0);
47+
3148
compareNumberLeftLessRight(1, 100);
3249
compareNumberLeftLessRight(101, 100);
3350

tests/snapshots/math/binary-expression.ts.stdout

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
equalTwoNumbers
2+
1.000000
3+
1.000000
4+
true
5+
6+
equalTwoNumbers
7+
1.000000
8+
0.000000
9+
false
10+
111
compareNumberLeftLessRight
212
1.000000
313
100.000000

0 commit comments

Comments
 (0)