typescript-to-lua
Advanced tools
Comparing version 0.4.0 to 0.5.0
@@ -146,2 +146,3 @@ "use strict"; | ||
var configPath; | ||
/* istanbul ignore else: Testing else part is not really possible via automated tests */ | ||
if (path.isAbsolute(commandLine.options.project)) { | ||
@@ -151,2 +152,3 @@ configPath = commandLine.options.project; | ||
else { | ||
// TODO check if commandLine.options.project can even contain non absolute paths | ||
configPath = path.join(process.cwd(), commandLine.options.project); | ||
@@ -153,0 +155,0 @@ } |
@@ -14,2 +14,3 @@ "use strict"; | ||
var Transpiler_51_1 = require("./Transpiler.51"); | ||
var ts = require("typescript"); | ||
var LuaTranspiler52 = /** @class */ (function (_super) { | ||
@@ -20,2 +21,3 @@ __extends(LuaTranspiler52, _super); | ||
} | ||
/** @override */ | ||
LuaTranspiler52.prototype.transpileLoopBody = function (node) { | ||
@@ -32,5 +34,30 @@ this.loopStack.push(this.genVarCounter); | ||
}; | ||
/** @override */ | ||
LuaTranspiler52.prototype.transpileContinue = function (node) { | ||
return this.indent + ("goto __continue" + this.loopStack[this.loopStack.length - 1] + "\n"); | ||
}; | ||
/** @override */ | ||
LuaTranspiler52.prototype.transpileUnaryBitOperation = function (node, operand) { | ||
switch (node.operator) { | ||
case ts.SyntaxKind.TildeToken: | ||
return "bit32.bnot(" + operand + ")"; | ||
} | ||
}; | ||
/** @override */ | ||
LuaTranspiler52.prototype.transpileBitOperation = function (node, lhs, rhs) { | ||
switch (node.operatorToken.kind) { | ||
case ts.SyntaxKind.AmpersandToken: | ||
return "bit32.band(" + lhs + "," + rhs + ")"; | ||
case ts.SyntaxKind.BarToken: | ||
return "bit32.bor(" + lhs + "," + rhs + ")"; | ||
case ts.SyntaxKind.CaretToken: | ||
return "bit32.bxor(" + lhs + "," + rhs + ")"; | ||
case ts.SyntaxKind.LessThanLessThanToken: | ||
return "bit32.lshift(" + lhs + "," + rhs + ")"; | ||
case ts.SyntaxKind.GreaterThanGreaterThanToken: | ||
return "bit32.rshift(" + lhs + "," + rhs + ")"; | ||
case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken: | ||
return "bit32.arshift(" + lhs + "," + rhs + ")"; | ||
} | ||
}; | ||
return LuaTranspiler52; | ||
@@ -37,0 +64,0 @@ }(Transpiler_51_1.LuaTranspiler51)); |
@@ -14,3 +14,2 @@ "use strict"; | ||
var Transpiler_1 = require("../Transpiler"); | ||
var TSHelper_1 = require("../TSHelper"); | ||
var Transpiler_52_1 = require("./Transpiler.52"); | ||
@@ -23,38 +22,27 @@ var ts = require("typescript"); | ||
} | ||
/** @override */ | ||
LuaTranspiler53.prototype.transpileUnaryBitOperation = function (node, operand) { | ||
switch (node.operator) { | ||
case ts.SyntaxKind.TildeToken: | ||
return "~" + operand; | ||
} | ||
}; | ||
/** @override */ | ||
LuaTranspiler53.prototype.transpileBitOperation = function (node, lhs, rhs) { | ||
switch (node.operatorToken.kind) { | ||
case ts.SyntaxKind.AmpersandToken: | ||
return lhs + "&" + rhs; | ||
case ts.SyntaxKind.AmpersandEqualsToken: | ||
if (TSHelper_1.TSHelper.hasSetAccessor(node.left, this.checker)) { | ||
return this.transpileSetAccessor(node.left, lhs + "&" + rhs); | ||
} | ||
return lhs + "=" + lhs + "&" + rhs; | ||
return lhs + " & " + rhs; | ||
case ts.SyntaxKind.BarToken: | ||
return lhs + "|" + rhs; | ||
case ts.SyntaxKind.BarEqualsToken: | ||
if (TSHelper_1.TSHelper.hasSetAccessor(node.left, this.checker)) { | ||
return this.transpileSetAccessor(node.left, lhs + "|" + rhs); | ||
} | ||
return lhs + "=" + lhs + "|" + rhs; | ||
return lhs + " | " + rhs; | ||
case ts.SyntaxKind.CaretToken: | ||
return lhs + " ~ " + rhs; | ||
case ts.SyntaxKind.LessThanLessThanToken: | ||
return lhs + "<<" + rhs; | ||
case ts.SyntaxKind.LessThanLessThanEqualsToken: | ||
if (TSHelper_1.TSHelper.hasSetAccessor(node.left, this.checker)) { | ||
return this.transpileSetAccessor(node.left, lhs + "<<" + rhs); | ||
} | ||
return lhs + "=" + lhs + "<<" + rhs; | ||
return lhs + " << " + rhs; | ||
case ts.SyntaxKind.GreaterThanGreaterThanToken: | ||
return lhs + ">>" + rhs; | ||
case ts.SyntaxKind.GreaterThanGreaterThanEqualsToken: | ||
if (TSHelper_1.TSHelper.hasSetAccessor(node.left, this.checker)) { | ||
return this.transpileSetAccessor(node.left, lhs + ">>" + rhs); | ||
} | ||
return lhs + "=" + lhs + ">>" + rhs; | ||
return lhs + " >> " + rhs; | ||
case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken: | ||
throw new Transpiler_1.TranspileError("Bitwise operator >>> not supported in Lua 5.3", node); | ||
case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken: | ||
throw new Transpiler_1.TranspileError("Bitwise operator >>> not supported in Lua 5.3", node); | ||
} | ||
}; | ||
/** @override */ | ||
LuaTranspiler53.prototype.getValidStringProperties = function () { | ||
@@ -61,0 +49,0 @@ return { |
@@ -13,3 +13,2 @@ "use strict"; | ||
exports.__esModule = true; | ||
var TSHelper_1 = require("../TSHelper"); | ||
var Transpiler_52_1 = require("./Transpiler.52"); | ||
@@ -22,2 +21,10 @@ var ts = require("typescript"); | ||
} | ||
/** @override */ | ||
LuaTranspilerJIT.prototype.transpileUnaryBitOperation = function (node, operand) { | ||
switch (node.operator) { | ||
case ts.SyntaxKind.TildeToken: | ||
return "bit.bnot(" + operand + ")"; | ||
} | ||
}; | ||
/** @override */ | ||
LuaTranspilerJIT.prototype.transpileBitOperation = function (node, lhs, rhs) { | ||
@@ -27,35 +34,12 @@ switch (node.operatorToken.kind) { | ||
return "bit.band(" + lhs + "," + rhs + ")"; | ||
case ts.SyntaxKind.AmpersandEqualsToken: | ||
if (TSHelper_1.TSHelper.hasSetAccessor(node.left, this.checker)) { | ||
return this.transpileSetAccessor(node.left, "bit.band(" + lhs + "," + rhs + ")"); | ||
} | ||
return lhs + "=bit.band(" + lhs + "," + rhs + ")"; | ||
case ts.SyntaxKind.BarToken: | ||
return "bit.bor(" + lhs + "," + rhs + ")"; | ||
case ts.SyntaxKind.BarEqualsToken: | ||
if (TSHelper_1.TSHelper.hasSetAccessor(node.left, this.checker)) { | ||
return this.transpileSetAccessor(node.left, "bit.bor(" + lhs + "," + rhs + ")"); | ||
} | ||
return lhs + "=bit.bor(" + lhs + "," + rhs + ")"; | ||
case ts.SyntaxKind.CaretToken: | ||
return "bit.bxor(" + lhs + "," + rhs + ")"; | ||
case ts.SyntaxKind.LessThanLessThanToken: | ||
return "bit.lshift(" + lhs + "," + rhs + ")"; | ||
case ts.SyntaxKind.LessThanLessThanEqualsToken: | ||
if (TSHelper_1.TSHelper.hasSetAccessor(node.left, this.checker)) { | ||
return this.transpileSetAccessor(node.left, "bit.lshift(" + lhs + "," + rhs + ")"); | ||
} | ||
return lhs + "=bit.lshift(" + lhs + "," + rhs + ")"; | ||
case ts.SyntaxKind.GreaterThanGreaterThanToken: | ||
return "bit.rshift(" + lhs + "," + rhs + ")"; | ||
case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken: | ||
return "bit.arshift(" + lhs + "," + rhs + ")"; | ||
case ts.SyntaxKind.GreaterThanGreaterThanEqualsToken: | ||
if (TSHelper_1.TSHelper.hasSetAccessor(node.left, this.checker)) { | ||
return this.transpileSetAccessor(node.left, "bit.arshift(" + lhs + "," + rhs + ")"); | ||
} | ||
return lhs + "=bit.arshift(" + lhs + "," + rhs + ")"; | ||
case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken: | ||
return "bit.rshift(" + lhs + "," + rhs + ")"; | ||
case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken: | ||
if (TSHelper_1.TSHelper.hasSetAccessor(node.left, this.checker)) { | ||
return this.transpileSetAccessor(node.left, "bit.rshift(" + lhs + "," + rhs + ")"); | ||
} | ||
return lhs + "=bit.rshift(" + lhs + "," + rhs + ")"; | ||
} | ||
@@ -62,0 +46,0 @@ }; |
@@ -84,15 +84,22 @@ "use strict"; | ||
}; | ||
LuaTranspiler.prototype.getAbsouluteImportPath = function (relativePath) { | ||
if (relativePath.charAt(0) !== "." && this.options.baseUrl) { | ||
return path.resolve(this.options.baseUrl, relativePath); | ||
} | ||
return path.resolve(path.dirname(this.sourceFile.fileName), relativePath); | ||
}; | ||
LuaTranspiler.prototype.getImportPath = function (relativePath) { | ||
// Calculate absolute path to import | ||
var absolutePathToImport = path.resolve(path.dirname(this.sourceFile.fileName), relativePath); | ||
var absolutePathToImport = this.getAbsouluteImportPath(relativePath); | ||
if (this.options.rootDir) { | ||
// Calculate path realtive to project root | ||
// and replace path.sep with dots (lua doesn't know paths) | ||
var relativePathToRoot = absolutePathToImport.replace(this.options.rootDir, "") | ||
.replace(new RegExp("\\\\|\/", "g"), ".") | ||
.slice(1); | ||
var relativePathToRoot = this.pathToLuaRequirePath(absolutePathToImport.replace(this.options.rootDir, "").slice(1)); | ||
return "\"" + relativePathToRoot + "\""; | ||
} | ||
return "\"" + relativePath.replace(new RegExp("\\\\|\/", "g"), ".") + "\""; | ||
return "\"" + this.pathToLuaRequirePath(relativePath) + "\""; | ||
}; | ||
LuaTranspiler.prototype.pathToLuaRequirePath = function (filePath) { | ||
return filePath.replace(new RegExp("\\\\|\/", "g"), "."); | ||
}; | ||
// Transpile a source file | ||
@@ -577,3 +584,12 @@ LuaTranspiler.prototype.transpileSourceFile = function () { | ||
var rhs = this.transpileExpression(node.right, true); | ||
// Rewrite some non-existant binary operators | ||
// Check if this is an assignment token, then handle accordingly | ||
var _a = TSHelper_1.TSHelper.isBinaryAssignmentToken(node.operatorToken.kind), isAssignment = _a[0], operator = _a[1]; | ||
if (isAssignment) { | ||
var valueExpression = ts.createBinary(node.left, operator, node.right); | ||
var value = this.transpileBinaryExpression(valueExpression); | ||
if (TSHelper_1.TSHelper.hasSetAccessor(node.left, this.checker)) { | ||
return this.transpileSetAccessor(node.left, value); | ||
} | ||
return lhs + " = " + value; | ||
} | ||
var result = ""; | ||
@@ -583,11 +599,7 @@ // Transpile Bitops | ||
case ts.SyntaxKind.AmpersandToken: | ||
case ts.SyntaxKind.AmpersandEqualsToken: | ||
case ts.SyntaxKind.BarToken: | ||
case ts.SyntaxKind.BarEqualsToken: | ||
case ts.SyntaxKind.CaretToken: | ||
case ts.SyntaxKind.LessThanLessThanToken: | ||
case ts.SyntaxKind.LessThanLessThanEqualsToken: | ||
case ts.SyntaxKind.GreaterThanGreaterThanToken: | ||
case ts.SyntaxKind.GreaterThanGreaterThanEqualsToken: | ||
case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken: | ||
case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken: | ||
result = this.transpileBitOperation(node, lhs, rhs); | ||
@@ -598,26 +610,2 @@ } | ||
switch (node.operatorToken.kind) { | ||
case ts.SyntaxKind.PlusEqualsToken: | ||
if (TSHelper_1.TSHelper.hasSetAccessor(node.left, this.checker)) { | ||
return this.transpileSetAccessor(node.left, lhs + "+" + rhs); | ||
} | ||
result = lhs + "=" + lhs + "+" + rhs; | ||
break; | ||
case ts.SyntaxKind.MinusEqualsToken: | ||
if (TSHelper_1.TSHelper.hasSetAccessor(node.left, this.checker)) { | ||
return this.transpileSetAccessor(node.left, lhs + "-" + rhs); | ||
} | ||
result = lhs + "=" + lhs + "-" + rhs; | ||
break; | ||
case ts.SyntaxKind.AsteriskEqualsToken: | ||
if (TSHelper_1.TSHelper.hasSetAccessor(node.left, this.checker)) { | ||
return this.transpileSetAccessor(node.left, lhs + "*" + rhs); | ||
} | ||
result = lhs + "=" + lhs + "*" + rhs; | ||
break; | ||
case ts.SyntaxKind.SlashEqualsToken: | ||
if (TSHelper_1.TSHelper.hasSetAccessor(node.left, this.checker)) { | ||
return this.transpileSetAccessor(node.left, lhs + "/" + rhs); | ||
} | ||
result = lhs + "=" + lhs + "/" + rhs; | ||
break; | ||
case ts.SyntaxKind.AmpersandAmpersandToken: | ||
@@ -645,2 +633,5 @@ result = lhs + " and " + rhs; | ||
break; | ||
case ts.SyntaxKind.AsteriskAsteriskToken: | ||
result = lhs + "^" + rhs; | ||
break; | ||
case ts.SyntaxKind.SlashToken: | ||
@@ -668,3 +659,3 @@ result = lhs + "/" + rhs; | ||
} | ||
result = lhs + "=" + rhs; | ||
result = lhs + " = " + rhs; | ||
break; | ||
@@ -697,4 +688,7 @@ case ts.SyntaxKind.EqualsEqualsToken: | ||
}; | ||
LuaTranspiler.prototype.transpileUnaryBitOperation = function (node, operand) { | ||
throw new TranspileError("Bit operations are not supported in Lua " + this.options.target, node); | ||
}; | ||
LuaTranspiler.prototype.transpileBitOperation = function (node, lhs, rhs) { | ||
throw new TranspileError("Bit Oeprations are not supported in Lua " + this.options.target, node); | ||
throw new TranspileError("Bit operations are not supported in Lua " + this.options.target, node); | ||
}; | ||
@@ -736,2 +730,4 @@ LuaTranspiler.prototype.transpileTemplateExpression = function (node) { | ||
switch (node.operator) { | ||
case ts.SyntaxKind.TildeToken: | ||
return this.transpileUnaryBitOperation(node, operand); | ||
case ts.SyntaxKind.PlusPlusToken: | ||
@@ -738,0 +734,0 @@ return operand + "=" + operand + "+1"; |
@@ -53,6 +53,2 @@ "use strict"; | ||
}; | ||
TSHelper.isTupleType = function (type, checker) { | ||
var typeNode = checker.typeToTypeNode(type); | ||
return typeNode && typeNode.kind === ts.SyntaxKind.TupleType; | ||
}; | ||
TSHelper.isCompileMembersOnlyEnum = function (type, checker) { | ||
@@ -139,2 +135,31 @@ return type.symbol | ||
}; | ||
TSHelper.isBinaryAssignmentToken = function (token) { | ||
switch (token) { | ||
case ts.SyntaxKind.BarEqualsToken: | ||
return [true, ts.SyntaxKind.BarToken]; | ||
case ts.SyntaxKind.PlusEqualsToken: | ||
return [true, ts.SyntaxKind.PlusToken]; | ||
case ts.SyntaxKind.CaretEqualsToken: | ||
return [true, ts.SyntaxKind.CaretToken]; | ||
case ts.SyntaxKind.MinusEqualsToken: | ||
return [true, ts.SyntaxKind.MinusToken]; | ||
case ts.SyntaxKind.SlashEqualsToken: | ||
return [true, ts.SyntaxKind.SlashToken]; | ||
case ts.SyntaxKind.PercentEqualsToken: | ||
return [true, ts.SyntaxKind.PercentToken]; | ||
case ts.SyntaxKind.AsteriskEqualsToken: | ||
return [true, ts.SyntaxKind.AsteriskToken]; | ||
case ts.SyntaxKind.AmpersandEqualsToken: | ||
return [true, ts.SyntaxKind.AmpersandToken]; | ||
case ts.SyntaxKind.AsteriskAsteriskEqualsToken: | ||
return [true, ts.SyntaxKind.AsteriskAsteriskToken]; | ||
case ts.SyntaxKind.LessThanLessThanEqualsToken: | ||
return [true, ts.SyntaxKind.LessThanLessThanToken]; | ||
case ts.SyntaxKind.GreaterThanGreaterThanEqualsToken: | ||
return [true, ts.SyntaxKind.GreaterThanGreaterThanToken]; | ||
case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken: | ||
return [true, ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken]; | ||
} | ||
return [false, null]; | ||
}; | ||
return TSHelper; | ||
@@ -141,0 +166,0 @@ }()); |
{ | ||
"name": "typescript-to-lua", | ||
"license": "MIT", | ||
"version": "0.4.0", | ||
"version": "0.5.0", | ||
"repository": "https://github.com/Perryvw/TypescriptToLua", | ||
"keywords": [ | ||
"typescript", | ||
"lua", | ||
"tstl", | ||
"transpiler" | ||
], | ||
"scripts": { | ||
@@ -20,2 +26,11 @@ "build": "tsc -p tsconfig.json", | ||
}, | ||
"nyc": { | ||
"all": true, | ||
"extension": [ | ||
".ts" | ||
], | ||
"include": [ | ||
"src/**/*" | ||
] | ||
}, | ||
"engines": { | ||
@@ -25,16 +40,17 @@ "node": ">=8.5.0" | ||
"dependencies": { | ||
"typescript": "^2.8.3", | ||
"typescript": "^2.9.2", | ||
"yargs": "^11.1.0" | ||
}, | ||
"devDependencies": { | ||
"@types/node": "^9.6.7", | ||
"@types/node": "^9.6.23", | ||
"@types/yargs": "^11.0.0", | ||
"alsatian": "^2.2.1", | ||
"codecov": "^3.0.1", | ||
"codecov": "3.0.2", | ||
"deep-equal": "^1.0.1", | ||
"fengari": "^0.1.2", | ||
"nyc": "^11.7.1", | ||
"nyc": "^11.9.0", | ||
"ts-node": "^7.0.0", | ||
"tslint": "^5.9.1" | ||
"tslint": "^5.10.0", | ||
"tslint-override": "^0.1.2" | ||
} | ||
} |
@@ -14,2 +14,4 @@ # TypescriptToLua | ||
Changelog can be found in [CHANGELOG.md](https://github.com/Perryvw/TypescriptToLua/blob/master/CHANGELOG.md) | ||
## Usage Guide | ||
@@ -16,0 +18,0 @@ |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
101980
13
1981
63
10
Updatedtypescript@^2.9.2