Skip to content
This repository was archived by the owner on Dec 8, 2023. It is now read-only.

Commit 85397cc

Browse files
committed
Add Exponentiation support
1 parent ed9cd7e commit 85397cc

File tree

3 files changed

+55
-50
lines changed

3 files changed

+55
-50
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ TypeScriptToLua plugin that performs [constant folding](https://en.wikipedia.org
44

55
- Addition (+)
66
- Subtraction (-)
7-
- Multiplication (*)
7+
- Multiplication (\*)
88
- Division (/)
99
- Modulo (%)
10+
- Exponentiation (\*\*)
1011

1112
## Example
1213

dist/tstl-unroller.cjs

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
1-
"use strict";
2-
Object.defineProperty(exports, "__esModule", { value: true });
3-
const ts = require("typescript");
4-
const tstl = require("typescript-to-lua");
1+
'use strict';
2+
Object.defineProperty(exports, '__esModule', { value: true });
3+
const ts = require('typescript');
4+
const tstl = require('typescript-to-lua');
55
const constantUnroller = {
6-
visitors: {
7-
[ts.SyntaxKind.BinaryExpression]: (node, context) => {
8-
const operator = node.operatorToken.kind;
9-
const left = context.transformExpression(node.left);
10-
const right = context.transformExpression(node.right);
11-
if (tstl.isNumericLiteral(left) && tstl.isNumericLiteral(right)) {
12-
switch (operator) {
13-
case ts.SyntaxKind.AsteriskToken:
14-
return tstl.createNumericLiteral(left.value * right.value);
15-
case ts.SyntaxKind.PlusToken:
16-
return tstl.createNumericLiteral(left.value + right.value);
17-
case ts.SyntaxKind.MinusToken:
18-
return tstl.createNumericLiteral(left.value - right.value);
19-
case ts.SyntaxKind.SlashToken:
20-
return tstl.createNumericLiteral(left.value / right.value);
21-
case ts.SyntaxKind.PercentToken:
22-
return tstl.createNumericLiteral(left.value % right.value);
23-
}
24-
}
25-
return context.superTransformExpression(node);
26-
},
27-
},
6+
visitors: {
7+
[ts.SyntaxKind.BinaryExpression]: (node, context) => {
8+
const operator = node.operatorToken.kind;
9+
const left = context.transformExpression(node.left);
10+
const right = context.transformExpression(node.right);
11+
if (tstl.isNumericLiteral(left) && tstl.isNumericLiteral(right)) {
12+
switch (operator) {
13+
case ts.SyntaxKind.AsteriskToken:
14+
return tstl.createNumericLiteral(left.value * right.value);
15+
case ts.SyntaxKind.PlusToken:
16+
return tstl.createNumericLiteral(left.value + right.value);
17+
case ts.SyntaxKind.MinusToken:
18+
return tstl.createNumericLiteral(left.value - right.value);
19+
case ts.SyntaxKind.SlashToken:
20+
return tstl.createNumericLiteral(left.value / right.value);
21+
case ts.SyntaxKind.PercentToken:
22+
return tstl.createNumericLiteral(left.value % right.value);
23+
}
24+
}
25+
return context.superTransformExpression(node);
26+
},
27+
},
2828
};
2929
exports.default = constantUnroller;

tstl-unroller.ts

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,33 @@
1-
import * as ts from "typescript";
2-
import * as tstl from "typescript-to-lua";
1+
import * as ts from 'typescript';
2+
import * as tstl from 'typescript-to-lua';
33

44
const constantUnroller: tstl.Plugin = {
5-
visitors: {
6-
[ts.SyntaxKind.BinaryExpression]: (node, context) => {
7-
const operator = node.operatorToken.kind;
8-
const left = context.transformExpression(node.left);
9-
const right = context.transformExpression(node.right);
10-
if (tstl.isNumericLiteral(left) && tstl.isNumericLiteral(right)) {
11-
switch (operator) {
12-
case ts.SyntaxKind.AsteriskToken:
13-
return tstl.createNumericLiteral(left.value * right.value);
14-
case ts.SyntaxKind.PlusToken:
15-
return tstl.createNumericLiteral(left.value + right.value);
16-
case ts.SyntaxKind.MinusToken:
17-
return tstl.createNumericLiteral(left.value - right.value);
18-
case ts.SyntaxKind.SlashToken:
19-
return tstl.createNumericLiteral(left.value / right.value);
5+
visitors: {
6+
[ts.SyntaxKind.BinaryExpression]: (node, context) => {
7+
const operator = node.operatorToken.kind;
8+
const left = context.transformExpression(node.left);
9+
const right = context.transformExpression(node.right);
10+
11+
if (tstl.isNumericLiteral(left) && tstl.isNumericLiteral(right)) {
12+
switch (operator) {
13+
case ts.SyntaxKind.AsteriskToken:
14+
return tstl.createNumericLiteral(left.value * right.value);
15+
case ts.SyntaxKind.PlusToken:
16+
return tstl.createNumericLiteral(left.value + right.value);
17+
case ts.SyntaxKind.MinusToken:
18+
return tstl.createNumericLiteral(left.value - right.value);
19+
case ts.SyntaxKind.SlashToken:
20+
return tstl.createNumericLiteral(left.value / right.value);
2021
case ts.SyntaxKind.PercentToken:
21-
return tstl.createNumericLiteral(left.value % right.value);
22-
}
23-
}
24-
return context.superTransformExpression(node);
25-
},
26-
},
22+
return tstl.createNumericLiteral(left.value % right.value);
23+
case ts.SyntaxKind.AsteriskAsteriskToken:
24+
return tstl.createNumericLiteral(Math.pow(left.value, right.value));
25+
}
26+
}
27+
28+
return context.superTransformExpression(node);
29+
},
30+
},
2731
};
2832

2933
export default constantUnroller;

0 commit comments

Comments
 (0)