typescript-to-lua 1.34.0 → 1.35.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.
Files changed (116) hide show
  1. package/dist/CompilerOptions.js +34 -4
  2. package/dist/LuaAST.js +34 -1
  3. package/dist/LuaLib.js +35 -2
  4. package/dist/LuaPrinter.js +36 -3
  5. package/dist/cli/diagnostics.js +34 -1
  6. package/dist/cli/parse.js +35 -2
  7. package/dist/cli/report.js +34 -1
  8. package/dist/cli/tsconfig.js +36 -3
  9. package/dist/lualib/5.0/Map.lua +36 -12
  10. package/dist/lualib/5.0/ObjectAssign.lua +4 -2
  11. package/dist/lualib/5.0/Promise.lua +11 -20
  12. package/dist/lualib/5.0/Set.lua +36 -12
  13. package/dist/lualib/5.0/SetDescriptor.lua +7 -0
  14. package/dist/lualib/5.0/lualib_bundle.lua +94 -46
  15. package/dist/lualib/universal/Map.lua +36 -12
  16. package/dist/lualib/universal/ObjectAssign.lua +4 -2
  17. package/dist/lualib/universal/Promise.lua +11 -20
  18. package/dist/lualib/universal/Set.lua +36 -12
  19. package/dist/lualib/universal/SetDescriptor.lua +7 -0
  20. package/dist/lualib/universal/lualib_bundle.lua +94 -46
  21. package/dist/lualib-build/plugin.js +36 -3
  22. package/dist/lualib-build/util.js +34 -1
  23. package/dist/transformation/builtins/array.js +35 -2
  24. package/dist/transformation/builtins/console.js +35 -2
  25. package/dist/transformation/builtins/function.js +34 -1
  26. package/dist/transformation/builtins/index.js +35 -2
  27. package/dist/transformation/builtins/math.js +41 -3
  28. package/dist/transformation/builtins/number.js +42 -5
  29. package/dist/transformation/builtins/object.js +34 -1
  30. package/dist/transformation/builtins/promise.js +34 -1
  31. package/dist/transformation/builtins/string.js +34 -1
  32. package/dist/transformation/builtins/symbol.js +34 -1
  33. package/dist/transformation/context/context.js +35 -2
  34. package/dist/transformation/context/visitors.js +34 -1
  35. package/dist/transformation/index.js +34 -1
  36. package/dist/transformation/pre-transformers/using-transformer.js +34 -1
  37. package/dist/transformation/utils/annotations.js +34 -1
  38. package/dist/transformation/utils/assignment-validation.js +34 -1
  39. package/dist/transformation/utils/diagnostics.js +35 -2
  40. package/dist/transformation/utils/export.js +35 -2
  41. package/dist/transformation/utils/function-context.js +36 -4
  42. package/dist/transformation/utils/language-extensions.js +34 -1
  43. package/dist/transformation/utils/lua-ast.js +35 -2
  44. package/dist/transformation/utils/lualib.js +34 -1
  45. package/dist/transformation/utils/scope.d.ts +6 -0
  46. package/dist/transformation/utils/scope.js +56 -2
  47. package/dist/transformation/utils/typescript/index.js +27 -3
  48. package/dist/transformation/utils/typescript/nodes.js +34 -1
  49. package/dist/transformation/utils/typescript/types.js +34 -1
  50. package/dist/transformation/visitors/access.js +35 -2
  51. package/dist/transformation/visitors/async-await.js +35 -2
  52. package/dist/transformation/visitors/binary-expression/assignments.js +35 -2
  53. package/dist/transformation/visitors/binary-expression/bit.js +41 -2
  54. package/dist/transformation/visitors/binary-expression/compound.js +35 -2
  55. package/dist/transformation/visitors/binary-expression/destructuring-assignments.js +35 -2
  56. package/dist/transformation/visitors/binary-expression/index.js +35 -2
  57. package/dist/transformation/visitors/block.js +35 -2
  58. package/dist/transformation/visitors/break-continue.js +51 -2
  59. package/dist/transformation/visitors/call.js +35 -2
  60. package/dist/transformation/visitors/class/decorators.js +35 -2
  61. package/dist/transformation/visitors/class/index.js +35 -2
  62. package/dist/transformation/visitors/class/members/accessors.js +35 -2
  63. package/dist/transformation/visitors/class/members/constructor.js +35 -2
  64. package/dist/transformation/visitors/class/members/fields.js +34 -1
  65. package/dist/transformation/visitors/class/members/method.js +35 -2
  66. package/dist/transformation/visitors/class/new.js +34 -1
  67. package/dist/transformation/visitors/class/setup.js +35 -2
  68. package/dist/transformation/visitors/class/utils.js +34 -1
  69. package/dist/transformation/visitors/conditional.js +35 -2
  70. package/dist/transformation/visitors/delete.js +35 -2
  71. package/dist/transformation/visitors/enum.js +35 -2
  72. package/dist/transformation/visitors/errors.js +119 -21
  73. package/dist/transformation/visitors/expression-list.js +35 -2
  74. package/dist/transformation/visitors/expression-statement.js +34 -1
  75. package/dist/transformation/visitors/function.js +35 -2
  76. package/dist/transformation/visitors/identifier.js +35 -2
  77. package/dist/transformation/visitors/index.js +34 -1
  78. package/dist/transformation/visitors/language-extensions/iterable.js +35 -2
  79. package/dist/transformation/visitors/language-extensions/multi.js +35 -2
  80. package/dist/transformation/visitors/language-extensions/operators.js +34 -1
  81. package/dist/transformation/visitors/language-extensions/range.js +36 -3
  82. package/dist/transformation/visitors/language-extensions/table.js +34 -1
  83. package/dist/transformation/visitors/language-extensions/vararg.js +34 -1
  84. package/dist/transformation/visitors/literal.js +35 -2
  85. package/dist/transformation/visitors/loops/do-while.js +34 -1
  86. package/dist/transformation/visitors/loops/for-in.js +34 -1
  87. package/dist/transformation/visitors/loops/for-of.js +35 -2
  88. package/dist/transformation/visitors/loops/for.js +35 -2
  89. package/dist/transformation/visitors/loops/utils.js +35 -2
  90. package/dist/transformation/visitors/modules/export.js +36 -3
  91. package/dist/transformation/visitors/modules/import.js +36 -3
  92. package/dist/transformation/visitors/namespace.js +35 -2
  93. package/dist/transformation/visitors/optional-chaining.js +35 -2
  94. package/dist/transformation/visitors/return.js +75 -19
  95. package/dist/transformation/visitors/sourceFile.js +35 -2
  96. package/dist/transformation/visitors/spread.js +35 -2
  97. package/dist/transformation/visitors/switch.js +35 -2
  98. package/dist/transformation/visitors/template.js +35 -2
  99. package/dist/transformation/visitors/typeof.js +35 -2
  100. package/dist/transformation/visitors/typescript.js +34 -1
  101. package/dist/transformation/visitors/unary-expression.js +35 -2
  102. package/dist/transformation/visitors/variable-declaration.js +36 -3
  103. package/dist/transformation/visitors/void.js +35 -2
  104. package/dist/transpilation/bundle.js +34 -1
  105. package/dist/transpilation/diagnostics.d.ts +1 -1
  106. package/dist/transpilation/diagnostics.js +37 -3
  107. package/dist/transpilation/index.js +25 -3
  108. package/dist/transpilation/plugins.js +34 -1
  109. package/dist/transpilation/resolve.js +48 -12
  110. package/dist/transpilation/transformers.js +36 -3
  111. package/dist/transpilation/transpile.js +36 -3
  112. package/dist/transpilation/transpiler.js +56 -9
  113. package/dist/transpilation/utils.js +37 -4
  114. package/dist/tstl.js +37 -4
  115. package/dist/utils.js +37 -4
  116. package/package.json +9 -9
