typescript-to-lua 0.41.2 → 1.1.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 (134) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/dist/CompilerOptions.d.ts +4 -3
  3. package/dist/LuaAST.js +4 -4
  4. package/dist/LuaLib.d.ts +7 -0
  5. package/dist/LuaLib.js +41 -5
  6. package/dist/LuaPrinter.d.ts +6 -2
  7. package/dist/LuaPrinter.js +25 -16
  8. package/dist/cli/diagnostics.js +2 -2
  9. package/dist/cli/report.js +1 -1
  10. package/dist/cli/tsconfig.js +4 -4
  11. package/dist/lualib/ArrayJoin.lua +2 -4
  12. package/dist/lualib/Await.lua +59 -0
  13. package/dist/lualib/Iterator.lua +1 -5
  14. package/dist/lualib/NumberToString.lua +4 -8
  15. package/dist/lualib/OptionalMethodCall.lua +3 -1
  16. package/dist/lualib/ParseInt.lua +1 -3
  17. package/dist/lualib/Promise.lua +172 -0
  18. package/dist/lualib/PromiseAll.lua +44 -0
  19. package/dist/lualib/PromiseAllSettled.lua +48 -0
  20. package/dist/lualib/PromiseAny.lua +41 -0
  21. package/dist/lualib/PromiseRace.lua +28 -0
  22. package/dist/lualib/SourceMapTraceBack.lua +18 -8
  23. package/dist/lualib/StringConcat.lua +1 -1
  24. package/dist/lualib/StringPadEnd.lua +7 -11
  25. package/dist/lualib/StringPadStart.lua +8 -12
  26. package/dist/lualib/StringReplace.lua +8 -13
  27. package/dist/lualib/StringReplaceAll.lua +35 -0
  28. package/dist/lualib/StringSubstring.lua +1 -1
  29. package/dist/lualib/lualib_bundle.lua +660 -239
  30. package/dist/transformation/builtins/array.js +29 -29
  31. package/dist/transformation/builtins/console.js +2 -2
  32. package/dist/transformation/builtins/function.js +9 -9
  33. package/dist/transformation/builtins/global.js +8 -8
  34. package/dist/transformation/builtins/index.js +35 -32
  35. package/dist/transformation/builtins/math.js +4 -4
  36. package/dist/transformation/builtins/number.js +7 -7
  37. package/dist/transformation/builtins/object.js +11 -11
  38. package/dist/transformation/builtins/promise.d.ts +7 -0
  39. package/dist/transformation/builtins/promise.js +46 -0
  40. package/dist/transformation/builtins/string.js +32 -30
  41. package/dist/transformation/builtins/symbol.js +3 -3
  42. package/dist/transformation/context/context.js +5 -5
  43. package/dist/transformation/index.js +1 -1
  44. package/dist/transformation/utils/annotations.d.ts +1 -4
  45. package/dist/transformation/utils/annotations.js +1 -32
  46. package/dist/transformation/utils/assignment-validation.js +8 -7
  47. package/dist/transformation/utils/diagnostics.d.ts +3 -0
  48. package/dist/transformation/utils/diagnostics.js +6 -5
  49. package/dist/transformation/utils/export.js +4 -4
  50. package/dist/transformation/utils/function-context.js +19 -13
  51. package/dist/transformation/utils/lua-ast.js +18 -19
  52. package/dist/transformation/utils/lualib.js +1 -1
  53. package/dist/transformation/utils/safe-names.js +5 -5
  54. package/dist/transformation/utils/scope.d.ts +6 -0
  55. package/dist/transformation/utils/scope.js +70 -40
  56. package/dist/transformation/utils/symbols.js +6 -6
  57. package/dist/transformation/utils/transform.js +3 -3
  58. package/dist/transformation/utils/typescript/nodes.d.ts +2 -0
  59. package/dist/transformation/utils/typescript/nodes.js +21 -1
  60. package/dist/transformation/visitors/access.js +25 -19
  61. package/dist/transformation/visitors/async-await.d.ts +6 -0
  62. package/dist/transformation/visitors/async-await.js +38 -0
  63. package/dist/transformation/visitors/binary-expression/assignments.js +32 -31
  64. package/dist/transformation/visitors/binary-expression/bit.js +4 -4
  65. package/dist/transformation/visitors/binary-expression/compound.js +18 -18
  66. package/dist/transformation/visitors/binary-expression/destructuring-assignments.js +17 -17
  67. package/dist/transformation/visitors/binary-expression/index.js +22 -20
  68. package/dist/transformation/visitors/block.js +6 -6
  69. package/dist/transformation/visitors/break-continue.js +4 -9
  70. package/dist/transformation/visitors/call.js +38 -38
  71. package/dist/transformation/visitors/class/decorators.js +3 -3
  72. package/dist/transformation/visitors/class/index.js +34 -34
  73. package/dist/transformation/visitors/class/members/accessors.js +6 -6
  74. package/dist/transformation/visitors/class/members/constructor.js +7 -7
  75. package/dist/transformation/visitors/class/members/fields.js +6 -6
  76. package/dist/transformation/visitors/class/members/method.js +6 -6
  77. package/dist/transformation/visitors/class/new.js +13 -13
  78. package/dist/transformation/visitors/class/setup.js +11 -11
  79. package/dist/transformation/visitors/class/utils.js +2 -2
  80. package/dist/transformation/visitors/conditional.js +6 -6
  81. package/dist/transformation/visitors/delete.js +4 -4
  82. package/dist/transformation/visitors/enum.js +8 -8
  83. package/dist/transformation/visitors/errors.js +30 -31
  84. package/dist/transformation/visitors/expression-statement.js +10 -6
  85. package/dist/transformation/visitors/function.js +33 -21
  86. package/dist/transformation/visitors/identifier.js +25 -19
  87. package/dist/transformation/visitors/index.js +4 -2
  88. package/dist/transformation/visitors/language-extensions/iterable.js +7 -7
  89. package/dist/transformation/visitors/language-extensions/multi.d.ts +2 -1
  90. package/dist/transformation/visitors/language-extensions/multi.js +8 -4
  91. package/dist/transformation/visitors/language-extensions/operators.js +6 -6
  92. package/dist/transformation/visitors/language-extensions/range.js +6 -6
  93. package/dist/transformation/visitors/language-extensions/table.js +5 -5
  94. package/dist/transformation/visitors/literal.d.ts +1 -2
  95. package/dist/transformation/visitors/literal.js +19 -42
  96. package/dist/transformation/visitors/loops/do-while.js +2 -2
  97. package/dist/transformation/visitors/loops/for-in.js +4 -4
  98. package/dist/transformation/visitors/loops/for-of.js +13 -13
  99. package/dist/transformation/visitors/loops/for.js +3 -3
  100. package/dist/transformation/visitors/loops/utils.js +9 -9
  101. package/dist/transformation/visitors/modules/export.js +13 -13
  102. package/dist/transformation/visitors/modules/import.js +10 -10
  103. package/dist/transformation/visitors/namespace.js +13 -13
  104. package/dist/transformation/visitors/return.d.ts +1 -0
  105. package/dist/transformation/visitors/return.js +41 -49
  106. package/dist/transformation/visitors/sourceFile.js +8 -8
  107. package/dist/transformation/visitors/spread.js +16 -13
  108. package/dist/transformation/visitors/switch.js +132 -30
  109. package/dist/transformation/visitors/template.js +5 -5
  110. package/dist/transformation/visitors/typeof.js +2 -2
  111. package/dist/transformation/visitors/typescript.js +1 -1
  112. package/dist/transformation/visitors/unary-expression.js +9 -9
  113. package/dist/transformation/visitors/variable-declaration.js +29 -30
  114. package/dist/transformation/visitors/void.d.ts +6 -0
  115. package/dist/transformation/visitors/void.js +23 -0
  116. package/dist/transpilation/bundle.d.ts +3 -0
  117. package/dist/transpilation/bundle.js +56 -13
  118. package/dist/transpilation/diagnostics.js +3 -3
  119. package/dist/transpilation/index.js +2 -2
  120. package/dist/transpilation/output-collector.js +2 -2
  121. package/dist/transpilation/plugins.js +1 -1
  122. package/dist/transpilation/resolve.js +28 -14
  123. package/dist/transpilation/transformers.d.ts +1 -0
  124. package/dist/transpilation/transformers.js +61 -25
  125. package/dist/transpilation/transpile.js +7 -7
  126. package/dist/transpilation/transpiler.js +13 -11
  127. package/dist/transpilation/utils.js +3 -2
  128. package/dist/tstl.js +9 -9
  129. package/dist/utils.js +2 -2
  130. package/package.json +16 -13
  131. package/dist/transformation/visitors/jsx/jsx.d.ts +0 -9
  132. package/dist/transformation/visitors/jsx/jsx.js +0 -237
  133. package/dist/transformation/visitors/jsx/xhtml.d.ts +0 -3
  134. package/dist/transformation/visitors/jsx/xhtml.js +0 -260
