typescript-to-lua
Advanced tools
Comparing version 0.0.12 to 0.0.13
@@ -134,5 +134,4 @@ #!/usr/bin/env node | ||
} | ||
var validLuaTargets = ['JIT', '5.3', '5.2', '5.1']; | ||
if (!validLuaTargets.some(function (val) { return val === argv.luaTarget; })) { | ||
console.error("Invalid lua target valid targets are: " + validLuaTargets.toString()); | ||
if (!Transpiler_1.LuaTranspiler.AvailableLuaTargets.some(function (val) { return val === argv.luaTarget; })) { | ||
console.error("Invalid lua target valid targets are: " + Transpiler_1.LuaTranspiler.AvailableLuaTargets.toString()); | ||
} | ||
@@ -139,0 +138,0 @@ // Remove tstl options otherwise ts will emit an error |
@@ -27,2 +27,7 @@ "use strict"; | ||
exports.TranspileError = TranspileError; | ||
var Target; | ||
(function (Target) { | ||
Target["Lua53"] = "5.3"; | ||
Target["LuaJIT"] = "JIT"; | ||
})(Target = exports.Target || (exports.Target = {})); | ||
var LuaTranspiler = /** @class */ (function () { | ||
@@ -464,62 +469,89 @@ function LuaTranspiler(checker, options, sourceFile) { | ||
var result = ""; | ||
switch (node.operatorToken.kind) { | ||
case ts.SyntaxKind.PlusEqualsToken: | ||
result = lhs + "=" + lhs + "+" + rhs; | ||
break; | ||
case ts.SyntaxKind.MinusEqualsToken: | ||
result = lhs + "=" + lhs + "-" + rhs; | ||
break; | ||
case ts.SyntaxKind.AsteriskEqualsToken: | ||
result = lhs + "=" + lhs + "*" + rhs; | ||
break; | ||
case ts.SyntaxKind.SlashEqualsToken: | ||
result = lhs + "=" + lhs + "/" + rhs; | ||
break; | ||
case ts.SyntaxKind.AmpersandAmpersandToken: | ||
result = lhs + " and " + rhs; | ||
break; | ||
case ts.SyntaxKind.BarBarToken: | ||
result = lhs + " or " + rhs; | ||
break; | ||
case ts.SyntaxKind.AmpersandToken: | ||
result = "bit.band(" + lhs + "," + rhs + ")"; | ||
break; | ||
case ts.SyntaxKind.AmpersandEqualsToken: | ||
result = lhs + "=bit.band(" + lhs + "," + rhs + ")"; | ||
break; | ||
case ts.SyntaxKind.BarToken: | ||
result = "bit.bor(" + lhs + "," + rhs + ")"; | ||
break; | ||
case ts.SyntaxKind.BarEqualsToken: | ||
result = lhs + "=bit.bor(" + lhs + "," + rhs + ")"; | ||
break; | ||
case ts.SyntaxKind.LessThanLessThanToken: | ||
result = "bit.lshift(" + lhs + "," + rhs + ")"; | ||
break; | ||
case ts.SyntaxKind.LessThanLessThanEqualsToken: | ||
result = lhs + "=bit.lshift(" + lhs + "," + rhs + ")"; | ||
break; | ||
case ts.SyntaxKind.GreaterThanGreaterThanToken: | ||
result = "bit.arshift(" + lhs + "," + rhs + ")"; | ||
break; | ||
case ts.SyntaxKind.GreaterThanGreaterThanEqualsToken: | ||
result = lhs + "=bit.arshift(" + lhs + "," + rhs + ")"; | ||
break; | ||
case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken: | ||
result = "bit.rshift(" + lhs + "," + rhs + ")"; | ||
break; | ||
case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken: | ||
result = lhs + "=bit.rshift(" + lhs + "," + rhs + ")"; | ||
break; | ||
case ts.SyntaxKind.PlusToken: | ||
// Replace string + with .. | ||
var typeLeft = this.checker.getTypeAtLocation(node.left); | ||
var typeRight = this.checker.getTypeAtLocation(node.right); | ||
if (typeLeft.flags & ts.TypeFlags.String || ts.isStringLiteral(node.left)) | ||
return lhs + ".." + rhs; | ||
if (typeRight.flags & ts.TypeFlags.String || ts.isStringLiteral(node.right)) | ||
return lhs + ".." + rhs; | ||
default: | ||
result = lhs + this.transpileOperator(node.operatorToken) + rhs; | ||
// Transpile Bitops | ||
if (this.options.luaTarget === Target.LuaJIT) { | ||
switch (node.operatorToken.kind) { | ||
case ts.SyntaxKind.AmpersandToken: | ||
result = "bit.band(" + lhs + "," + rhs + ")"; | ||
break; | ||
case ts.SyntaxKind.AmpersandEqualsToken: | ||
result = lhs + "=bit.band(" + lhs + "," + rhs + ")"; | ||
break; | ||
case ts.SyntaxKind.BarToken: | ||
result = "bit.bor(" + lhs + "," + rhs + ")"; | ||
break; | ||
case ts.SyntaxKind.BarEqualsToken: | ||
result = lhs + "=bit.bor(" + lhs + "," + rhs + ")"; | ||
break; | ||
case ts.SyntaxKind.LessThanLessThanToken: | ||
result = "bit.lshift(" + lhs + "," + rhs + ")"; | ||
break; | ||
case ts.SyntaxKind.LessThanLessThanEqualsToken: | ||
result = lhs + "=bit.lshift(" + lhs + "," + rhs + ")"; | ||
break; | ||
case ts.SyntaxKind.GreaterThanGreaterThanToken: | ||
result = "bit.arshift(" + lhs + "," + rhs + ")"; | ||
break; | ||
case ts.SyntaxKind.GreaterThanGreaterThanEqualsToken: | ||
result = lhs + "=bit.arshift(" + lhs + "," + rhs + ")"; | ||
break; | ||
case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken: | ||
result = "bit.rshift(" + lhs + "," + rhs + ")"; | ||
break; | ||
case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken: | ||
result = lhs + "=bit.rshift(" + lhs + "," + rhs + ")"; | ||
break; | ||
} | ||
} | ||
else { | ||
switch (node.operatorToken.kind) { | ||
case ts.SyntaxKind.AmpersandEqualsToken: | ||
result = lhs + "=" + lhs + "&" + rhs; | ||
break; | ||
case ts.SyntaxKind.BarEqualsToken: | ||
result = lhs + "=" + lhs + "|" + rhs; | ||
break; | ||
case ts.SyntaxKind.LessThanLessThanEqualsToken: | ||
result = lhs + "=" + lhs + "<<" + rhs; | ||
break; | ||
case ts.SyntaxKind.GreaterThanGreaterThanEqualsToken: | ||
result = lhs + "=" + lhs + ">>" + rhs; | ||
break; | ||
case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken: | ||
result = lhs + "=" + lhs + ">>>" + rhs; | ||
break; | ||
} | ||
} | ||
// Transpile operators | ||
if (result === "") { | ||
switch (node.operatorToken.kind) { | ||
case ts.SyntaxKind.PlusEqualsToken: | ||
result = lhs + "=" + lhs + "+" + rhs; | ||
break; | ||
case ts.SyntaxKind.MinusEqualsToken: | ||
result = lhs + "=" + lhs + "-" + rhs; | ||
break; | ||
case ts.SyntaxKind.AsteriskEqualsToken: | ||
result = lhs + "=" + lhs + "*" + rhs; | ||
break; | ||
case ts.SyntaxKind.SlashEqualsToken: | ||
result = lhs + "=" + lhs + "/" + rhs; | ||
break; | ||
case ts.SyntaxKind.AmpersandAmpersandToken: | ||
result = lhs + " and " + rhs; | ||
break; | ||
case ts.SyntaxKind.BarBarToken: | ||
result = lhs + " or " + rhs; | ||
break; | ||
case ts.SyntaxKind.PlusToken: | ||
// Replace string + with .. | ||
var typeLeft = this.checker.getTypeAtLocation(node.left); | ||
var typeRight = this.checker.getTypeAtLocation(node.right); | ||
if (typeLeft.flags & ts.TypeFlags.String || ts.isStringLiteral(node.left)) | ||
return lhs + ".." + rhs; | ||
if (typeRight.flags & ts.TypeFlags.String || ts.isStringLiteral(node.right)) | ||
return lhs + ".." + rhs; | ||
default: | ||
result = lhs + this.transpileOperator(node.operatorToken) + rhs; | ||
} | ||
} | ||
// Optionally put brackets around result | ||
@@ -625,3 +657,6 @@ if (brackets) { | ||
var funcName = node.expression.name.escapedText; | ||
var funcHolder = TSHelper_1.TSHelper.findMemberHolder(expType, funcName); | ||
var funcHolder = TSHelper_1.TSHelper.findMemberHolder(expType, funcName, this.checker); | ||
if (funcHolder === undefined) { | ||
throw new TranspileError("Could not find func " + funcName + " on " + expType.symbol.name, node); | ||
} | ||
var callPath_2 = funcHolder + "." + funcName; | ||
@@ -680,5 +715,3 @@ var params_4 = this.transpileArguments(node.arguments, node.expression.expression); | ||
}; | ||
// TODO at check if compiler options is LUA 5.3 | ||
// should throw an exception if codepoint is used sub 5.3 | ||
if (identifier.escapedText === "fromCodePoint" && this.options.luaTarget !== '5.3') { | ||
if (identifier.escapedText === "fromCodePoint" && this.options.luaTarget !== Target.Lua53) { | ||
throw new TranspileError("Unsupported string property " + identifier.escapedText + " is only supported for lua 5.3.", identifier); | ||
@@ -705,2 +738,4 @@ } | ||
return "TS_forEach(" + caller + ", " + params + ")"; | ||
case "indexOf": | ||
return "TS_indexOf(" + caller + ", " + params + ")"; | ||
case "map": | ||
@@ -993,8 +1028,2 @@ return "TS_map(" + caller + ", " + params + ")"; | ||
}); | ||
// Check if the class should be returned | ||
var isExport = node.modifiers && node.modifiers.some(function (_) { return _.kind == ts.SyntaxKind.ExportKeyword; }); | ||
var isDefault = node.modifiers && node.modifiers.some(function (_) { return _.kind == ts.SyntaxKind.DefaultKeyword; }); | ||
if (isExport && isDefault) { | ||
result += this.indent + ("return " + className + "\n"); | ||
} | ||
return result; | ||
@@ -1089,2 +1118,3 @@ }; | ||
}; | ||
LuaTranspiler.AvailableLuaTargets = [Target.LuaJIT, Target.Lua53]; | ||
return LuaTranspiler; | ||
@@ -1091,0 +1121,0 @@ }()); |
@@ -51,5 +51,2 @@ "use strict"; | ||
}; | ||
TSHelper.isValueType = function (node) { | ||
return ts.isIdentifier(node) || ts.isLiteralExpression(node) || ts.isArrayLiteralExpression(node) || ts.isObjectLiteralExpression(node); | ||
}; | ||
TSHelper.isArrayType = function (type) { | ||
@@ -94,10 +91,10 @@ return (type.flags & ts.TypeFlags.Object) != 0 | ||
// Depth-First-Search up the inheritance tree for the name of the symbol containing the member | ||
TSHelper.findMemberHolder = function (type, memberName) { | ||
if (type.symbol.members.has(memberName)) { | ||
TSHelper.findMemberHolder = function (type, memberName, typeChecker) { | ||
if (type.symbol.members.has(memberName) || (type.symbol.exports && type.symbol.exports.has(memberName))) { | ||
return type.symbol.name; | ||
} | ||
else { | ||
for (var _i = 0, _a = type.getBaseTypes(); _i < _a.length; _i++) { | ||
for (var _i = 0, _a = typeChecker.getBaseTypes(type); _i < _a.length; _i++) { | ||
var parent_1 = _a[_i]; | ||
var parentMember = this.findMemberHolder(parent_1, memberName); | ||
var parentMember = this.findMemberHolder(parent_1, memberName, typeChecker); | ||
if (parentMember) | ||
@@ -104,0 +101,0 @@ return parentMember; |
{ | ||
"name": "typescript-to-lua", | ||
"license": "MIT", | ||
"version": "0.0.12", | ||
"version": "0.0.13", | ||
"repository": "https://github.com/Perryvw/TypescriptToLua", | ||
@@ -6,0 +6,0 @@ "scripts": { |
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
78491
1479