@@ -1,10 +1,43 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.transformConditionalExpression = void 0;
4
37
  exports.transformIfStatement = transformIfStatement;
5
38
  exports.checkOnlyTruthyCondition = checkOnlyTruthyCondition;
6
- const ts = require("typescript");
7
- const lua = require("../../LuaAST");
39
+ const ts = __importStar(require("typescript"));
40
+ const lua = __importStar(require("../../LuaAST"));
8
41
  const preceding_statements_1 = require("../utils/preceding-statements");
9
42
  const scope_1 = require("../utils/scope");
10
43
  const block_1 = require("./block");
@@ -1,8 +1,41 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.transformDeleteExpression = void 0;
4
- const ts = require("typescript");
5
- const lua = require("../../LuaAST");
37
+ const ts = __importStar(require("typescript"));
38
+ const lua = __importStar(require("../../LuaAST"));
6
39
  const lualib_1 = require("../utils/lualib");
7
40
  const diagnostics_1 = require("../utils/diagnostics");
8
41
  const typescript_1 = require("../utils/typescript");
@@ -1,9 +1,42 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.transformEnumDeclaration = void 0;
4
37
  exports.tryGetConstEnumValue = tryGetConstEnumValue;
5
- const ts = require("typescript");
6
- const lua = require("../../LuaAST");
38
+ const ts = __importStar(require("typescript"));
39
+ const lua = __importStar(require("../../LuaAST"));
7
40
  const annotations_1 = require("../utils/annotations");
