typescript-to-lua 1.8.1 → 1.10.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CompilerOptions.d.ts +1 -0
- package/dist/CompilerOptions.js +1 -0
- package/dist/LuaAST.d.ts +43 -37
- package/dist/LuaAST.js +48 -38
- package/dist/LuaLib.d.ts +12 -6
- package/dist/LuaLib.js +31 -21
- package/dist/LuaPrinter.d.ts +1 -0
- package/dist/LuaPrinter.js +10 -4
- package/dist/lualib/5.0/ArrayConcat.lua +22 -0
- package/dist/lualib/5.0/ArrayEntries.lua +13 -0
- package/dist/lualib/5.0/ArrayEvery.lua +8 -0
- package/dist/lualib/5.0/ArrayFilter.lua +11 -0
- package/dist/lualib/5.0/ArrayFind.lua +9 -0
- package/dist/lualib/5.0/ArrayFindIndex.lua +8 -0
- package/dist/lualib/5.0/ArrayFlat.lua +27 -0
- package/dist/lualib/5.0/ArrayFlatMap.lua +17 -0
- package/dist/lualib/5.0/ArrayForEach.lua +5 -0
- package/dist/lualib/5.0/ArrayFrom.lua +29 -0
- package/dist/lualib/5.0/ArrayIncludes.lua +19 -0
- package/dist/lualib/5.0/ArrayIndexOf.lua +24 -0
- package/dist/lualib/5.0/ArrayIsArray.lua +3 -0
- package/dist/lualib/5.0/ArrayJoin.lua +10 -0
- package/dist/lualib/5.0/ArrayMap.lua +7 -0
- package/dist/lualib/5.0/ArrayPush.lua +9 -0
- package/dist/lualib/5.0/ArrayPushArray.lua +8 -0
- package/dist/lualib/5.0/ArrayReduce.lua +23 -0
- package/dist/lualib/5.0/ArrayReduceRight.lua +23 -0
- package/dist/lualib/5.0/ArrayReverse.lua +12 -0
- package/dist/lualib/5.0/ArraySetLength.lua +12 -0
- package/dist/lualib/5.0/ArraySlice.lua +43 -0
- package/dist/lualib/5.0/ArraySome.lua +8 -0
- package/dist/lualib/5.0/ArraySort.lua +11 -0
- package/dist/lualib/5.0/ArraySplice.lua +77 -0
- package/dist/lualib/5.0/ArrayToObject.lua +7 -0
- package/dist/lualib/5.0/ArrayUnshift.lua +14 -0
- package/dist/lualib/5.0/Await.lua +54 -0
- package/dist/lualib/5.0/Class.lua +6 -0
- package/dist/lualib/5.0/ClassExtends.lua +24 -0
- package/dist/lualib/5.0/CloneDescriptor.lua +28 -0
- package/dist/lualib/5.0/CountVarargs.lua +4 -0
- package/dist/lualib/5.0/Decorate.lua +36 -0
- package/dist/lualib/5.0/DecorateParam.lua +3 -0
- package/dist/lualib/5.0/DelegatedYield.lua +34 -0
- package/dist/lualib/5.0/Delete.lua +19 -0
- package/dist/lualib/5.0/Error.lua +85 -0
- package/dist/lualib/5.0/FunctionBind.lua +11 -0
- package/dist/lualib/5.0/Generator.lua +34 -0
- package/dist/lualib/5.0/InstanceOf.lua +18 -0
- package/dist/lualib/5.0/InstanceOfObject.lua +4 -0
- package/dist/lualib/5.0/Iterator.lua +40 -0
- package/dist/lualib/5.0/LuaIteratorSpread.lua +9 -0
- package/dist/lualib/5.0/Map.lua +140 -0
- package/dist/lualib/5.0/Match.lua +13 -0
- package/dist/lualib/5.0/MathAtan2.lua +1 -0
- package/dist/lualib/5.0/MathModf.lua +10 -0
- package/dist/lualib/5.0/MathSign.lua +8 -0
- package/dist/lualib/5.0/Modulo50.lua +3 -0
- package/dist/lualib/5.0/New.lua +5 -0
- package/dist/lualib/5.0/Number.lua +26 -0
- package/dist/lualib/5.0/NumberIsFinite.lua +3 -0
- package/dist/lualib/5.0/NumberIsNaN.lua +3 -0
- package/dist/lualib/5.0/NumberToString.lua +47 -0
- package/dist/lualib/5.0/ObjectAssign.lua +10 -0
- package/dist/lualib/5.0/ObjectDefineProperty.lua +59 -0
- package/dist/lualib/5.0/ObjectEntries.lua +9 -0
- package/dist/lualib/5.0/ObjectFromEntries.lua +20 -0
- package/dist/lualib/5.0/ObjectGetOwnPropertyDescriptor.lua +10 -0
- package/dist/lualib/5.0/ObjectGetOwnPropertyDescriptors.lua +7 -0
- package/dist/lualib/5.0/ObjectKeys.lua +9 -0
- package/dist/lualib/5.0/ObjectRest.lua +9 -0
- package/dist/lualib/5.0/ObjectValues.lua +9 -0
- package/dist/lualib/5.0/ParseFloat.lua +18 -0
- package/dist/lualib/5.0/ParseInt.lua +49 -0
- package/dist/lualib/5.0/Promise.lua +176 -0
- package/dist/lualib/5.0/PromiseAll.lua +44 -0
- package/dist/lualib/5.0/PromiseAllSettled.lua +48 -0
- package/dist/lualib/5.0/PromiseAny.lua +41 -0
- package/dist/lualib/5.0/PromiseRace.lua +28 -0
- package/dist/lualib/5.0/Set.lua +130 -0
- package/dist/lualib/5.0/SetDescriptor.lua +79 -0
- package/dist/lualib/5.0/SourceMapTraceBack.lua +56 -0
- package/dist/lualib/5.0/SparseArrayNew.lua +5 -0
- package/dist/lualib/5.0/SparseArrayPush.lua +9 -0
- package/dist/lualib/5.0/SparseArraySpread.lua +3 -0
- package/dist/lualib/5.0/Spread.lua +15 -0
- package/dist/lualib/5.0/StringAccess.lua +5 -0
- package/dist/lualib/5.0/StringCharAt.lua +9 -0
- package/dist/lualib/5.0/StringCharCodeAt.lua +13 -0
- package/dist/lualib/5.0/StringEndsWith.lua +10 -0
- package/dist/lualib/5.0/StringIncludes.lua +9 -0
- package/dist/lualib/5.0/StringPadEnd.lua +26 -0
- package/dist/lualib/5.0/StringPadStart.lua +26 -0
- package/dist/lualib/5.0/StringReplace.lua +20 -0
- package/dist/lualib/5.0/StringReplaceAll.lua +42 -0
- package/dist/lualib/5.0/StringSlice.lua +15 -0
- package/dist/lualib/5.0/StringSplit.lua +36 -0
- package/dist/lualib/5.0/StringStartsWith.lua +10 -0
- package/dist/lualib/5.0/StringSubstr.lua +15 -0
- package/dist/lualib/5.0/StringSubstring.lua +17 -0
- package/dist/lualib/5.0/StringTrim.lua +4 -0
- package/dist/lualib/5.0/StringTrimEnd.lua +4 -0
- package/dist/lualib/5.0/StringTrimStart.lua +4 -0
- package/dist/lualib/5.0/Symbol.lua +15 -0
- package/dist/lualib/5.0/SymbolRegistry.lua +17 -0
- package/dist/lualib/5.0/TypeOf.lua +10 -0
- package/dist/lualib/5.0/Unpack.lua +1 -0
- package/dist/lualib/5.0/WeakMap.lua +45 -0
- package/dist/lualib/5.0/WeakSet.lua +41 -0
- package/dist/lualib/5.0/lualib_bundle.lua +2574 -0
- package/dist/lualib/5.0/lualib_module_info.json +672 -0
- package/dist/lualib/universal/ArrayConcat.lua +22 -0
- package/dist/lualib/universal/ArrayEntries.lua +13 -0
- package/dist/lualib/universal/ArrayEvery.lua +8 -0
- package/dist/lualib/universal/ArrayFilter.lua +11 -0
- package/dist/lualib/universal/ArrayFind.lua +9 -0
- package/dist/lualib/universal/ArrayFindIndex.lua +8 -0
- package/dist/lualib/universal/ArrayFlat.lua +27 -0
- package/dist/lualib/universal/ArrayFlatMap.lua +17 -0
- package/dist/lualib/universal/ArrayForEach.lua +5 -0
- package/dist/lualib/universal/ArrayFrom.lua +29 -0
- package/dist/lualib/universal/ArrayIncludes.lua +19 -0
- package/dist/lualib/universal/ArrayIndexOf.lua +24 -0
- package/dist/lualib/universal/ArrayIsArray.lua +3 -0
- package/dist/lualib/universal/ArrayJoin.lua +10 -0
- package/dist/lualib/universal/ArrayMap.lua +7 -0
- package/dist/lualib/universal/ArrayPush.lua +9 -0
- package/dist/lualib/universal/ArrayPushArray.lua +8 -0
- package/dist/lualib/universal/ArrayReduce.lua +23 -0
- package/dist/lualib/universal/ArrayReduceRight.lua +23 -0
- package/dist/lualib/universal/ArrayReverse.lua +12 -0
- package/dist/lualib/universal/ArraySetLength.lua +12 -0
- package/dist/lualib/universal/ArraySlice.lua +43 -0
- package/dist/lualib/universal/ArraySome.lua +8 -0
- package/dist/lualib/universal/ArraySort.lua +11 -0
- package/dist/lualib/universal/ArraySplice.lua +77 -0
- package/dist/lualib/universal/ArrayToObject.lua +7 -0
- package/dist/lualib/universal/ArrayUnshift.lua +14 -0
- package/dist/lualib/universal/Await.lua +54 -0
- package/dist/lualib/universal/Class.lua +6 -0
- package/dist/lualib/universal/ClassExtends.lua +24 -0
- package/dist/lualib/universal/CloneDescriptor.lua +28 -0
- package/dist/lualib/universal/CountVarargs.lua +3 -0
- package/dist/lualib/universal/Decorate.lua +36 -0
- package/dist/lualib/universal/DecorateParam.lua +3 -0
- package/dist/lualib/universal/DelegatedYield.lua +34 -0
- package/dist/lualib/universal/Delete.lua +19 -0
- package/dist/lualib/universal/Error.lua +82 -0
- package/dist/lualib/universal/FunctionBind.lua +11 -0
- package/dist/lualib/universal/Generator.lua +31 -0
- package/dist/lualib/universal/InstanceOf.lua +18 -0
- package/dist/lualib/universal/InstanceOfObject.lua +4 -0
- package/dist/lualib/universal/Iterator.lua +40 -0
- package/dist/lualib/universal/LuaIteratorSpread.lua +9 -0
- package/dist/lualib/universal/Map.lua +140 -0
- package/dist/lualib/universal/Match.lua +1 -0
- package/dist/lualib/universal/MathAtan2.lua +1 -0
- package/dist/lualib/universal/MathModf.lua +1 -0
- package/dist/lualib/universal/MathSign.lua +8 -0
- package/dist/lualib/universal/Modulo50.lua +3 -0
- package/dist/lualib/universal/New.lua +5 -0
- package/dist/lualib/universal/Number.lua +26 -0
- package/dist/lualib/universal/NumberIsFinite.lua +3 -0
- package/dist/lualib/universal/NumberIsNaN.lua +3 -0
- package/dist/lualib/universal/NumberToString.lua +44 -0
- package/dist/lualib/universal/ObjectAssign.lua +10 -0
- package/dist/lualib/universal/ObjectDefineProperty.lua +59 -0
- package/dist/lualib/universal/ObjectEntries.lua +9 -0
- package/dist/lualib/universal/ObjectFromEntries.lua +20 -0
- package/dist/lualib/universal/ObjectGetOwnPropertyDescriptor.lua +10 -0
- package/dist/lualib/universal/ObjectGetOwnPropertyDescriptors.lua +7 -0
- package/dist/lualib/universal/ObjectKeys.lua +9 -0
- package/dist/lualib/universal/ObjectRest.lua +9 -0
- package/dist/lualib/universal/ObjectValues.lua +9 -0
- package/dist/lualib/universal/ParseFloat.lua +18 -0
- package/dist/lualib/universal/ParseInt.lua +43 -0
- package/dist/lualib/universal/Promise.lua +176 -0
- package/dist/lualib/universal/PromiseAll.lua +44 -0
- package/dist/lualib/universal/PromiseAllSettled.lua +48 -0
- package/dist/lualib/universal/PromiseAny.lua +41 -0
- package/dist/lualib/universal/PromiseRace.lua +28 -0
- package/dist/lualib/universal/Set.lua +130 -0
- package/dist/lualib/universal/SetDescriptor.lua +79 -0
- package/dist/lualib/universal/SourceMapTraceBack.lua +56 -0
- package/dist/lualib/universal/SparseArrayNew.lua +5 -0
- package/dist/lualib/universal/SparseArrayPush.lua +9 -0
- package/dist/lualib/universal/SparseArraySpread.lua +8 -0
- package/dist/lualib/universal/Spread.lua +15 -0
- package/dist/lualib/universal/StringAccess.lua +5 -0
- package/dist/lualib/universal/StringCharAt.lua +9 -0
- package/dist/lualib/universal/StringCharCodeAt.lua +13 -0
- package/dist/lualib/universal/StringEndsWith.lua +6 -0
- package/dist/lualib/universal/StringIncludes.lua +9 -0
- package/dist/lualib/universal/StringPadEnd.lua +26 -0
- package/dist/lualib/universal/StringPadStart.lua +26 -0
- package/dist/lualib/universal/StringReplace.lua +20 -0
- package/dist/lualib/universal/StringReplaceAll.lua +42 -0
- package/dist/lualib/universal/StringSlice.lua +15 -0
- package/dist/lualib/universal/StringSplit.lua +36 -0
- package/dist/lualib/universal/StringStartsWith.lua +6 -0
- package/dist/lualib/universal/StringSubstr.lua +15 -0
- package/dist/lualib/universal/StringSubstring.lua +17 -0
- package/dist/lualib/universal/StringTrim.lua +4 -0
- package/dist/lualib/universal/StringTrimEnd.lua +4 -0
- package/dist/lualib/universal/StringTrimStart.lua +4 -0
- package/dist/lualib/universal/Symbol.lua +15 -0
- package/dist/lualib/universal/SymbolRegistry.lua +17 -0
- package/dist/lualib/universal/TypeOf.lua +10 -0
- package/dist/lualib/universal/Unpack.lua +1 -0
- package/dist/lualib/universal/WeakMap.lua +45 -0
- package/dist/lualib/universal/WeakSet.lua +41 -0
- package/dist/lualib/universal/lualib_bundle.lua +2534 -0
- package/dist/lualib/universal/lualib_module_info.json +671 -0
- package/dist/lualib/universal/universal/CountVarargs.lua +3 -0
- package/dist/lualib/universal/universal/Match.lua +1 -0
- package/dist/lualib/universal/universal/MathModf.lua +1 -0
- package/dist/lualib/universal/universal/SparseArraySpread.lua +8 -0
- package/dist/lualib/universal/universal/Unpack.lua +1 -0
- package/dist/lualib-build/plugin.js +12 -2
- package/dist/transformation/builtins/array.d.ts +1 -1
- package/dist/transformation/builtins/array.js +12 -2
- package/dist/transformation/builtins/function.js +4 -2
- package/dist/transformation/builtins/index.js +28 -10
- package/dist/transformation/builtins/string.d.ts +1 -1
- package/dist/transformation/builtins/string.js +8 -1
- package/dist/transformation/utils/diagnostics.d.ts +5 -4
- package/dist/transformation/utils/diagnostics.js +2 -1
- package/dist/transformation/utils/lua-ast.js +3 -1
- package/dist/transformation/utils/typescript/index.js +2 -2
- package/dist/transformation/visitors/access.js +11 -0
- package/dist/transformation/visitors/binary-expression/bit.js +4 -2
- package/dist/transformation/visitors/binary-expression/index.js +4 -0
- package/dist/transformation/visitors/break-continue.js +4 -2
- package/dist/transformation/visitors/class/index.js +9 -4
- package/dist/transformation/visitors/class/members/fields.js +6 -2
- package/dist/transformation/visitors/class/members/method.js +4 -2
- package/dist/transformation/visitors/conditional.d.ts +1 -0
- package/dist/transformation/visitors/conditional.js +12 -1
- package/dist/transformation/visitors/errors.js +4 -2
- package/dist/transformation/visitors/function.js +2 -1
- package/dist/transformation/visitors/identifier.js +4 -1
- package/dist/transformation/visitors/language-extensions/multi.js +3 -1
- package/dist/transformation/visitors/language-extensions/operators.js +2 -1
- package/dist/transformation/visitors/literal.js +12 -4
- package/dist/transformation/visitors/loops/do-while.js +5 -0
- package/dist/transformation/visitors/modules/export.js +1 -1
- package/dist/transformation/visitors/return.js +12 -7
- package/dist/transformation/visitors/spread.js +4 -1
- package/dist/transformation/visitors/typescript.js +1 -0
- package/dist/transpilation/bundle.js +15 -6
- package/dist/transpilation/transpiler.js +3 -1
- package/package.json +18 -18
- package/language-extensions/index.d.ts +0 -676
|
@@ -3,4 +3,4 @@ import * as lua from "../../LuaAST";
|
|
|
3
3
|
import { TransformationContext } from "../context";
|
|
4
4
|
export declare function transformArrayConstructorCall(context: TransformationContext, node: ts.CallExpression, calledMethod: ts.PropertyAccessExpression): lua.Expression | undefined;
|
|
5
5
|
export declare function transformArrayPrototypeCall(context: TransformationContext, node: ts.CallExpression, calledMethod: ts.PropertyAccessExpression): lua.Expression | undefined;
|
|
6
|
-
export declare function transformArrayProperty(context: TransformationContext, node: ts.PropertyAccessExpression): lua.
|
|
6
|
+
export declare function transformArrayProperty(context: TransformationContext, node: ts.PropertyAccessExpression): lua.Expression | undefined;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.transformArrayProperty = exports.transformArrayPrototypeCall = exports.transformArrayConstructorCall = void 0;
|
|
4
4
|
const ts = require("typescript");
|
|
5
|
+
const CompilerOptions_1 = require("../../CompilerOptions");
|
|
5
6
|
const lua = require("../../LuaAST");
|
|
6
7
|
const diagnostics_1 = require("../utils/diagnostics");
|
|
7
8
|
const lualib_1 = require("../utils/lualib");
|
|
@@ -25,6 +26,15 @@ function transformArrayConstructorCall(context, node, calledMethod) {
|
|
|
25
26
|
}
|
|
26
27
|
}
|
|
27
28
|
exports.transformArrayConstructorCall = transformArrayConstructorCall;
|
|
29
|
+
function createTableLengthExpression(context, expression, node) {
|
|
30
|
+
if (context.luaTarget === CompilerOptions_1.LuaTarget.Lua50) {
|
|
31
|
+
const tableGetn = lua.createTableIndexExpression(lua.createIdentifier("table"), lua.createStringLiteral("getn"));
|
|
32
|
+
return lua.createCallExpression(tableGetn, [expression], node);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
return lua.createUnaryExpression(expression, lua.SyntaxKind.LengthOperator, node);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
28
38
|
/**
|
|
29
39
|
* Optimized single element Array.push
|
|
30
40
|
*
|
|
@@ -35,7 +45,7 @@ function transformSingleElementArrayPush(context, node, caller, param) {
|
|
|
35
45
|
const expressionIsUsed = !ts.isExpressionStatement((0, typescript_1.findFirstNonOuterParent)(node));
|
|
36
46
|
const arrayIdentifier = lua.isIdentifier(caller) ? caller : (0, expression_list_1.moveToPrecedingTemp)(context, caller);
|
|
37
47
|
// #array + 1
|
|
38
|
-
let lengthExpression = lua.createBinaryExpression(
|
|
48
|
+
let lengthExpression = lua.createBinaryExpression(createTableLengthExpression(context, arrayIdentifier), lua.createNumericLiteral(1), lua.SyntaxKind.AdditionOperator);
|
|
39
49
|
if (expressionIsUsed) {
|
|
40
50
|
// store length in a temp
|
|
41
51
|
lengthExpression = (0, expression_list_1.moveToPrecedingTemp)(context, lengthExpression);
|
|
@@ -131,7 +141,7 @@ function transformArrayProperty(context, node) {
|
|
|
131
141
|
switch (node.name.text) {
|
|
132
142
|
case "length":
|
|
133
143
|
const expression = context.transformExpression(node.expression);
|
|
134
|
-
return
|
|
144
|
+
return createTableLengthExpression(context, expression, node);
|
|
135
145
|
default:
|
|
136
146
|
return undefined;
|
|
137
147
|
}
|
|
@@ -32,8 +32,10 @@ exports.transformFunctionPrototypeCall = transformFunctionPrototypeCall;
|
|
|
32
32
|
function transformFunctionProperty(context, node) {
|
|
33
33
|
switch (node.name.text) {
|
|
34
34
|
case "length":
|
|
35
|
-
if (context.luaTarget === CompilerOptions_1.LuaTarget.
|
|
36
|
-
context.
|
|
35
|
+
if (context.luaTarget === CompilerOptions_1.LuaTarget.Lua50 ||
|
|
36
|
+
context.luaTarget === CompilerOptions_1.LuaTarget.Lua51 ||
|
|
37
|
+
context.luaTarget === CompilerOptions_1.LuaTarget.Universal) {
|
|
38
|
+
context.diagnostics.push((0, diagnostics_1.unsupportedForTarget)(node, "function.length", context.luaTarget));
|
|
37
39
|
}
|
|
38
40
|
// debug.getinfo(fn)
|
|
39
41
|
const getInfoCall = lua.createCallExpression(lua.createTableIndexExpression(lua.createIdentifier("debug"), lua.createStringLiteral("getinfo")), [context.transformExpression(node.expression)]);
|
|
@@ -19,6 +19,7 @@ const promise_1 = require("./promise");
|
|
|
19
19
|
const string_1 = require("./string");
|
|
20
20
|
const symbol_1 = require("./symbol");
|
|
21
21
|
const diagnostics_1 = require("../utils/diagnostics");
|
|
22
|
+
const CompilerOptions_1 = require("../../CompilerOptions");
|
|
22
23
|
function transformBuiltinPropertyAccessExpression(context, node) {
|
|
23
24
|
const ownerType = context.checker.getTypeAtLocation(node.expression);
|
|
24
25
|
if (ts.isIdentifier(node.expression) && (0, typescript_1.isStandardLibraryType)(context, ownerType, undefined)) {
|
|
@@ -67,9 +68,7 @@ function transformBuiltinCallExpression(context, node) {
|
|
|
67
68
|
exports.transformBuiltinCallExpression = transformBuiltinCallExpression;
|
|
68
69
|
function tryTransformBuiltinGlobalMethodCall(context, node, calledMethod) {
|
|
69
70
|
const ownerType = context.checker.getTypeAtLocation(calledMethod.expression);
|
|
70
|
-
|
|
71
|
-
return;
|
|
72
|
-
const ownerSymbol = ownerType.symbol;
|
|
71
|
+
const ownerSymbol = tryGetStandardLibrarySymbolOfType(context, ownerType);
|
|
73
72
|
if (!ownerSymbol || ownerSymbol.parent)
|
|
74
73
|
return;
|
|
75
74
|
let result;
|
|
@@ -106,11 +105,10 @@ function tryTransformBuiltinGlobalMethodCall(context, node, calledMethod) {
|
|
|
106
105
|
return result;
|
|
107
106
|
}
|
|
108
107
|
function tryTransformBuiltinPropertyCall(context, node, calledMethod) {
|
|
109
|
-
|
|
110
|
-
const
|
|
111
|
-
if (!
|
|
108
|
+
const functionType = context.checker.getTypeAtLocation(node.expression);
|
|
109
|
+
const callSymbol = tryGetStandardLibrarySymbolOfType(context, functionType);
|
|
110
|
+
if (!callSymbol)
|
|
112
111
|
return;
|
|
113
|
-
const callSymbol = context.checker.getTypeAtLocation(signatureDeclaration).symbol;
|
|
114
112
|
const ownerSymbol = callSymbol.parent;
|
|
115
113
|
if (!ownerSymbol || ownerSymbol.parent)
|
|
116
114
|
return;
|
|
@@ -133,9 +131,16 @@ function transformBuiltinIdentifierExpression(context, node, symbol) {
|
|
|
133
131
|
case "NaN":
|
|
134
132
|
return (0, lua_ast_1.createNaN)(node);
|
|
135
133
|
case "Infinity":
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
134
|
+
if (context.luaTarget === CompilerOptions_1.LuaTarget.Lua50) {
|
|
135
|
+
const one = lua.createNumericLiteral(1);
|
|
136
|
+
const zero = lua.createNumericLiteral(0);
|
|
137
|
+
return lua.createBinaryExpression(one, zero, lua.SyntaxKind.DivisionOperator);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
const math = lua.createIdentifier("math");
|
|
141
|
+
const huge = lua.createStringLiteral("huge");
|
|
142
|
+
return lua.createTableIndexExpression(math, huge, node);
|
|
143
|
+
}
|
|
139
144
|
case "globalThis":
|
|
140
145
|
return lua.createIdentifier("_G", node, (0, symbols_1.getIdentifierSymbolId)(context, node, symbol), "globalThis");
|
|
141
146
|
}
|
|
@@ -187,4 +192,17 @@ function checkForLuaLibType(context, type) {
|
|
|
187
192
|
}
|
|
188
193
|
}
|
|
189
194
|
exports.checkForLuaLibType = checkForLuaLibType;
|
|
195
|
+
function tryGetStandardLibrarySymbolOfType(context, type) {
|
|
196
|
+
if (type.isUnionOrIntersection()) {
|
|
197
|
+
for (const subType of type.types) {
|
|
198
|
+
const symbol = tryGetStandardLibrarySymbolOfType(context, subType);
|
|
199
|
+
if (symbol)
|
|
200
|
+
return symbol;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
else if ((0, typescript_1.isStandardLibraryType)(context, type, undefined)) {
|
|
204
|
+
return type.symbol;
|
|
205
|
+
}
|
|
206
|
+
return undefined;
|
|
207
|
+
}
|
|
190
208
|
//# sourceMappingURL=index.js.map
|
|
@@ -3,4 +3,4 @@ import * as lua from "../../LuaAST";
|
|
|
3
3
|
import { TransformationContext } from "../context";
|
|
4
4
|
export declare function transformStringPrototypeCall(context: TransformationContext, node: ts.CallExpression, calledMethod: ts.PropertyAccessExpression): lua.Expression | undefined;
|
|
5
5
|
export declare function transformStringConstructorCall(context: TransformationContext, node: ts.CallExpression, calledMethod: ts.PropertyAccessExpression): lua.Expression | undefined;
|
|
6
|
-
export declare function transformStringProperty(context: TransformationContext, node: ts.PropertyAccessExpression): lua.
|
|
6
|
+
export declare function transformStringProperty(context: TransformationContext, node: ts.PropertyAccessExpression): lua.Expression | undefined;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.transformStringProperty = exports.transformStringConstructorCall = exports.transformStringPrototypeCall = void 0;
|
|
4
|
+
const CompilerOptions_1 = require("../../CompilerOptions");
|
|
4
5
|
const lua = require("../../LuaAST");
|
|
5
6
|
const diagnostics_1 = require("../utils/diagnostics");
|
|
6
7
|
const lua_ast_1 = require("../utils/lua-ast");
|
|
@@ -123,7 +124,13 @@ function transformStringProperty(context, node) {
|
|
|
123
124
|
switch (node.name.text) {
|
|
124
125
|
case "length":
|
|
125
126
|
const expression = context.transformExpression(node.expression);
|
|
126
|
-
|
|
127
|
+
if (context.luaTarget === CompilerOptions_1.LuaTarget.Lua50) {
|
|
128
|
+
const stringLen = lua.createTableIndexExpression(lua.createIdentifier("string"), lua.createStringLiteral("len"));
|
|
129
|
+
return lua.createCallExpression(stringLen, [expression], node);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
return lua.createUnaryExpression(expression, lua.SyntaxKind.LengthOperator, node);
|
|
133
|
+
}
|
|
127
134
|
default:
|
|
128
135
|
context.diagnostics.push((0, diagnostics_1.unsupportedProperty)(node.name, "string", node.name.text));
|
|
129
136
|
}
|
|
@@ -43,11 +43,10 @@ export declare const unsupportedAccessorInObjectLiteral: ((node: ts.Node, ...arg
|
|
|
43
43
|
export declare const unsupportedRightShiftOperator: ((node: ts.Node, ...args: any[]) => ts.Diagnostic) & {
|
|
44
44
|
code: number;
|
|
45
45
|
};
|
|
46
|
-
declare
|
|
47
|
-
export declare const unsupportedForTarget: ((node: ts.Node, functionality: string, version: NonUniversalTarget) => ts.Diagnostic) & {
|
|
46
|
+
export declare const unsupportedForTarget: ((node: ts.Node, functionality: string, version: LuaTarget) => ts.Diagnostic) & {
|
|
48
47
|
code: number;
|
|
49
48
|
};
|
|
50
|
-
export declare const unsupportedForTargetButOverrideAvailable: ((node: ts.Node, functionality: string, version:
|
|
49
|
+
export declare const unsupportedForTargetButOverrideAvailable: ((node: ts.Node, functionality: string, version: LuaTarget, optionName: keyof TypeScriptToLuaOptions) => ts.Diagnostic) & {
|
|
51
50
|
code: number;
|
|
52
51
|
};
|
|
53
52
|
export declare const unsupportedProperty: ((node: ts.Node, parentName: string, property: string) => ts.Diagnostic) & {
|
|
@@ -83,6 +82,9 @@ export declare const annotationRemoved: ((node: ts.Node, kind: AnnotationKind) =
|
|
|
83
82
|
export declare const annotationDeprecated: ((node: ts.Node, kind: AnnotationKind) => ts.Diagnostic) & {
|
|
84
83
|
code: number;
|
|
85
84
|
};
|
|
85
|
+
export declare const truthyOnlyConditionalValue: ((node: ts.Node, ...args: any[]) => ts.Diagnostic) & {
|
|
86
|
+
code: number;
|
|
87
|
+
};
|
|
86
88
|
export declare const notAllowedOptionalAssignment: ((node: ts.Node, ...args: any[]) => ts.Diagnostic) & {
|
|
87
89
|
code: number;
|
|
88
90
|
};
|
|
@@ -98,4 +100,3 @@ export declare const unsupportedOptionalCompileMembersOnly: ((node: ts.Node, ...
|
|
|
98
100
|
export declare const undefinedInArrayLiteral: ((node: ts.Node, ...args: any[]) => ts.Diagnostic) & {
|
|
99
101
|
code: number;
|
|
100
102
|
};
|
|
101
|
-
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.undefinedInArrayLiteral = exports.unsupportedOptionalCompileMembersOnly = exports.unsupportedBuiltinOptionalCall = exports.awaitMustBeInAsyncFunction = exports.notAllowedOptionalAssignment = exports.annotationDeprecated = exports.annotationRemoved = exports.invalidCallExtensionUse = exports.invalidMultiReturnAccess = exports.invalidMultiTypeToEmptyPatternOrArrayLiteral = exports.invalidMultiTypeToNonArrayLiteral = exports.invalidMultiFunctionReturnType = exports.invalidMultiFunctionUse = exports.unsupportedVarDeclaration = exports.invalidAmbientIdentifierName = exports.unsupportedProperty = exports.unsupportedForTargetButOverrideAvailable = exports.unsupportedForTarget = exports.unsupportedRightShiftOperator = exports.unsupportedAccessorInObjectLiteral = exports.invalidPairsIterableWithoutDestructuring = exports.invalidMultiIterableWithoutDestructuring = exports.invalidRangeControlVariable = exports.invalidVarargUse = exports.invalidRangeUse = exports.annotationInvalidArgumentCount = exports.decoratorInvalidContext = exports.unsupportedOverloadAssignment = exports.unsupportedSelfFunctionConversion = exports.unsupportedNoSelfFunctionConversion = exports.forbiddenForIn = exports.unsupportedNodeKind = void 0;
|
|
3
|
+
exports.undefinedInArrayLiteral = exports.unsupportedOptionalCompileMembersOnly = exports.unsupportedBuiltinOptionalCall = exports.awaitMustBeInAsyncFunction = exports.notAllowedOptionalAssignment = exports.truthyOnlyConditionalValue = exports.annotationDeprecated = exports.annotationRemoved = exports.invalidCallExtensionUse = exports.invalidMultiReturnAccess = exports.invalidMultiTypeToEmptyPatternOrArrayLiteral = exports.invalidMultiTypeToNonArrayLiteral = exports.invalidMultiFunctionReturnType = exports.invalidMultiFunctionUse = exports.unsupportedVarDeclaration = exports.invalidAmbientIdentifierName = exports.unsupportedProperty = exports.unsupportedForTargetButOverrideAvailable = exports.unsupportedForTarget = exports.unsupportedRightShiftOperator = exports.unsupportedAccessorInObjectLiteral = exports.invalidPairsIterableWithoutDestructuring = exports.invalidMultiIterableWithoutDestructuring = exports.invalidRangeControlVariable = exports.invalidVarargUse = exports.invalidRangeUse = exports.annotationInvalidArgumentCount = exports.decoratorInvalidContext = exports.unsupportedOverloadAssignment = exports.unsupportedSelfFunctionConversion = exports.unsupportedNoSelfFunctionConversion = exports.forbiddenForIn = exports.unsupportedNodeKind = void 0;
|
|
4
4
|
const ts = require("typescript");
|
|
5
5
|
const CompilerOptions_1 = require("../../CompilerOptions");
|
|
6
6
|
const utils_1 = require("../../utils");
|
|
@@ -57,6 +57,7 @@ exports.annotationRemoved = createErrorDiagnosticFactory((kind) => `'@${kind}' h
|
|
|
57
57
|
`See https://typescripttolua.github.io/docs/advanced/compiler-annotations#${kind.toLowerCase()} for more information.`);
|
|
58
58
|
exports.annotationDeprecated = createWarningDiagnosticFactory((kind) => `'@${kind}' is deprecated and will be removed in a future update. Please update your code before upgrading to the next release, otherwise your project will no longer compile. ` +
|
|
59
59
|
`See https://typescripttolua.github.io/docs/advanced/compiler-annotations#${kind.toLowerCase()} for more information.`);
|
|
60
|
+
exports.truthyOnlyConditionalValue = createWarningDiagnosticFactory("Numbers and strings will always evaluate to true in Lua. Explicitly check the value with ===.");
|
|
60
61
|
exports.notAllowedOptionalAssignment = createErrorDiagnosticFactory("The left-hand side of an assignment expression may not be an optional property access.");
|
|
61
62
|
exports.awaitMustBeInAsyncFunction = createErrorDiagnosticFactory("Await can only be used inside async functions.");
|
|
62
63
|
exports.unsupportedBuiltinOptionalCall = createErrorDiagnosticFactory("Optional calls are not supported for builtin or language extension functions.");
|
|
@@ -59,7 +59,9 @@ function createUnpackCall(context, expression, tsOriginal) {
|
|
|
59
59
|
if (context.luaTarget === CompilerOptions_1.LuaTarget.Universal) {
|
|
60
60
|
return (0, lualib_1.transformLuaLibFunction)(context, LuaLib_1.LuaLibFeature.Unpack, tsOriginal, expression);
|
|
61
61
|
}
|
|
62
|
-
const unpack = context.luaTarget === CompilerOptions_1.LuaTarget.
|
|
62
|
+
const unpack = context.luaTarget === CompilerOptions_1.LuaTarget.Lua50 ||
|
|
63
|
+
context.luaTarget === CompilerOptions_1.LuaTarget.Lua51 ||
|
|
64
|
+
context.luaTarget === CompilerOptions_1.LuaTarget.LuaJIT
|
|
63
65
|
? lua.createIdentifier("unpack")
|
|
64
66
|
: lua.createTableIndexExpression(lua.createIdentifier("table"), lua.createStringLiteral("unpack"));
|
|
65
67
|
return lua.setNodeFlags(lua.createCallExpression(unpack, [expression], tsOriginal), lua.NodeFlags.TableUnpackCall);
|
|
@@ -97,7 +97,7 @@ function isExpressionWithEvaluationEffect(node) {
|
|
|
97
97
|
exports.isExpressionWithEvaluationEffect = isExpressionWithEvaluationEffect;
|
|
98
98
|
function getFunctionTypeForCall(context, node) {
|
|
99
99
|
const signature = context.checker.getResolvedSignature(node);
|
|
100
|
-
if (!signature ||
|
|
100
|
+
if (!(signature === null || signature === void 0 ? void 0 : signature.declaration)) {
|
|
101
101
|
return;
|
|
102
102
|
}
|
|
103
103
|
const typeDeclaration = findFirstNodeAbove(signature.declaration, ts.isTypeAliasDeclaration);
|
|
@@ -116,7 +116,7 @@ function isConstIdentifier(context, node) {
|
|
|
116
116
|
return false;
|
|
117
117
|
}
|
|
118
118
|
const symbol = context.checker.getSymbolAtLocation(identifier);
|
|
119
|
-
if (!symbol ||
|
|
119
|
+
if (!(symbol === null || symbol === void 0 ? void 0 : symbol.declarations)) {
|
|
120
120
|
return false;
|
|
121
121
|
}
|
|
122
122
|
return symbol.declarations.some(d => ts.isVariableDeclarationList(d.parent) && (d.parent.flags & ts.NodeFlags.Const) !== 0);
|
|
@@ -6,11 +6,13 @@ const lua = require("../../LuaAST");
|
|
|
6
6
|
const builtins_1 = require("../builtins");
|
|
7
7
|
const annotations_1 = require("../utils/annotations");
|
|
8
8
|
const diagnostics_1 = require("../utils/diagnostics");
|
|
9
|
+
const language_extensions_1 = require("../utils/language-extensions");
|
|
9
10
|
const lua_ast_1 = require("../utils/lua-ast");
|
|
10
11
|
const lualib_1 = require("../utils/lualib");
|
|
11
12
|
const typescript_1 = require("../utils/typescript");
|
|
12
13
|
const enum_1 = require("./enum");
|
|
13
14
|
const expression_list_1 = require("./expression-list");
|
|
15
|
+
const call_extension_1 = require("./language-extensions/call-extension");
|
|
14
16
|
const multi_1 = require("./language-extensions/multi");
|
|
15
17
|
const optional_chaining_1 = require("./optional-chaining");
|
|
16
18
|
function addOneToArrayAccessArgument(context, node, index) {
|
|
@@ -108,6 +110,15 @@ function transformPropertyAccessExpressionWithCapture(context, node, thisValueCa
|
|
|
108
110
|
// If this assumption is no longer true, this may need to be updated.
|
|
109
111
|
return { expression: builtinResult };
|
|
110
112
|
}
|
|
113
|
+
if (ts.isIdentifier(node.expression) &&
|
|
114
|
+
node.parent &&
|
|
115
|
+
(!ts.isCallExpression(node.parent) || node.parent.expression !== node)) {
|
|
116
|
+
// Check if this is a method call extension that is not used as a call
|
|
117
|
+
const extensionType = (0, language_extensions_1.getExtensionKindForNode)(context, node);
|
|
118
|
+
if (extensionType && call_extension_1.callExtensions.has(extensionType)) {
|
|
119
|
+
context.diagnostics.push((0, diagnostics_1.invalidCallExtensionUse)(node));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
111
122
|
const table = context.transformExpression(node.expression);
|
|
112
123
|
if (thisValueCapture) {
|
|
113
124
|
const thisValue = (0, optional_chaining_1.captureThisValue)(context, table, thisValueCapture, node.expression);
|
|
@@ -39,8 +39,9 @@ function transformBitOperatorToLuaOperator(context, node, operator) {
|
|
|
39
39
|
function transformBinaryBitOperation(context, node, left, right, operator) {
|
|
40
40
|
switch (context.luaTarget) {
|
|
41
41
|
case CompilerOptions_1.LuaTarget.Universal:
|
|
42
|
+
case CompilerOptions_1.LuaTarget.Lua50:
|
|
42
43
|
case CompilerOptions_1.LuaTarget.Lua51:
|
|
43
|
-
context.diagnostics.push((0, diagnostics_1.unsupportedForTarget)(node, "Bitwise operations",
|
|
44
|
+
context.diagnostics.push((0, diagnostics_1.unsupportedForTarget)(node, "Bitwise operations", context.luaTarget));
|
|
44
45
|
case CompilerOptions_1.LuaTarget.LuaJIT:
|
|
45
46
|
return transformBinaryBitLibOperation(node, left, right, operator, "bit");
|
|
46
47
|
case CompilerOptions_1.LuaTarget.Lua52:
|
|
@@ -65,8 +66,9 @@ function transformUnaryBitLibOperation(node, expression, operator, lib) {
|
|
|
65
66
|
function transformUnaryBitOperation(context, node, expression, operator) {
|
|
66
67
|
switch (context.luaTarget) {
|
|
67
68
|
case CompilerOptions_1.LuaTarget.Universal:
|
|
69
|
+
case CompilerOptions_1.LuaTarget.Lua50:
|
|
68
70
|
case CompilerOptions_1.LuaTarget.Lua51:
|
|
69
|
-
context.diagnostics.push((0, diagnostics_1.unsupportedForTarget)(node, "Bitwise operations",
|
|
71
|
+
context.diagnostics.push((0, diagnostics_1.unsupportedForTarget)(node, "Bitwise operations", context.luaTarget));
|
|
70
72
|
case CompilerOptions_1.LuaTarget.LuaJIT:
|
|
71
73
|
return transformUnaryBitLibOperation(node, expression, operator, "bit");
|
|
72
74
|
case CompilerOptions_1.LuaTarget.Lua52:
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.transformBinaryExpressionStatement = exports.transformBinaryExpression = exports.transformBinaryOperation = exports.createShortCircuitBinaryExpressionPrecedingStatements = void 0;
|
|
4
4
|
const ts = require("typescript");
|
|
5
|
+
const CompilerOptions_1 = require("../../../CompilerOptions");
|
|
5
6
|
const lua = require("../../../LuaAST");
|
|
6
7
|
const lua_ast_1 = require("../../utils/lua-ast");
|
|
7
8
|
const lualib_1 = require("../../utils/lualib");
|
|
@@ -42,6 +43,9 @@ function transformBinaryOperationWithNoPrecedingStatements(context, left, right,
|
|
|
42
43
|
(0, utils_1.assert)(ts.isBinaryExpression(node));
|
|
43
44
|
return transformNullishCoalescingOperationNoPrecedingStatements(context, node, left, right);
|
|
44
45
|
}
|
|
46
|
+
if (operator === ts.SyntaxKind.PercentToken && context.luaTarget === CompilerOptions_1.LuaTarget.Lua50) {
|
|
47
|
+
return (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.Modulo50, node, left, right);
|
|
48
|
+
}
|
|
45
49
|
let luaOperator = simpleOperatorsToLua[operator];
|
|
46
50
|
// Check if we need to use string concat operator
|
|
47
51
|
if (operator === ts.SyntaxKind.PlusToken && ts.isBinaryExpression(node)) {
|
|
@@ -12,8 +12,10 @@ const transformBreakStatement = (breakStatement, context) => {
|
|
|
12
12
|
exports.transformBreakStatement = transformBreakStatement;
|
|
13
13
|
const transformContinueStatement = (statement, context) => {
|
|
14
14
|
var _a;
|
|
15
|
-
if (context.luaTarget === CompilerOptions_1.LuaTarget.Universal ||
|
|
16
|
-
context.
|
|
15
|
+
if (context.luaTarget === CompilerOptions_1.LuaTarget.Universal ||
|
|
16
|
+
context.luaTarget === CompilerOptions_1.LuaTarget.Lua50 ||
|
|
17
|
+
context.luaTarget === CompilerOptions_1.LuaTarget.Lua51) {
|
|
18
|
+
context.diagnostics.push((0, diagnostics_1.unsupportedForTarget)(statement, "Continue statement", context.luaTarget));
|
|
17
19
|
}
|
|
18
20
|
const scope = (0, scope_1.findScope)(context, scope_1.ScopeType.Loop);
|
|
19
21
|
if (scope) {
|
|
@@ -14,6 +14,7 @@ const fields_1 = require("./members/fields");
|
|
|
14
14
|
const method_1 = require("./members/method");
|
|
15
15
|
const utils_1 = require("./utils");
|
|
16
16
|
const setup_1 = require("./setup");
|
|
17
|
+
const CompilerOptions_1 = require("../../../CompilerOptions");
|
|
17
18
|
const transformClassDeclaration = (declaration, context) => {
|
|
18
19
|
// If declaration is a default export, transform to export variable assignment instead
|
|
19
20
|
if ((0, export_1.hasDefaultExportModifier)(declaration)) {
|
|
@@ -34,6 +35,7 @@ function transformClassAsExpression(expression, context) {
|
|
|
34
35
|
}
|
|
35
36
|
exports.transformClassAsExpression = transformClassAsExpression;
|
|
36
37
|
function transformClassLikeDeclaration(classDeclaration, context, nameOverride) {
|
|
38
|
+
var _a, _b;
|
|
37
39
|
let className;
|
|
38
40
|
if (nameOverride !== undefined) {
|
|
39
41
|
className = nameOverride;
|
|
@@ -79,10 +81,13 @@ function transformClassLikeDeclaration(classDeclaration, context, nameOverride)
|
|
|
79
81
|
else if (instanceFields.length > 0) {
|
|
80
82
|
// Generate a constructor if none was defined in a class with instance fields that need initialization
|
|
81
83
|
// localClassName.prototype.____constructor = function(self, ...)
|
|
82
|
-
// baseClassName.prototype.____constructor(self, ...)
|
|
84
|
+
// baseClassName.prototype.____constructor(self, ...) // or unpack(arg) for Lua 5.0
|
|
83
85
|
// ...
|
|
84
86
|
const constructorBody = (0, fields_1.transformClassInstanceFields)(context, instanceFields);
|
|
85
|
-
const
|
|
87
|
+
const argsExpression = context.luaTarget === CompilerOptions_1.LuaTarget.Lua50
|
|
88
|
+
? lua.createCallExpression(lua.createIdentifier("unpack"), [lua.createArgLiteral()])
|
|
89
|
+
: lua.createDotsLiteral();
|
|
90
|
+
const superCall = lua.createExpressionStatement(lua.createCallExpression(lua.createTableIndexExpression(context.transformExpression(ts.factory.createSuper()), lua.createStringLiteral("____constructor")), [(0, lua_ast_1.createSelfIdentifier)(), argsExpression]));
|
|
86
91
|
constructorBody.unshift(superCall);
|
|
87
92
|
const constructorFunction = lua.createFunctionExpression(lua.createBlock(constructorBody), [(0, lua_ast_1.createSelfIdentifier)()], lua.createDotsLiteral(), lua.NodeFlags.Declaration);
|
|
88
93
|
result.push(lua.createAssignmentStatement((0, constructor_1.createConstructorName)(localClassName), constructorFunction, classDeclaration));
|
|
@@ -129,8 +134,8 @@ function transformClassLikeDeclaration(classDeclaration, context, nameOverride)
|
|
|
129
134
|
}
|
|
130
135
|
result.push(...decorationStatements);
|
|
131
136
|
// Decorate the class
|
|
132
|
-
if (classDeclaration.
|
|
133
|
-
const decoratingExpression = (0, decorators_1.createDecoratingExpression)(context, classDeclaration.kind, classDeclaration.
|
|
137
|
+
if (ts.canHaveDecorators(classDeclaration) && ts.getDecorators(classDeclaration)) {
|
|
138
|
+
const decoratingExpression = (0, decorators_1.createDecoratingExpression)(context, classDeclaration.kind, (_b = (_a = ts.getDecorators(classDeclaration)) === null || _a === void 0 ? void 0 : _a.map(d => (0, decorators_1.transformDecoratorExpression)(context, d))) !== null && _b !== void 0 ? _b : [], localClassName);
|
|
134
139
|
const decoratingStatement = lua.createAssignmentStatement(localClassName, decoratingExpression);
|
|
135
140
|
result.push(decoratingStatement);
|
|
136
141
|
if ((0, export_1.hasExportModifier)(classDeclaration)) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.transformStaticPropertyDeclaration = exports.transformClassInstanceFields = exports.createPropertyDecoratingExpression = void 0;
|
|
4
|
+
const ts = require("typescript");
|
|
4
5
|
const lua = require("../../../../LuaAST");
|
|
5
6
|
const lua_ast_1 = require("../../../utils/lua-ast");
|
|
6
7
|
const preceding_statements_1 = require("../../../utils/preceding-statements");
|
|
@@ -8,11 +9,14 @@ const literal_1 = require("../../literal");
|
|
|
8
9
|
const decorators_1 = require("../decorators");
|
|
9
10
|
const method_1 = require("./method");
|
|
10
11
|
function createPropertyDecoratingExpression(context, node, className) {
|
|
11
|
-
if (!node
|
|
12
|
+
if (!ts.canHaveDecorators(node))
|
|
13
|
+
return;
|
|
14
|
+
const decorators = ts.getDecorators(node);
|
|
15
|
+
if (!decorators)
|
|
12
16
|
return;
|
|
13
17
|
const propertyName = (0, literal_1.transformPropertyName)(context, node.name);
|
|
14
18
|
const propertyOwnerTable = (0, method_1.transformMemberExpressionOwnerName)(node, className);
|
|
15
|
-
return (0, decorators_1.createDecoratingExpression)(context, node.kind,
|
|
19
|
+
return (0, decorators_1.createDecoratingExpression)(context, node.kind, decorators.map(d => (0, decorators_1.transformDecoratorExpression)(context, d)), propertyOwnerTable, propertyName);
|
|
16
20
|
}
|
|
17
21
|
exports.createPropertyDecoratingExpression = createPropertyDecoratingExpression;
|
|
18
22
|
function transformClassInstanceFields(context, instanceFields) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createMethodDecoratingExpression = exports.transformMethodDeclaration = exports.transformMethodName = exports.transformMemberExpressionOwnerName = void 0;
|
|
4
|
+
const ts = require("typescript");
|
|
4
5
|
const lua = require("../../../../LuaAST");
|
|
5
6
|
const function_1 = require("../../function");
|
|
6
7
|
const literal_1 = require("../../literal");
|
|
@@ -38,10 +39,11 @@ function createMethodDecoratingExpression(context, node, className) {
|
|
|
38
39
|
const parameterDecorators = node.parameters
|
|
39
40
|
.flatMap((parameter, index) => {
|
|
40
41
|
var _a;
|
|
41
|
-
return (_a =
|
|
42
|
+
return (_a = ts
|
|
43
|
+
.getDecorators(parameter)) === null || _a === void 0 ? void 0 : _a.map(decorator => (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.DecorateParam, node, lua.createNumericLiteral(index), (0, decorators_1.transformDecoratorExpression)(context, decorator)));
|
|
42
44
|
})
|
|
43
45
|
.filter(utils_2.isNonNull);
|
|
44
|
-
const methodDecorators = (_b = (_a = node
|
|
46
|
+
const methodDecorators = (_b = (_a = ts.getDecorators(node)) === null || _a === void 0 ? void 0 : _a.map(d => (0, decorators_1.transformDecoratorExpression)(context, d))) !== null && _b !== void 0 ? _b : [];
|
|
45
47
|
if (methodDecorators.length > 0 || parameterDecorators.length > 0) {
|
|
46
48
|
const decorateMethod = (0, decorators_1.createDecoratingExpression)(context, node.kind, [...methodDecorators, ...parameterDecorators], methodTable, methodName);
|
|
47
49
|
return lua.createExpressionStatement(decorateMethod);
|
|
@@ -3,3 +3,4 @@ import * as lua from "../../LuaAST";
|
|
|
3
3
|
import { FunctionVisitor, TransformationContext } from "../context";
|
|
4
4
|
export declare const transformConditionalExpression: FunctionVisitor<ts.ConditionalExpression>;
|
|
5
5
|
export declare function transformIfStatement(statement: ts.IfStatement, context: TransformationContext): lua.IfStatement;
|
|
6
|
+
export declare function checkOnlyTruthyCondition(condition: ts.Expression, context: TransformationContext): void;
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.transformIfStatement = exports.transformConditionalExpression = void 0;
|
|
3
|
+
exports.checkOnlyTruthyCondition = exports.transformIfStatement = exports.transformConditionalExpression = void 0;
|
|
4
4
|
const ts = require("typescript");
|
|
5
5
|
const lua = require("../../LuaAST");
|
|
6
6
|
const preceding_statements_1 = require("../utils/preceding-statements");
|
|
7
7
|
const scope_1 = require("../utils/scope");
|
|
8
8
|
const block_1 = require("./block");
|
|
9
9
|
const typescript_1 = require("../utils/typescript");
|
|
10
|
+
const diagnostics_1 = require("../utils/diagnostics");
|
|
10
11
|
function transformProtectedConditionalExpression(context, expression, condition, whenTrue, whenFalse) {
|
|
11
12
|
const tempVar = context.createTempNameForNode(expression.condition);
|
|
12
13
|
const trueStatements = whenTrue[0].concat(lua.createAssignmentStatement(lua.cloneIdentifier(tempVar), whenTrue[1], expression.whenTrue));
|
|
@@ -19,6 +20,8 @@ function transformProtectedConditionalExpression(context, expression, condition,
|
|
|
19
20
|
return lua.cloneIdentifier(tempVar);
|
|
20
21
|
}
|
|
21
22
|
const transformConditionalExpression = (expression, context) => {
|
|
23
|
+
// Check if we need to add diagnostic about Lua truthiness
|
|
24
|
+
checkOnlyTruthyCondition(expression.condition, context);
|
|
22
25
|
const condition = (0, preceding_statements_1.transformInPrecedingStatementScope)(context, () => context.transformExpression(expression.condition));
|
|
23
26
|
const whenTrue = (0, preceding_statements_1.transformInPrecedingStatementScope)(context, () => context.transformExpression(expression.whenTrue));
|
|
24
27
|
const whenFalse = (0, preceding_statements_1.transformInPrecedingStatementScope)(context, () => context.transformExpression(expression.whenFalse));
|
|
@@ -35,6 +38,8 @@ const transformConditionalExpression = (expression, context) => {
|
|
|
35
38
|
exports.transformConditionalExpression = transformConditionalExpression;
|
|
36
39
|
function transformIfStatement(statement, context) {
|
|
37
40
|
context.pushScope(scope_1.ScopeType.Conditional);
|
|
41
|
+
// Check if we need to add diagnostic about Lua truthiness
|
|
42
|
+
checkOnlyTruthyCondition(statement.expression, context);
|
|
38
43
|
const condition = context.transformExpression(statement.expression);
|
|
39
44
|
const statements = (0, scope_1.performHoisting)(context, (0, block_1.transformBlockOrStatement)(context, statement.thenStatement));
|
|
40
45
|
context.popScope();
|
|
@@ -70,4 +75,10 @@ function transformIfStatement(statement, context) {
|
|
|
70
75
|
return lua.createIfStatement(condition, ifBlock);
|
|
71
76
|
}
|
|
72
77
|
exports.transformIfStatement = transformIfStatement;
|
|
78
|
+
function checkOnlyTruthyCondition(condition, context) {
|
|
79
|
+
if (!(0, typescript_1.canBeFalsy)(context, context.checker.getTypeAtLocation(condition))) {
|
|
80
|
+
context.diagnostics.push((0, diagnostics_1.truthyOnlyConditionalValue)(condition));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.checkOnlyTruthyCondition = checkOnlyTruthyCondition;
|
|
73
84
|
//# sourceMappingURL=conditional.js.map
|
|
@@ -15,7 +15,8 @@ const multi_1 = require("./language-extensions/multi");
|
|
|
15
15
|
const return_1 = require("./return");
|
|
16
16
|
const transformAsyncTry = (statement, context) => {
|
|
17
17
|
const [tryBlock] = (0, block_1.transformScopeBlock)(context, statement.tryBlock, scope_1.ScopeType.Try);
|
|
18
|
-
if (context.options.luaTarget === __1.LuaTarget.
|
|
18
|
+
if ((context.options.luaTarget === __1.LuaTarget.Lua50 || context.options.luaTarget === __1.LuaTarget.Lua51) &&
|
|
19
|
+
!context.options.lua51AllowTryCatchInAsyncAwait) {
|
|
19
20
|
context.diagnostics.push((0, diagnostics_1.unsupportedForTargetButOverrideAvailable)(statement, "try/catch inside async functions", __1.LuaTarget.Lua51, "lua51AllowTryCatchInAsyncAwait"));
|
|
20
21
|
return tryBlock.statements;
|
|
21
22
|
}
|
|
@@ -57,7 +58,8 @@ const transformTryStatement = (statement, context) => {
|
|
|
57
58
|
return transformAsyncTry(statement, context);
|
|
58
59
|
}
|
|
59
60
|
const [tryBlock, tryScope] = (0, block_1.transformScopeBlock)(context, statement.tryBlock, scope_1.ScopeType.Try);
|
|
60
|
-
if (context.options.luaTarget === __1.LuaTarget.
|
|
61
|
+
if ((context.options.luaTarget === __1.LuaTarget.Lua50 || context.options.luaTarget === __1.LuaTarget.Lua51) &&
|
|
62
|
+
(0, typescript_1.isInGeneratorFunction)(statement)) {
|
|
61
63
|
context.diagnostics.push((0, diagnostics_1.unsupportedForTarget)(statement, "try/catch inside generator functions", __1.LuaTarget.Lua51));
|
|
62
64
|
return tryBlock.statements;
|
|
63
65
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.transformYieldExpression = exports.transformFunctionDeclaration = exports.transformFunctionLikeDeclaration = exports.transformFunctionToExpression = exports.transformParameters = exports.transformFunctionBody = exports.transformFunctionBodyHeader = exports.transformFunctionBodyContent = exports.isFunctionTypeWithProperties = exports.createCallableTable = void 0;
|
|
4
4
|
const ts = require("typescript");
|
|
5
|
+
const CompilerOptions_1 = require("../../CompilerOptions");
|
|
5
6
|
const lua = require("../../LuaAST");
|
|
6
7
|
const utils_1 = require("../../utils");
|
|
7
8
|
const export_1 = require("../utils/export");
|
|
@@ -99,7 +100,7 @@ function transformFunctionBodyHeader(context, bodyScope, parameters, spreadIdent
|
|
|
99
100
|
}
|
|
100
101
|
// Push spread operator here
|
|
101
102
|
if (spreadIdentifier && isRestParameterReferenced(spreadIdentifier, bodyScope)) {
|
|
102
|
-
const spreadTable = (0, lua_ast_1.wrapInTable)(lua.createDotsLiteral());
|
|
103
|
+
const spreadTable = context.luaTarget === CompilerOptions_1.LuaTarget.Lua50 ? lua.createArgLiteral() : (0, lua_ast_1.wrapInTable)(lua.createDotsLiteral());
|
|
103
104
|
headerStatements.push(lua.createVariableDeclarationStatement(spreadIdentifier, spreadTable));
|
|
104
105
|
}
|
|
105
106
|
// Binding pattern statements need to be after spread table is declared
|
|
@@ -28,7 +28,10 @@ function transformNonValueIdentifier(context, identifier, symbol) {
|
|
|
28
28
|
: (0, language_extensions_1.getExtensionKindForNode)(context, identifier);
|
|
29
29
|
if (extensionKind) {
|
|
30
30
|
if (call_extension_1.callExtensions.has(extensionKind)) {
|
|
31
|
-
|
|
31
|
+
// Avoid putting duplicate diagnostic on the name of a variable declaration, due to the inferred type
|
|
32
|
+
if (!(ts.isVariableDeclaration(identifier.parent) && identifier.parent.name === identifier)) {
|
|
33
|
+
context.diagnostics.push((0, diagnostics_1.invalidCallExtensionUse)(identifier));
|
|
34
|
+
}
|
|
32
35
|
// fall through
|
|
33
36
|
}
|
|
34
37
|
else if ((0, identifier_1.isIdentifierExtensionValue)(symbol, extensionKind)) {
|
|
@@ -11,7 +11,9 @@ function isMultiReturnType(type) {
|
|
|
11
11
|
}
|
|
12
12
|
exports.isMultiReturnType = isMultiReturnType;
|
|
13
13
|
function canBeMultiReturnType(type) {
|
|
14
|
-
return
|
|
14
|
+
return ((type.flags & ts.TypeFlags.Any) !== 0 ||
|
|
15
|
+
isMultiReturnType(type) ||
|
|
16
|
+
(type.isUnion() && type.types.some(t => canBeMultiReturnType(t))));
|
|
15
17
|
}
|
|
16
18
|
exports.canBeMultiReturnType = canBeMultiReturnType;
|
|
17
19
|
function isMultiFunctionCall(context, expression) {
|
|
@@ -101,7 +101,8 @@ function transformUnaryOperator(context, node, kind) {
|
|
|
101
101
|
return lua.createUnaryExpression(context.transformExpression(arg), luaOperator);
|
|
102
102
|
}
|
|
103
103
|
function checkHasLua53(context, node, kind) {
|
|
104
|
-
const isBefore53 = context.luaTarget === CompilerOptions_1.LuaTarget.
|
|
104
|
+
const isBefore53 = context.luaTarget === CompilerOptions_1.LuaTarget.Lua50 ||
|
|
105
|
+
context.luaTarget === CompilerOptions_1.LuaTarget.Lua51 ||
|
|
105
106
|
context.luaTarget === CompilerOptions_1.LuaTarget.Lua52 ||
|
|
106
107
|
context.luaTarget === CompilerOptions_1.LuaTarget.LuaJIT ||
|
|
107
108
|
context.luaTarget === CompilerOptions_1.LuaTarget.Universal;
|
|
@@ -11,6 +11,7 @@ const typescript_1 = require("../utils/typescript");
|
|
|
11
11
|
const function_1 = require("./function");
|
|
12
12
|
const expression_list_1 = require("./expression-list");
|
|
13
13
|
const identifier_1 = require("./identifier");
|
|
14
|
+
const CompilerOptions_1 = require("../../CompilerOptions");
|
|
14
15
|
// TODO: Move to object-literal.ts?
|
|
15
16
|
function transformPropertyName(context, node) {
|
|
16
17
|
if (ts.isComputedPropertyName(node)) {
|
|
@@ -31,11 +32,18 @@ function createShorthandIdentifier(context, valueSymbol, propertyIdentifier) {
|
|
|
31
32
|
return (0, identifier_1.transformIdentifierWithSymbol)(context, propertyIdentifier, valueSymbol);
|
|
32
33
|
}
|
|
33
34
|
exports.createShorthandIdentifier = createShorthandIdentifier;
|
|
34
|
-
const transformNumericLiteralExpression = expression => {
|
|
35
|
+
const transformNumericLiteralExpression = (expression, context) => {
|
|
35
36
|
if (expression.text === "Infinity") {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
if (context.luaTarget === CompilerOptions_1.LuaTarget.Lua50) {
|
|
38
|
+
const one = lua.createNumericLiteral(1);
|
|
39
|
+
const zero = lua.createNumericLiteral(0);
|
|
40
|
+
return lua.createBinaryExpression(one, zero, lua.SyntaxKind.DivisionOperator);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
const math = lua.createIdentifier("math");
|
|
44
|
+
const huge = lua.createStringLiteral("huge");
|
|
45
|
+
return lua.createTableIndexExpression(math, huge, expression);
|
|
46
|
+
}
|
|
39
47
|
}
|
|
40
48
|
return lua.createNumericLiteral(Number(expression.text), expression);
|
|
41
49
|
};
|
|
@@ -3,8 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.transformDoStatement = exports.transformWhileStatement = void 0;
|
|
4
4
|
const lua = require("../../../LuaAST");
|
|
5
5
|
const preceding_statements_1 = require("../../utils/preceding-statements");
|
|
6
|
+
const conditional_1 = require("../conditional");
|
|
6
7
|
const utils_1 = require("./utils");
|
|
7
8
|
const transformWhileStatement = (statement, context) => {
|
|
9
|
+
// Check if we need to add diagnostic about Lua truthiness
|
|
10
|
+
(0, conditional_1.checkOnlyTruthyCondition)(statement.expression, context);
|
|
8
11
|
const body = (0, utils_1.transformLoopBody)(context, statement);
|
|
9
12
|
let [conditionPrecedingStatements, condition] = (0, preceding_statements_1.transformInPrecedingStatementScope)(context, () => context.transformExpression(statement.expression));
|
|
10
13
|
// If condition has preceding statements, ensure they are executed every iteration by using the form:
|
|
@@ -25,6 +28,8 @@ const transformWhileStatement = (statement, context) => {
|
|
|
25
28
|
};
|
|
26
29
|
exports.transformWhileStatement = transformWhileStatement;
|
|
27
30
|
const transformDoStatement = (statement, context) => {
|
|
31
|
+
// Check if we need to add diagnostic about Lua truthiness
|
|
32
|
+
(0, conditional_1.checkOnlyTruthyCondition)(statement.expression, context);
|
|
28
33
|
const body = lua.createDoStatement((0, utils_1.transformLoopBody)(context, statement));
|
|
29
34
|
let [conditionPrecedingStatements, condition] = (0, preceding_statements_1.transformInPrecedingStatementScope)(context, () => (0, utils_1.invertCondition)(context.transformExpression(statement.expression)));
|
|
30
35
|
// If condition has preceding statements, ensure they are executed every iteration by using the form:
|