@@ -1,32 +1,43 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.transformThrowStatement = exports.transformTryStatement = void 0;
4
+ const __1 = require("../..");
4
5
  const lua = require("../../LuaAST");
5
- const annotations_1 = require("../utils/annotations");
6
+ const diagnostics_1 = require("../utils/diagnostics");
6
7
  const lua_ast_1 = require("../utils/lua-ast");
7
8
  const scope_1 = require("../utils/scope");
9
+ const typescript_1 = require("../utils/typescript");
8
10
  const block_1 = require("./block");
9
11
  const identifier_1 = require("./identifier");
10
12
  const multi_1 = require("./language-extensions/multi");
13
+ const return_1 = require("./return");
11
14
  const transformTryStatement = (statement, context) => {
12
- const [tryBlock, tryScope] = block_1.transformScopeBlock(context, statement.tryBlock, scope_1.ScopeType.Try);
15
+ const [tryBlock, tryScope] = (0, block_1.transformScopeBlock)(context, statement.tryBlock, scope_1.ScopeType.Try);
16
+ if (context.options.luaTarget === __1.LuaTarget.Lua51 && (0, typescript_1.isInAsyncFunction)(statement)) {
17
+ context.diagnostics.push((0, diagnostics_1.unsupportedForTarget)(statement, "try/catch inside async functions", __1.LuaTarget.Lua51));
18
+ return tryBlock.statements;
19
+ }
20
+ if (context.options.luaTarget === __1.LuaTarget.Lua51 && (0, typescript_1.isInGeneratorFunction)(statement)) {
21
+ context.diagnostics.push((0, diagnostics_1.unsupportedForTarget)(statement, "try/catch inside generator functions", __1.LuaTarget.Lua51));
22
+ return tryBlock.statements;
23
+ }
13
24
  const tryResultIdentifier = lua.createIdentifier("____try");
14
25
  const returnValueIdentifier = lua.createIdentifier("____returnValue");
15
26
  const result = [];
16
- let returnedIdentifier;
27
+ const returnedIdentifier = lua.createIdentifier("____hasReturned");
17
28
  let returnCondition;
18
29
  const pCall = lua.createIdentifier("pcall");
19
30
  const tryCall = lua.createCallExpression(pCall, [lua.createFunctionExpression(tryBlock)]);
20
31
  if (statement.catchClause && statement.catchClause.block.statements.length > 0) {
21
32
  // try with catch
22
- let [catchBlock, catchScope] = block_1.transformScopeBlock(context, statement.catchClause.block, scope_1.ScopeType.Catch);
23
- if (statement.catchClause.variableDeclaration) {
24
- // Replace ____returned with catch variable
25
- returnedIdentifier = identifier_1.transformIdentifier(context, statement.catchClause.variableDeclaration.name);
26
- }
27
- else if (tryScope.functionReturned || catchScope.functionReturned) {
28
- returnedIdentifier = lua.createIdentifier("____returned");
29
- }
33
+ const [catchBlock, catchScope] = (0, block_1.transformScopeBlock)(context, statement.catchClause.block, scope_1.ScopeType.Catch);
34
+ const catchParameter = statement.catchClause.variableDeclaration
35
+ ? (0, identifier_1.transformIdentifier)(context, statement.catchClause.variableDeclaration.name)
36
+ : undefined;
37
+ const catchParameters = () => (catchParameter ? [lua.cloneIdentifier(catchParameter)] : []);
38
+ const catchIdentifier = lua.createIdentifier("____catch");
39
+ const catchFunction = lua.createFunctionExpression(catchBlock, catchParameters());
40
+ result.push(lua.createVariableDeclarationStatement(catchIdentifier, catchFunction));
30
41
  const tryReturnIdentifiers = [tryResultIdentifier]; // ____try
31
42
  if (returnedIdentifier) {
32
43
  tryReturnIdentifiers.push(returnedIdentifier); // ____returned or catch variable
@@ -36,18 +47,15 @@ const transformTryStatement = (statement, context) => {
36
47
  }
37
48
  }
38
49
  result.push(lua.createVariableDeclarationStatement(tryReturnIdentifiers, tryCall));
39
- if ((tryScope.functionReturned || catchScope.functionReturned) && returnedIdentifier) {
40
- // Wrap catch in function if try or catch has return
41
- const catchCall = lua.createCallExpression(lua.createFunctionExpression(catchBlock), []);
42
- const catchAssign = lua.createAssignmentStatement([lua.cloneIdentifier(returnedIdentifier), lua.cloneIdentifier(returnValueIdentifier)], catchCall);
43
- catchBlock = lua.createBlock([catchAssign]);
44
- }
50
+ // Wrap catch in function if try or catch has return
51
+ const catchCall = lua.createCallExpression(catchIdentifier, [lua.cloneIdentifier(returnedIdentifier)]);
52
+ const catchAssign = lua.createAssignmentStatement([lua.cloneIdentifier(returnedIdentifier), lua.cloneIdentifier(returnValueIdentifier)], catchCall);
45
53
  const notTryCondition = lua.createUnaryExpression(tryResultIdentifier, lua.SyntaxKind.NotOperator);
46
- result.push(lua.createIfStatement(notTryCondition, catchBlock));
54
+ result.push(lua.createIfStatement(notTryCondition, lua.createBlock([catchAssign])));
47
55
  }
48
56
  else if (tryScope.functionReturned) {
49
57
  // try with return, but no catch
50
- returnedIdentifier = lua.createIdentifier("____returned");
58
+ // returnedIdentifier = lua.createIdentifier("____returned");
51
59
  const returnedVariables = [tryResultIdentifier, returnedIdentifier, returnValueIdentifier];
52
60
  result.push(lua.createVariableDeclarationStatement(returnedVariables, tryCall));
53
61
  // change return condition from '____returned' to '____try and ____returned'
@@ -61,23 +69,14 @@ const transformTryStatement = (statement, context) => {
61
69
  result.push(...context.transformStatements(statement.finallyBlock));
62
70
  }
63
71
  if (returnCondition && returnedIdentifier) {
64
- // With catch clause:
65
- // if ____returned then return ____returnValue end
66
- // No catch clause:
67
- // if ____try and ____returned then return ____returnValue end
68
72
  const returnValues = [];
69
- const parentTryCatch = scope_1.findScope(context, scope_1.ScopeType.Function | scope_1.ScopeType.Try | scope_1.ScopeType.Catch);
70
- if (parentTryCatch && parentTryCatch.type !== scope_1.ScopeType.Function) {
71
- // Nested try/catch needs to prefix a 'true' return value
72
- returnValues.push(lua.createBooleanLiteral(true));
73
- }
74
- if (annotations_1.isInTupleReturnFunction(context, statement) || multi_1.isInMultiReturnFunction(context, statement)) {
75
- returnValues.push(lua_ast_1.createUnpackCall(context, lua.cloneIdentifier(returnValueIdentifier)));
73
+ if ((0, multi_1.isInMultiReturnFunction)(context, statement)) {
74
+ returnValues.push((0, lua_ast_1.createUnpackCall)(context, lua.cloneIdentifier(returnValueIdentifier)));
76
75
  }
77
76
  else {
78
77
  returnValues.push(lua.cloneIdentifier(returnValueIdentifier));
79
78
  }
80
- const returnStatement = lua.createReturnStatement(returnValues);
79
+ const returnStatement = (0, return_1.createReturnStatement)(context, returnValues, statement);
81
80
  const ifReturnedStatement = lua.createIfStatement(returnCondition, lua.createBlock([returnStatement]));
82
81
  result.push(ifReturnedStatement);
83
82
  }
@@ -6,19 +6,23 @@ const lua = require("../../LuaAST");
6
6
  const binary_expression_1 = require("./binary-expression");
7
7
  const table_1 = require("./language-extensions/table");
8
8
  const unary_expression_1 = require("./unary-expression");
9
+ const void_1 = require("./void");
9
10
  const transformExpressionStatement = (node, context) => {
10
11
  const expression = node.expression;
11
- if (ts.isCallExpression(expression) && table_1.isTableDeleteCall(context, expression)) {
12
- return table_1.transformTableDeleteExpression(context, expression);
12
+ if (ts.isCallExpression(expression) && (0, table_1.isTableDeleteCall)(context, expression)) {
13
+ return (0, table_1.transformTableDeleteExpression)(context, expression);
13
14
  }
14
- if (ts.isCallExpression(expression) && table_1.isTableSetCall(context, expression)) {
15
- return table_1.transformTableSetExpression(context, expression);
15
+ if (ts.isCallExpression(expression) && (0, table_1.isTableSetCall)(context, expression)) {
16
+ return (0, table_1.transformTableSetExpression)(context, expression);
16
17
  }
17
- const unaryExpressionResult = unary_expression_1.transformUnaryExpressionStatement(context, node);
18
+ if (ts.isVoidExpression(expression)) {
19
+ return (0, void_1.transformVoidExpressionStatement)(expression, context);
20
+ }
21
+ const unaryExpressionResult = (0, unary_expression_1.transformUnaryExpressionStatement)(context, node);
18
22
  if (unaryExpressionResult) {
19
23
  return unaryExpressionResult;
20
24
  }
21
- const binaryExpressionResult = binary_expression_1.transformBinaryExpressionStatement(context, node);
25
+ const binaryExpressionResult = (0, binary_expression_1.transformBinaryExpressionStatement)(context, node);
22
26
  if (binaryExpressionResult) {
23
27
  return binaryExpressionResult;
24
28
  }
@@ -4,11 +4,14 @@ exports.transformYieldExpression = exports.transformFunctionDeclaration = export
4
4
  const ts = require("typescript");
5
5
  const lua = require("../../LuaAST");
6
6
  const utils_1 = require("../../utils");
7
+ const annotations_1 = require("../utils/annotations");
8
+ const diagnostics_1 = require("../utils/diagnostics");
7
9
  const export_1 = require("../utils/export");
8
10
  const function_context_1 = require("../utils/function-context");
9
11
  const lua_ast_1 = require("../utils/lua-ast");
10
12
  const lualib_1 = require("../utils/lualib");
11
13
  const scope_1 = require("../utils/scope");
14
+ const async_await_1 = require("./async-await");
12
15
  const identifier_1 = require("./identifier");
13
16
  const return_1 = require("./return");
14
17
  const variable_declaration_1 = require("./variable-declaration");
@@ -31,10 +34,10 @@ function isRestParameterReferenced(identifier, scope) {
31
34
  }
32
35
  function transformFunctionBodyContent(context, body) {
33
36
  if (!ts.isBlock(body)) {
34
- const returnStatement = return_1.transformExpressionBodyToReturnStatement(context, body);
37
+ const returnStatement = (0, return_1.transformExpressionBodyToReturnStatement)(context, body);
35
38
  return [returnStatement];
36
39
  }
37
- const bodyStatements = scope_1.performHoisting(context, context.transformStatements(body.statements));
40
+ const bodyStatements = (0, scope_1.performHoisting)(context, context.transformStatements(body.statements));
38
41
  return bodyStatements;
39
42
  }
40
43
  exports.transformFunctionBodyContent = transformFunctionBodyContent;
@@ -51,16 +54,16 @@ function transformFunctionBodyHeader(context, bodyScope, parameters, spreadIdent
51
54
  headerStatements.push(transformParameterDefaultValueDeclaration(context, identifier, declaration.initializer));
52
55
  }
53
56
  // Binding pattern
54
- bindingPatternDeclarations.push(...variable_declaration_1.transformBindingPattern(context, declaration.name, identifier));
57
+ bindingPatternDeclarations.push(...(0, variable_declaration_1.transformBindingPattern)(context, declaration.name, identifier));
55
58
  }
56
59
  else if (declaration.initializer !== undefined) {
57
60
  // Default parameter
58
- headerStatements.push(transformParameterDefaultValueDeclaration(context, identifier_1.transformIdentifier(context, declaration.name), declaration.initializer));
61
+ headerStatements.push(transformParameterDefaultValueDeclaration(context, (0, identifier_1.transformIdentifier)(context, declaration.name), declaration.initializer));
59
62
  }
60
63
  }
61
64
  // Push spread operator here
62
65
  if (spreadIdentifier && isRestParameterReferenced(spreadIdentifier, bodyScope)) {
63
- const spreadTable = lua_ast_1.wrapInTable(lua.createDotsLiteral());
66
+ const spreadTable = (0, lua_ast_1.wrapInTable)(lua.createDotsLiteral());
64
67
  headerStatements.push(lua.createVariableDeclarationStatement(spreadIdentifier, spreadTable));
65
68
  }
66
69
  // Binding pattern statements need to be after spread table is declared
@@ -69,11 +72,14 @@ function transformFunctionBodyHeader(context, bodyScope, parameters, spreadIdent
69
72
  }
70
73
  exports.transformFunctionBodyHeader = transformFunctionBodyHeader;
71
74
  function transformFunctionBody(context, parameters, body, spreadIdentifier, node) {
72
- const scope = scope_1.pushScope(context, scope_1.ScopeType.Function);
75
+ const scope = (0, scope_1.pushScope)(context, scope_1.ScopeType.Function);
73
76
  scope.node = node;
74
- const bodyStatements = transformFunctionBodyContent(context, body);
77
+ let bodyStatements = transformFunctionBodyContent(context, body);
78
+ if (node && (0, async_await_1.isAsyncFunction)(node)) {
79
+ bodyStatements = (0, async_await_1.wrapInAsyncAwaiter)(context, bodyStatements);
80
+ }
75
81
  const headerStatements = transformFunctionBodyHeader(context, scope, parameters, spreadIdentifier);
76
- scope_1.popScope(context);
82
+ (0, scope_1.popScope)(context);
77
83
  return [[...headerStatements, ...bodyStatements], scope];
78
84
  }
79
85
  exports.transformFunctionBody = transformFunctionBody;
@@ -95,7 +101,7 @@ function transformParameters(context, parameters, functionContext) {
95
101
  // See transformFunctionBody for how these values are destructured
96
102
  const paramName = ts.isObjectBindingPattern(param.name) || ts.isArrayBindingPattern(param.name)
97
103
  ? lua.createIdentifier(`____bindingPattern${identifierIndex++}`)
98
- : identifier_1.transformIdentifier(context, param.name);
104
+ : (0, identifier_1.transformIdentifier)(context, param.name);
99
105
  // This parameter is a spread parameter (...param)
100
106
  if (!param.dotDotDotToken) {
101
107
  paramNames.push(paramName);
@@ -110,10 +116,10 @@ function transformParameters(context, parameters, functionContext) {
110
116
  }
111
117
  exports.transformParameters = transformParameters;
112
118
  function transformFunctionToExpression(context, node) {
113
- utils_1.assert(node.body);
119
+ (0, utils_1.assert)(node.body);
114
120
  const type = context.checker.getTypeAtLocation(node);
115
121
  let functionContext;
116
- if (function_context_1.getFunctionContextType(context, type) !== function_context_1.ContextType.Void) {
122
+ if ((0, function_context_1.getFunctionContextType)(context, type) !== function_context_1.ContextType.Void) {
117
123
  if (ts.isArrowFunction(node)) {
118
124
  // dummy context for arrow functions with parameters
119
125
  if (node.parameters.length > 0) {
@@ -122,7 +128,7 @@ function transformFunctionToExpression(context, node) {
122
128
  }
123
129
  else {
124
130
  // self context
125
- functionContext = lua_ast_1.createSelfIdentifier();
131
+ functionContext = (0, lua_ast_1.createSelfIdentifier)();
126
132
  }
127
133
  }
128
134
  let flags = lua.FunctionExpressionFlags.None;
@@ -136,7 +142,7 @@ function transformFunctionToExpression(context, node) {
136
142
  const functionExpression = lua.createFunctionExpression(lua.createBlock(transformedBody), paramNames, dotsLiteral, flags, node);
137
143
  return [
138
144
  node.asteriskToken
139
- ? lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.Generator, undefined, functionExpression)
145
+ ? (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.Generator, undefined, functionExpression)
140
146
  : functionExpression,
141
147
  functionScope,
142
148
  ];
@@ -147,6 +153,9 @@ function transformFunctionLikeDeclaration(node, context) {
147
153
  // This code can be reached only from object methods, which is TypeScript error
148
154
  return lua.createNilLiteral();
149
155
  }
156
+ if ((0, annotations_1.getNodeAnnotations)(node).has(annotations_1.AnnotationKind.TupleReturn)) {
157
+ context.diagnostics.push((0, diagnostics_1.annotationRemoved)(node, annotations_1.AnnotationKind.TupleReturn));
158
+ }
150
159
  const [functionExpression, functionScope] = transformFunctionToExpression(context, node);
151
160
  // Handle named function expressions which reference themselves
152
161
  if (ts.isFunctionExpression(node) && node.name && functionScope.referencedSymbols) {
@@ -156,12 +165,12 @@ function transformFunctionLikeDeclaration(node, context) {
156
165
  const isReferenced = [...functionScope.referencedSymbols].some(([, nodes]) => nodes.some(n => { var _a; return ((_a = context.checker.getSymbolAtLocation(n)) === null || _a === void 0 ? void 0 : _a.valueDeclaration) === symbol.valueDeclaration; }));
157
166
  // Only wrap if the name is actually referenced inside the function
158
167
  if (isReferenced) {
159
- const nameIdentifier = identifier_1.transformIdentifier(context, node.name);
168
+ const nameIdentifier = (0, identifier_1.transformIdentifier)(context, node.name);
160
169
  // We cannot use transformToImmediatelyInvokedFunctionExpression() here because we need to transpile
161
170
  // the function first to determine if it's self-referencing. Fortunately, this does not cause issues
162
171
  // with var-arg optimization because the IIFE is just wrapping another function which will already push
163
172
  // another scope.
164
- return lua_ast_1.createImmediatelyInvokedFunctionExpression([lua.createVariableDeclarationStatement(nameIdentifier, functionExpression)], lua.cloneIdentifier(nameIdentifier));
173
+ return (0, lua_ast_1.createImmediatelyInvokedFunctionExpression)([lua.createVariableDeclarationStatement(nameIdentifier, functionExpression)], lua.cloneIdentifier(nameIdentifier));
165
174
  }
166
175
  }
167
176
  }
@@ -170,32 +179,35 @@ function transformFunctionLikeDeclaration(node, context) {
170
179
  exports.transformFunctionLikeDeclaration = transformFunctionLikeDeclaration;
171
180
  const transformFunctionDeclaration = (node, context) => {
172
181
  var _a;
182
+ if ((0, annotations_1.getNodeAnnotations)(node).has(annotations_1.AnnotationKind.TupleReturn)) {
183
+ context.diagnostics.push((0, diagnostics_1.annotationRemoved)(node, annotations_1.AnnotationKind.TupleReturn));
184
+ }
173
185
  // Don't transform functions without body (overload declarations)
174
186
  if (node.body === undefined) {
175
187
  return undefined;
176
188
  }
177
- if (export_1.hasDefaultExportModifier(node)) {
178
- return lua.createAssignmentStatement(lua.createTableIndexExpression(lua_ast_1.createExportsIdentifier(), export_1.createDefaultExportStringLiteral(node)), transformFunctionLikeDeclaration(node, context));
189
+ if ((0, export_1.hasDefaultExportModifier)(node)) {
190
+ return lua.createAssignmentStatement(lua.createTableIndexExpression((0, lua_ast_1.createExportsIdentifier)(), (0, export_1.createDefaultExportStringLiteral)(node)), transformFunctionLikeDeclaration(node, context));
179
191
  }
180
192
  const [functionExpression, functionScope] = transformFunctionToExpression(context, node);
181
193
  // Name being undefined without default export is a TypeScript error
182
- const name = node.name ? identifier_1.transformIdentifier(context, node.name) : lua.createAnonymousIdentifier();
194
+ const name = node.name ? (0, identifier_1.transformIdentifier)(context, node.name) : lua.createAnonymousIdentifier();
183
195
  // Remember symbols referenced in this function for hoisting later
184
196
  if (name.symbolId !== undefined) {
185
- const scope = scope_1.peekScope(context);
197
+ const scope = (0, scope_1.peekScope)(context);
186
198
  if (!scope.functionDefinitions) {
187
199
  scope.functionDefinitions = new Map();
188
200
  }
189
201
  const functionInfo = { referencedSymbols: (_a = functionScope.referencedSymbols) !== null && _a !== void 0 ? _a : new Map() };
190
202
  scope.functionDefinitions.set(name.symbolId, functionInfo);
191
203
  }
192
- return lua_ast_1.createLocalOrExportedOrGlobalDeclaration(context, name, functionExpression, node);
204
+ return (0, lua_ast_1.createLocalOrExportedOrGlobalDeclaration)(context, name, functionExpression, node);
193
205
  };
194
206
  exports.transformFunctionDeclaration = transformFunctionDeclaration;
195
207
  const transformYieldExpression = (expression, context) => {
196
208
  const parameters = expression.expression ? [context.transformExpression(expression.expression)] : [];
197
209
  return expression.asteriskToken
198
- ? lualib_1.transformLuaLibFunction(context, lualib_1.LuaLibFeature.DelegatedYield, expression, ...parameters)
210
+ ? (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.DelegatedYield, expression, ...parameters)
199
211
  : lua.createCallExpression(lua.createTableIndexExpression(lua.createIdentifier("coroutine"), lua.createStringLiteral("yield")), parameters, expression);
200
212
  };
201
213
  exports.transformYieldExpression = transformYieldExpression;
@@ -4,9 +4,11 @@ exports.transformIdentifierExpression = exports.transformIdentifier = void 0;
4
4
  const ts = require("typescript");
5
5
  const lua = require("../../LuaAST");
6
6
  const builtins_1 = require("../builtins");
7
+ const promise_1 = require("../builtins/promise");
7
8
  const annotations_1 = require("../utils/annotations");
8
9
  const diagnostics_1 = require("../utils/diagnostics");
9
10
  const export_1 = require("../utils/export");
11
+ const lualib_1 = require("../utils/lualib");
10
12
  const safe_names_1 = require("../utils/safe-names");
11
13
  const symbols_1 = require("../utils/symbols");
12
14
  const multi_1 = require("./language-extensions/multi");
@@ -15,48 +17,52 @@ const range_1 = require("./language-extensions/range");
15
17
  const table_1 = require("./language-extensions/table");
16
18
  const vararg_1 = require("./language-extensions/vararg");
17
19
  function transformIdentifier(context, identifier) {
18
- if (multi_1.isMultiFunctionNode(context, identifier)) {
19
- context.diagnostics.push(diagnostics_1.invalidMultiFunctionUse(identifier));
20
+ if ((0, multi_1.isMultiFunctionNode)(context, identifier)) {
21
+ context.diagnostics.push((0, diagnostics_1.invalidMultiFunctionUse)(identifier));
20
22
  return lua.createAnonymousIdentifier(identifier);
21
23
  }
22
- if (operators_1.isOperatorMapping(context, identifier)) {
23
- context.diagnostics.push(diagnostics_1.invalidOperatorMappingUse(identifier));
24
+ if ((0, operators_1.isOperatorMapping)(context, identifier)) {
25
+ context.diagnostics.push((0, diagnostics_1.invalidOperatorMappingUse)(identifier));
24
26
  }
25
- if (table_1.isTableExtensionIdentifier(context, identifier)) {
26
- context.diagnostics.push(diagnostics_1.invalidTableExtensionUse(identifier));
27
+ if ((0, table_1.isTableExtensionIdentifier)(context, identifier)) {
28
+ context.diagnostics.push((0, diagnostics_1.invalidTableExtensionUse)(identifier));
27
29
  }
28
- if (range_1.isRangeFunctionNode(context, identifier)) {
29
- context.diagnostics.push(diagnostics_1.invalidRangeUse(identifier));
30
+ if ((0, range_1.isRangeFunctionNode)(context, identifier)) {
31
+ context.diagnostics.push((0, diagnostics_1.invalidRangeUse)(identifier));
30
32
  return lua.createAnonymousIdentifier(identifier);
31
33
  }
32
- if (vararg_1.isVarargConstantNode(context, identifier)) {
33
- context.diagnostics.push(diagnostics_1.invalidVarargUse(identifier));
34
+ if ((0, vararg_1.isVarargConstantNode)(context, identifier)) {
35
+ context.diagnostics.push((0, diagnostics_1.invalidVarargUse)(identifier));
34
36
  return lua.createAnonymousIdentifier(identifier);
35
37
  }
36
- if (annotations_1.isForRangeType(context, identifier)) {
37
- context.diagnostics.push(diagnostics_1.annotationRemoved(identifier, annotations_1.AnnotationKind.ForRange));
38
+ if ((0, annotations_1.isForRangeType)(context, identifier)) {
39
+ context.diagnostics.push((0, diagnostics_1.annotationRemoved)(identifier, annotations_1.AnnotationKind.ForRange));
38
40
  }
39
- const text = safe_names_1.hasUnsafeIdentifierName(context, identifier) ? safe_names_1.createSafeName(identifier.text) : identifier.text;
40
- const symbolId = symbols_1.getIdentifierSymbolId(context, identifier);
41
+ if ((0, promise_1.isPromiseClass)(context, identifier)) {
42
+ (0, lualib_1.importLuaLibFeature)(context, lualib_1.LuaLibFeature.Promise);
43
+ return (0, promise_1.createPromiseIdentifier)(identifier);
44
+ }
45
+ const text = (0, safe_names_1.hasUnsafeIdentifierName)(context, identifier) ? (0, safe_names_1.createSafeName)(identifier.text) : identifier.text;
46
+ const symbolId = (0, symbols_1.getIdentifierSymbolId)(context, identifier);
41
47
  return lua.createIdentifier(text, identifier, symbolId, identifier.text);
42
48
  }
43
49
  exports.transformIdentifier = transformIdentifier;
44
50
  const transformIdentifierExpression = (node, context) => {
45
51
  const symbol = context.checker.getSymbolAtLocation(node);
46
52
  if (symbol) {
47
- const exportScope = export_1.getSymbolExportScope(context, symbol);
53
+ const exportScope = (0, export_1.getSymbolExportScope)(context, symbol);
48
54
  if (exportScope) {
49
55
  const name = symbol.name;
50
- const text = safe_names_1.hasUnsafeIdentifierName(context, node) ? safe_names_1.createSafeName(name) : name;
51
- const symbolId = symbols_1.getIdentifierSymbolId(context, node);
56
+ const text = (0, safe_names_1.hasUnsafeIdentifierName)(context, node) ? (0, safe_names_1.createSafeName)(name) : name;
57
+ const symbolId = (0, symbols_1.getIdentifierSymbolId)(context, node);
52
58
  const identifier = lua.createIdentifier(text, node, symbolId, name);
53
- return export_1.createExportedIdentifier(context, identifier, exportScope);
59
+ return (0, export_1.createExportedIdentifier)(context, identifier, exportScope);
54
60
  }
55
61
  }
56
62
  if (node.originalKeywordKind === ts.SyntaxKind.UndefinedKeyword) {
57
63
  return lua.createNilLiteral();
58
64
  }
59
- const builtinResult = builtins_1.transformBuiltinIdentifierExpression(context, node);
65
+ const builtinResult = (0, builtins_1.transformBuiltinIdentifierExpression)(context, node);
60
66
  if (builtinResult) {
61
67
  return builtinResult;
62
68
  }
@@ -33,14 +33,15 @@ const typeof_1 = require("./typeof");
33
33
  const typescript_1 = require("./typescript");
34
34
  const unary_expression_1 = require("./unary-expression");
35
35
  const variable_declaration_1 = require("./variable-declaration");
36
- const jsx_1 = require("./jsx/jsx");
36
+ const async_await_1 = require("./async-await");
37
+ const void_1 = require("./void");
37
38
  const transformEmptyStatement = () => undefined;
38
39
  const transformParenthesizedExpression = (node, context) => context.transformExpression(node.expression);
39
40
  exports.standardVisitors = {
40
41
  ...literal_1.literalVisitors,
41
42
  ...typescript_1.typescriptVisitors,
42
- ...jsx_1.jsxVisitors,
43
43
  [ts.SyntaxKind.ArrowFunction]: function_1.transformFunctionLikeDeclaration,
44
+ [ts.SyntaxKind.AwaitExpression]: async_await_1.transformAwaitExpression,
44
45
  [ts.SyntaxKind.BinaryExpression]: binary_expression_1.transformBinaryExpression,
45
46
  [ts.SyntaxKind.Block]: block_1.transformBlock,
46
47
  [ts.SyntaxKind.BreakStatement]: break_continue_1.transformBreakStatement,
@@ -88,5 +89,6 @@ exports.standardVisitors = {
88
89
  [ts.SyntaxKind.VariableStatement]: variable_declaration_1.transformVariableStatement,
89
90
  [ts.SyntaxKind.WhileStatement]: do_while_1.transformWhileStatement,
90
91
  [ts.SyntaxKind.YieldExpression]: function_1.transformYieldExpression,
92
+ [ts.SyntaxKind.VoidExpression]: void_1.transformVoidExpression,
91
93
  };
92
94
  //# sourceMappingURL=index.js.map
@@ -30,12 +30,12 @@ function transformForOfMultiIterableStatement(context, statement, block) {
30
30
  if (ts.isVariableDeclarationList(statement.initializer)) {
31
31
  // Variables declared in for loop
32
32
  // for ${initializer} in ${iterable} do
33
- const binding = utils_1.getVariableDeclarationBinding(context, statement.initializer);
33
+ const binding = (0, utils_1.getVariableDeclarationBinding)(context, statement.initializer);
34
34
  if (ts.isArrayBindingPattern(binding)) {
35
- identifiers = binding.elements.map(e => variable_declaration_1.transformArrayBindingElement(context, e));
35
+ identifiers = binding.elements.map(e => (0, variable_declaration_1.transformArrayBindingElement)(context, e));
36
36
  }
37
37
  else {
38
- context.diagnostics.push(diagnostics_1.invalidMultiIterableWithoutDestructuring(binding));
38
+ context.diagnostics.push((0, diagnostics_1.invalidMultiIterableWithoutDestructuring)(binding));
39
39
  }
40
40
  }
41
41
  else if (ts.isArrayLiteralExpression(statement.initializer)) {
@@ -44,11 +44,11 @@ function transformForOfMultiIterableStatement(context, statement, block) {
44
44
  // ${initializer} = ____value0
45
45
  identifiers = statement.initializer.elements.map((_, i) => lua.createIdentifier(`____value${i}`));
46
46
  if (identifiers.length > 0) {
47
- block.statements.unshift(lua.createAssignmentStatement(statement.initializer.elements.map(e => utils_2.cast(context.transformExpression(e), lua.isAssignmentLeftHandSideExpression)), identifiers));
47
+ block.statements.unshift(lua.createAssignmentStatement(statement.initializer.elements.map(e => (0, utils_2.cast)(context.transformExpression(e), lua.isAssignmentLeftHandSideExpression)), identifiers));
48
48
  }
49
49
  }
50
50
  else {
51
- context.diagnostics.push(diagnostics_1.invalidMultiIterableWithoutDestructuring(statement.initializer));
51
+ context.diagnostics.push((0, diagnostics_1.invalidMultiIterableWithoutDestructuring)(statement.initializer));
52
52
  }
53
53
  if (identifiers.length === 0) {
54
54
  identifiers.push(lua.createAnonymousIdentifier());
@@ -58,11 +58,11 @@ function transformForOfMultiIterableStatement(context, statement, block) {
58
58
  function transformForOfIterableStatement(context, statement, block) {
59
59
  var _a;
60
60
  const type = context.checker.getTypeAtLocation(statement.expression);
61
- if (((_a = type.aliasTypeArguments) === null || _a === void 0 ? void 0 : _a.length) === 2 && multi_1.isMultiReturnType(type.aliasTypeArguments[0])) {
61
+ if (((_a = type.aliasTypeArguments) === null || _a === void 0 ? void 0 : _a.length) === 2 && (0, multi_1.isMultiReturnType)(type.aliasTypeArguments[0])) {
62
62
  return transformForOfMultiIterableStatement(context, statement, block);
63
63
  }
64
64
  const luaIterator = context.transformExpression(statement.expression);
65
- const identifier = utils_1.transformForInitializer(context, statement.initializer, block);
65
+ const identifier = (0, utils_1.transformForInitializer)(context, statement.initializer, block);
66
66
  return lua.createForInStatement(block, [identifier], [luaIterator], statement);
67
67
  }
68
68
  exports.transformForOfIterableStatement = transformForOfIterableStatement;
@@ -1,10 +1,11 @@
1
1
  import * as ts from "typescript";
2
2
  import { TransformationContext } from "../../context";
3
3
  export declare function isMultiReturnType(type: ts.Type): boolean;
4
+ export declare function canBeMultiReturnType(type: ts.Type): boolean;
4
5
  export declare function isMultiFunctionCall(context: TransformationContext, expression: ts.CallExpression): boolean;
5
6
  export declare function returnsMultiType(context: TransformationContext, node: ts.CallExpression): boolean;
6
7
  export declare function isMultiReturnCall(context: TransformationContext, expression: ts.Expression): boolean;
7
8
  export declare function isMultiFunctionNode(context: TransformationContext, node: ts.Node): boolean;
8
9
  export declare function isInMultiReturnFunction(context: TransformationContext, node: ts.Node): boolean;
9
10
  export declare function shouldMultiReturnCallBeWrapped(context: TransformationContext, node: ts.CallExpression): boolean;
10
- export declare function findMultiAssignmentViolations(context: TransformationContext, node: ts.ObjectLiteralExpressionBase<ts.ObjectLiteralElement>): ts.Node[];
11
+ export declare function findMultiAssignmentViolations(context: TransformationContext, node: ts.ObjectLiteralExpression): ts.Node[];
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.findMultiAssignmentViolations = exports.shouldMultiReturnCallBeWrapped = exports.isInMultiReturnFunction = exports.isMultiFunctionNode = exports.isMultiReturnCall = exports.returnsMultiType = exports.isMultiFunctionCall = exports.isMultiReturnType = void 0;
3
+ exports.findMultiAssignmentViolations = exports.shouldMultiReturnCallBeWrapped = exports.isInMultiReturnFunction = exports.isMultiFunctionNode = exports.isMultiReturnCall = exports.returnsMultiType = exports.isMultiFunctionCall = exports.canBeMultiReturnType = exports.isMultiReturnType = void 0;
4
4
  const ts = require("typescript");
5
5
  const extensions = require("../../utils/language-extensions");
6
6
  const typescript_1 = require("../../utils/typescript");
@@ -10,6 +10,10 @@ function isMultiReturnType(type) {
10
10
  return extensions.isExtensionType(type, extensions.ExtensionKind.MultiType);
11
11
  }
12
12
  exports.isMultiReturnType = isMultiReturnType;
13
+ function canBeMultiReturnType(type) {
14
+ return isMultiReturnType(type) || (type.isUnion() && type.types.some(canBeMultiReturnType));
15
+ }
16
+ exports.canBeMultiReturnType = canBeMultiReturnType;
13
17
  function isMultiFunctionCall(context, expression) {
14
18
  return isMultiFunctionNode(context, expression.expression);
15
19
  }
@@ -30,7 +34,7 @@ function isMultiFunctionNode(context, node) {
30
34
  }
31
35
  exports.isMultiFunctionNode = isMultiFunctionNode;
32
36
  function isInMultiReturnFunction(context, node) {
33
- const declaration = typescript_1.findFirstNodeAbove(node, ts.isFunctionLike);
37
+ const declaration = (0, typescript_1.findFirstNodeAbove)(node, ts.isFunctionLike);
34
38
  if (!declaration) {
35
39
  return false;
36
40
  }
@@ -71,7 +75,7 @@ function shouldMultiReturnCallBeWrapped(context, node) {
71
75
  return false;
72
76
  }
73
77
  // LuaIterable in for...of
74
- if (ts.isForOfStatement(node.parent) && iterable_1.isIterableExpression(context, node)) {
78
+ if (ts.isForOfStatement(node.parent) && (0, iterable_1.isIterableExpression)(context, node)) {
75
79
  return false;
76
80
  }
77
81
  return true;
@@ -85,7 +89,7 @@ function findMultiAssignmentViolations(context, node) {
85
89
  const valueSymbol = context.checker.getShorthandAssignmentValueSymbol(element);
86
90
  if (valueSymbol) {
87
91
  if (extensions.isExtensionValue(context, valueSymbol, extensions.ExtensionKind.MultiFunction)) {
88
- context.diagnostics.push(diagnostics_1.invalidMultiFunctionUse(element));
92
+ context.diagnostics.push((0, diagnostics_1.invalidMultiFunctionUse)(element));
89
93
  result.push(element);
90
94
  }
91
95
  }
@@ -64,7 +64,7 @@ const bitwiseOperatorMapExtensions = new Set([
64
64
  extensions.ExtensionKind.BitwiseNotOperatorMethodType,
65
65
  ]);
66
66
  function getOperatorMapExtensionKindForCall(context, node) {
67
- const type = typescript_1.getFunctionTypeForCall(context, node);
67
+ const type = (0, typescript_1.getFunctionTypeForCall)(context, node);
68
68
  return type && operatorMapExtensions.find(extensionKind => extensions.isExtensionType(type, extensionKind));
69
69
  }
70
70
  function isOperatorMapping(context, node) {
@@ -79,7 +79,7 @@ function isOperatorMapping(context, node) {
79
79
  exports.isOperatorMapping = isOperatorMapping;
80
80
  function transformOperatorMappingExpression(context, node) {
81
81
  const extensionKind = getOperatorMapExtensionKindForCall(context, node);
82
- utils_1.assert(extensionKind);
82
+ (0, utils_1.assert)(extensionKind);
83
83
  const isBefore53 = context.luaTarget === CompilerOptions_1.LuaTarget.Lua51 ||
84
84
  context.luaTarget === CompilerOptions_1.LuaTarget.Lua52 ||
85
85
  context.luaTarget === CompilerOptions_1.LuaTarget.LuaJIT ||
@@ -87,11 +87,11 @@ function transformOperatorMappingExpression(context, node) {
87
87
  if (isBefore53) {
88
88
  const luaTarget = context.luaTarget === CompilerOptions_1.LuaTarget.Universal ? CompilerOptions_1.LuaTarget.Lua51 : context.luaTarget;
89
89
  if (bitwiseOperatorMapExtensions.has(extensionKind)) {
90
- context.diagnostics.push(diagnostics_1.unsupportedForTarget(node, "Native bitwise operations", luaTarget));
90
+ context.diagnostics.push((0, diagnostics_1.unsupportedForTarget)(node, "Native bitwise operations", luaTarget));
91
91
  }
92
92
  else if (extensionKind === extensions.ExtensionKind.FloorDivisionOperatorType ||
93
93
  extensionKind === extensions.ExtensionKind.FloorDivisionOperatorMethodType) {
94
- context.diagnostics.push(diagnostics_1.unsupportedForTarget(node, "Floor division operator", luaTarget));
94
+ context.diagnostics.push((0, diagnostics_1.unsupportedForTarget)(node, "Floor division operator", luaTarget));
95
95
  }
96
96
  }
97
97
  const args = node.arguments.slice();
@@ -101,7 +101,7 @@ function transformOperatorMappingExpression(context, node) {
101
101
  args.unshift(node.expression.expression);
102
102
  }
103
103
  const luaOperator = binaryOperatorMappings.get(extensionKind);
104
- utils_1.assert(luaOperator);
104
+ (0, utils_1.assert)(luaOperator);
105
105
  return lua.createBinaryExpression(context.transformExpression(args[0]), context.transformExpression(args[1]), luaOperator);
106
106
  }
107
107
  else {
@@ -114,7 +114,7 @@ function transformOperatorMappingExpression(context, node) {
114
114
  arg = args[0];
115
115
  }
116
116
  const luaOperator = unaryOperatorMappings.get(extensionKind);
117
- utils_1.assert(luaOperator);
117
+ (0, utils_1.assert)(luaOperator);
118
118
  return lua.createUnaryExpression(context.transformExpression(arg), luaOperator);
119
119
  }
120
120
  }
@@ -20,21 +20,21 @@ function isRangeFunctionNode(context, node) {
20
20
  exports.isRangeFunctionNode = isRangeFunctionNode;
21
21
  function getControlVariable(context, statement) {
22
22
  if (!ts.isVariableDeclarationList(statement.initializer)) {
23
- context.diagnostics.push(diagnostics_1.invalidRangeControlVariable(statement.initializer));
23
+ context.diagnostics.push((0, diagnostics_1.invalidRangeControlVariable)(statement.initializer));
24
24
  return;
25
25
  }
26
- const binding = utils_1.getVariableDeclarationBinding(context, statement.initializer);
26
+ const binding = (0, utils_1.getVariableDeclarationBinding)(context, statement.initializer);
27
27
  if (!ts.isIdentifier(binding)) {
28
- context.diagnostics.push(diagnostics_1.invalidRangeControlVariable(statement.initializer));
28
+ context.diagnostics.push((0, diagnostics_1.invalidRangeControlVariable)(statement.initializer));
29
29
  return;
30
30
  }
31
- return identifier_1.transformIdentifier(context, binding);
31
+ return (0, identifier_1.transformIdentifier)(context, binding);
32
32
  }
33
33
  function transformRangeStatement(context, statement, block) {
34
34
  var _a;
35
- utils_2.assert(ts.isCallExpression(statement.expression));
35
+ (0, utils_2.assert)(ts.isCallExpression(statement.expression));
36
36
  const controlVariable = (_a = getControlVariable(context, statement)) !== null && _a !== void 0 ? _a : lua.createAnonymousIdentifier(statement.initializer);
37
- const [start = lua.createNumericLiteral(0), limit = lua.createNumericLiteral(0), step] = call_1.transformArguments(context, statement.expression.arguments, context.checker.getResolvedSignature(statement.expression));
37
+ const [start = lua.createNumericLiteral(0), limit = lua.createNumericLiteral(0), step] = (0, call_1.transformArguments)(context, statement.expression.arguments, context.checker.getResolvedSignature(statement.expression));
38
38
  return lua.createForStatement(block, controlVariable, start, limit, step, statement);
39
39
  }
40
40
  exports.transformRangeStatement = transformRangeStatement;