8
41
  const export_1 = require("../utils/export");
9
42
  const lua_ast_1 = require("../utils/lua-ast");
@@ -1,8 +1,41 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.transformThrowStatement = exports.transformTryStatement = void 0;
4
37
  const __1 = require("../..");
5
- const lua = require("../../LuaAST");
38
+ const lua = __importStar(require("../../LuaAST"));
6
39
  const diagnostics_1 = require("../utils/diagnostics");
7
40
  const lua_ast_1 = require("../utils/lua-ast");
8
41
  const lualib_1 = require("../utils/lualib");
@@ -14,41 +47,90 @@ const identifier_1 = require("./identifier");
14
47
  const multi_1 = require("./language-extensions/multi");
15
48
  const return_1 = require("./return");
16
49
  const transformAsyncTry = (statement, context) => {
17
- const [tryBlock] = (0, block_1.transformScopeBlock)(context, statement.tryBlock, scope_1.ScopeType.Try);
50
+ var _a, _b, _c, _d;
51
+ const [tryBlock, tryScope] = (0, block_1.transformScopeBlock)(context, statement.tryBlock, scope_1.ScopeType.Try);
18
52
  if ((context.options.luaTarget === __1.LuaTarget.Lua50 || context.options.luaTarget === __1.LuaTarget.Lua51) &&
19
53
  !context.options.lua51AllowTryCatchInAsyncAwait) {
20
54
  context.diagnostics.push((0, diagnostics_1.unsupportedForTargetButOverrideAvailable)(statement, "try/catch inside async functions", __1.LuaTarget.Lua51, "lua51AllowTryCatchInAsyncAwait"));
21
55
  return tryBlock.statements;
22
56
  }
23
- // __TS__AsyncAwaiter(<catch block>)
57
+ // __TS__AsyncAwaiter(<try block>)
24
58
  const awaiter = (0, async_await_1.wrapInAsyncAwaiter)(context, tryBlock.statements, false);
25
59
  const awaiterIdentifier = lua.createIdentifier("____try");
26
60
  const awaiterDefinition = lua.createVariableDeclarationStatement(awaiterIdentifier, awaiter);
27
- // local ____try = __TS__AsyncAwaiter(<catch block>)
28
- const result = [awaiterDefinition];
29
- if (statement.finallyBlock) {
30
- const awaiterFinally = lua.createTableIndexExpression(awaiterIdentifier, lua.createStringLiteral("finally"));
31
- const finallyFunction = lua.createFunctionExpression(lua.createBlock(context.transformStatements(statement.finallyBlock.statements)));
32
- const finallyCall = lua.createCallExpression(awaiterFinally, [awaiterIdentifier, finallyFunction], statement.finallyBlock);
33
- // ____try.finally(<finally function>)
34
- result.push(lua.createExpressionStatement(finallyCall));
35
- }
61
+ // Transform catch/finally and collect scope info before building the result
62
+ let catchScope;
63
+ const chainCalls = [];
36
64
  if (statement.catchClause) {
37
- // ____try.catch(<catch function>)
38
- const [catchFunction] = transformCatchClause(context, statement.catchClause);
65
+ // ____try = ____try.catch(<catch function>)
66
+ const [catchFunction, cScope] = transformCatchClause(context, statement.catchClause);
67
+ catchScope = cScope;
39
68
  if (catchFunction.params) {
40
69
  catchFunction.params.unshift(lua.createAnonymousIdentifier());
41
70
  }
71
+ const catchBodyStatements = catchFunction.body ? catchFunction.body.statements : [];
72
+ const asyncWrappedCatch = (0, async_await_1.wrapInAsyncAwaiter)(context, [...catchBodyStatements], false);
73
+ catchFunction.body = lua.createBlock([lua.createReturnStatement([asyncWrappedCatch])]);
42
74
  const awaiterCatch = lua.createTableIndexExpression(awaiterIdentifier, lua.createStringLiteral("catch"));
43
75
  const catchCall = lua.createCallExpression(awaiterCatch, [awaiterIdentifier, catchFunction]);
44
- // await ____try.catch(<catch function>)
45
- const promiseAwait = (0, lualib_1.transformLuaLibFunction)(context, __1.LuaLibFeature.Await, statement, catchCall);
46
- result.push(lua.createExpressionStatement(promiseAwait, statement));
76
+ chainCalls.push(lua.createAssignmentStatement(lua.cloneIdentifier(awaiterIdentifier), catchCall));
47
77
  }
48
- else {
49
- // await ____try
50
- const promiseAwait = (0, lualib_1.transformLuaLibFunction)(context, __1.LuaLibFeature.Await, statement, awaiterIdentifier);
51
- result.push(lua.createExpressionStatement(promiseAwait, statement));
78
+ if (statement.finallyBlock) {
79
+ // ____try = ____try.finally(<finally function>)
80
+ const finallyStatements = context.transformStatements(statement.finallyBlock.statements);
81
+ const asyncWrappedFinally = (0, async_await_1.wrapInAsyncAwaiter)(context, finallyStatements, false);
82
+ const finallyFunction = lua.createFunctionExpression(lua.createBlock([lua.createReturnStatement([asyncWrappedFinally])]));
83
+ const awaiterFinally = lua.createTableIndexExpression(awaiterIdentifier, lua.createStringLiteral("finally"));
84
+ const finallyCall = lua.createCallExpression(awaiterFinally, [awaiterIdentifier, finallyFunction], statement.finallyBlock);
85
+ chainCalls.push(lua.createAssignmentStatement(lua.cloneIdentifier(awaiterIdentifier), finallyCall));
86
+ }
87
+ // __TS__Await(____try)
88
+ const promiseAwait = (0, lualib_1.transformLuaLibFunction)(context, __1.LuaLibFeature.Await, statement, awaiterIdentifier);
89
+ chainCalls.push(lua.createExpressionStatement(promiseAwait, statement));
90
+ const hasReturn = (_a = tryScope.asyncTryHasReturn) !== null && _a !== void 0 ? _a : catchScope === null || catchScope === void 0 ? void 0 : catchScope.asyncTryHasReturn;
91
+ const hasBreak = (_b = tryScope.asyncTryHasBreak) !== null && _b !== void 0 ? _b : catchScope === null || catchScope === void 0 ? void 0 : catchScope.asyncTryHasBreak;
92
+ const hasContinue = (_c = tryScope.asyncTryHasContinue) !== null && _c !== void 0 ? _c : catchScope === null || catchScope === void 0 ? void 0 : catchScope.asyncTryHasContinue;
93
+ // Build result in output order: flag declarations, awaiter, chain calls, post-checks
94
+ const result = [];
95
+ if (hasReturn || hasBreak || hasContinue !== undefined) {
96
+ const flagDecls = [];
97
+ if (hasReturn) {
98
+ flagDecls.push(lua.createIdentifier("____hasReturned"));
99
+ flagDecls.push(lua.createIdentifier("____returnValue"));
100
+ }
101
+ if (hasBreak) {
102
+ flagDecls.push(lua.createIdentifier("____hasBroken"));
103
+ }
104
+ if (hasContinue !== undefined) {
105
+ flagDecls.push(lua.createIdentifier("____hasContinued"));
106
+ }
107
+ result.push(lua.createVariableDeclarationStatement(flagDecls));
108
+ }
109
+ result.push(awaiterDefinition);
110
+ result.push(...chainCalls);
111
+ if (hasReturn) {
112
+ result.push(lua.createIfStatement(lua.createIdentifier("____hasReturned"), lua.createBlock([(0, return_1.createReturnStatement)(context, [lua.createIdentifier("____returnValue")], statement)])));
113
+ }
114
+ if (hasBreak) {
115
+ result.push(lua.createIfStatement(lua.createIdentifier("____hasBroken"), lua.createBlock([lua.createBreakStatement()])));
116
+ }
117
+ if (hasContinue !== undefined) {
118
+ const loopScope = (0, scope_1.findScope)(context, scope_1.ScopeType.Loop);
119
+ const label = `__continue${(_d = loopScope === null || loopScope === void 0 ? void 0 : loopScope.id) !== null && _d !== void 0 ? _d : ""}`;
120
+ const continueStatements = [];
121
+ switch (hasContinue) {
122
+ case scope_1.LoopContinued.WithGoto:
123
+ continueStatements.push(lua.createGotoStatement(label));
124
+ break;
125
+ case scope_1.LoopContinued.WithContinue:
126
+ continueStatements.push(lua.createContinueStatement());
127
+ break;
128
+ case scope_1.LoopContinued.WithRepeatBreak:
129
+ continueStatements.push(lua.createAssignmentStatement(lua.createIdentifier(label), lua.createBooleanLiteral(true)));
130
+ continueStatements.push(lua.createBreakStatement());
131
+ break;
132
+ }
133
+ result.push(lua.createIfStatement(lua.createIdentifier("____hasContinued"), lua.createBlock(continueStatements)));
52
134
  }
53
135
  return result;
54
136
  };
@@ -100,6 +182,11 @@ const transformTryStatement = (statement, context) => {
100
182
  // change return condition from '____returned' to '____try and ____returned'
101
183
  returnCondition = lua.createBinaryExpression(lua.cloneIdentifier(tryResultIdentifier), returnedIdentifier, lua.SyntaxKind.AndOperator);
102
184
  }
185
+ else if (statement.finallyBlock) {
186
+ // try without catch, but with finally — need to capture error for re-throw
187
+ const errorIdentifier = lua.createIdentifier("____error");
188
+ result.push(lua.createVariableDeclarationStatement([tryResultIdentifier, errorIdentifier], tryCall));
189
+ }
103
190
  else {
104
191
  // try without return or catch
105
192
  result.push(lua.createExpressionStatement(tryCall));
@@ -107,6 +194,17 @@ const transformTryStatement = (statement, context) => {
107
194
  if (statement.finallyBlock && statement.finallyBlock.statements.length > 0) {
108
195
  result.push(...context.transformStatements(statement.finallyBlock));
109
196
  }
197
+ // Re-throw error if try had no catch but had a finally.
198
+ // On pcall failure the error is the second return value, which lands in
199
+ // ____hasReturned (when functionReturned) or ____error (otherwise).
200
+ if (!statement.catchClause && statement.finallyBlock) {
201
+ const notTryCondition = lua.createUnaryExpression(lua.cloneIdentifier(tryResultIdentifier), lua.SyntaxKind.NotOperator);
202
+ const errorIdentifier = tryScope.functionReturned
203
+ ? lua.cloneIdentifier(returnedIdentifier)
204
+ : lua.createIdentifier("____error");
205
+ const rethrow = lua.createExpressionStatement(lua.createCallExpression(lua.createIdentifier("error"), [errorIdentifier, lua.createNumericLiteral(0)]));
206
+ result.push(lua.createIfStatement(notTryCondition, lua.createBlock([rethrow])));
207
+ }
110
208
  if (returnCondition && returnedIdentifier) {
111
209
  const returnValues = [];
112
210
  if ((0, multi_1.isInMultiReturnFunction)(context, statement)) {
@@ -1,12 +1,45 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.shouldMoveToTemp = shouldMoveToTemp;
4
37
  exports.moveToPrecedingTemp = moveToPrecedingTemp;
5
38
  exports.transformExpressionList = transformExpressionList;
6
39
  exports.transformOrderedExpressions = transformOrderedExpressions;
7
40
  const assert = require("assert");
8
- const ts = require("typescript");
9
- const lua = require("../../LuaAST");
41
+ const ts = __importStar(require("typescript"));
42
+ const lua = __importStar(require("../../LuaAST"));
10
43
  const context_1 = require("../context");
11
44
  const lualib_1 = require("../utils/lualib");
12
45
  const preceding_statements_1 = require("../utils/preceding-statements");
@@ -1,8 +1,41 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.transformExpressionStatement = void 0;
4
37
  exports.wrapInStatement = wrapInStatement;
5
- const lua = require("../../LuaAST");
38
+ const lua = __importStar(require("../../LuaAST"));
6
39
  const context_1 = require("../context");
7
40
  const binary_expression_1 = require("./binary-expression");
8
41
  const unary_expression_1 = require("./unary-expression");
@@ -1,4 +1,37 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.transformYieldExpression = exports.transformFunctionDeclaration = void 0;
4
37
  exports.createCallableTable = createCallableTable;
@@ -9,9 +42,9 @@ exports.transformFunctionBody = transformFunctionBody;
9
42
  exports.transformParameters = transformParameters;
10
43
  exports.transformFunctionToExpression = transformFunctionToExpression;
11
44
  exports.transformFunctionLikeDeclaration = transformFunctionLikeDeclaration;
12
- const ts = require("typescript");
45
+ const ts = __importStar(require("typescript"));
13
46
  const CompilerOptions_1 = require("../../CompilerOptions");
14
- const lua = require("../../LuaAST");
47
+ const lua = __importStar(require("../../LuaAST"));
15
48
  const utils_1 = require("../../utils");
16
49
  const export_1 = require("../utils/export");
17
50
  const function_context_1 = require("../utils/function-context");
@@ -1,11 +1,44 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.transformIdentifierExpression = void 0;
4
37
  exports.transformIdentifier = transformIdentifier;
5
38
  exports.getCustomNameFromSymbol = getCustomNameFromSymbol;
6
39
  exports.transformIdentifierWithSymbol = transformIdentifierWithSymbol;
7
- const ts = require("typescript");
8
- const lua = require("../../LuaAST");
40
+ const ts = __importStar(require("typescript"));
41
+ const lua = __importStar(require("../../LuaAST"));
9
42
  const builtins_1 = require("../builtins");
10
43
  const promise_1 = require("../builtins/promise");
11
44
  const context_1 = require("../context");
@@ -1,7 +1,40 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.standardVisitors = void 0;
4
- const ts = require("typescript");
37
+ const ts = __importStar(require("typescript"));
5
38
  const access_1 = require("./access");
6
39
  const binary_expression_1 = require("./binary-expression");
7
40
  const block_1 = require("./block");
@@ -1,10 +1,43 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.transformForOfIterableStatement = transformForOfIterableStatement;
4
37
  exports.transformForOfPairsIterableStatement = transformForOfPairsIterableStatement;
5
38
  exports.transformForOfPairsKeyIterableStatement = transformForOfPairsKeyIterableStatement;
6
- const ts = require("typescript");
7
- const lua = require("../../../LuaAST");
39
+ const ts = __importStar(require("typescript"));
40
+ const lua = __importStar(require("../../../LuaAST"));
8
41
  const utils_1 = require("../loops/utils");
9
42
  const variable_declaration_1 = require("../variable-declaration");
10
43
  const diagnostics_1 = require("../../utils/diagnostics");
@@ -1,4 +1,37 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.isMultiReturnType = isMultiReturnType;
4
37
  exports.canBeMultiReturnType = canBeMultiReturnType;
@@ -8,8 +41,8 @@ exports.isMultiReturnCall = isMultiReturnCall;
8
41
  exports.isMultiFunctionNode = isMultiFunctionNode;
9
42
  exports.isInMultiReturnFunction = isInMultiReturnFunction;
10
43
  exports.shouldMultiReturnCallBeWrapped = shouldMultiReturnCallBeWrapped;
11
- const ts = require("typescript");
12
- const extensions = require("../../utils/language-extensions");
44
+ const ts = __importStar(require("typescript"));
45
+ const extensions = __importStar(require("../../utils/language-extensions"));
13
46
  const language_extensions_1 = require("../../utils/language-extensions");
14
47
  const typescript_1 = require("../../utils/typescript");
15
48
  const multiReturnExtensionName = "__tstlMultiReturn";