Skip to content

Commit 749bfa4

Browse files
committed
Feature(compiler): Support ++ operator
1 parent 3aaa66a commit 749bfa4

1 file changed

Lines changed: 30 additions & 0 deletions

File tree

src/backend/llvm/index.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,34 @@ function buildFromBinaryExpression(
333333
}
334334
}
335335

336+
function buildFromPostfixUnaryExpression(
337+
expr: ts.PostfixUnaryExpression,
338+
ctx: Context,
339+
builder: llvm.IRBuilder
340+
): llvm.Value {
341+
switch (expr.operator) {
342+
case ts.SyntaxKind.PlusPlusToken: {
343+
const left = buildFromExpression(expr.operand, ctx, builder);
344+
345+
const next = builder.createFAdd(
346+
loadIfNeeded(left, builder, ctx),
347+
llvm.ConstantFP.get(ctx.llvmContext, 1)
348+
);
349+
350+
return builder.createStore(
351+
next,
352+
left,
353+
false
354+
);
355+
}
356+
default:
357+
throw new UnsupportedError(
358+
expr,
359+
`Unsupported PostfixUnaryExpression.operator: "${expr.operator}"`
360+
);
361+
}
362+
}
363+
336364
function buildCalleFromCallExpression(
337365
expr: ts.CallExpression,
338366
ctx: Context,
@@ -464,6 +492,8 @@ function buildFromExpression(block: ts.Expression, ctx: Context, builder: llvm.I
464492
return buildFromFalseKeyword(<any>block, ctx, builder);
465493
case ts.SyntaxKind.BinaryExpression:
466494
return buildFromBinaryExpression(<any>block, ctx, builder);
495+
case ts.SyntaxKind.PostfixUnaryExpression:
496+
return buildFromPostfixUnaryExpression(<any>block, ctx, builder);
467497
case ts.SyntaxKind.CallExpression:
468498
return <any>buildFromCallExpression(<any>block, ctx, builder);
469499
case ts.SyntaxKind.ExpressionStatement:

0 commit comments

Comments
 (0)