@@ -3,8 +3,11 @@ import * as lua from "../../../LuaAST";
33import { assert , cast , castEach } from "../../../utils" ;
44import { FunctionVisitor , TransformationContext } from "../../context" ;
55import { AnnotationKind , getTypeAnnotations , isForRangeType , isLuaIteratorType } from "../../utils/annotations" ;
6- import { invalidForRangeCall , luaIteratorForbiddenUsage } from "../../utils/diagnostics" ;
7- import { MissingForOfVariables , UnsupportedObjectDestructuringInForOf } from "../../utils/errors" ;
6+ import {
7+ forOfUnsupportedObjectDestructuring ,
8+ invalidForRangeCall ,
9+ luaIteratorForbiddenUsage ,
10+ } from "../../utils/diagnostics" ;
811import { createUnpackCall } from "../../utils/lua-ast" ;
912import { LuaLibFeature , transformLuaLibFunction } from "../../utils/lualib" ;
1013import { isArrayType , isNumberType } from "../../utils/typescript" ;
@@ -28,19 +31,17 @@ function transformForOfInitializer(
2831
2932 expression = createUnpackCall ( context , expression , initializer ) ;
3033 } else if ( ts . isObjectBindingPattern ( initializer . declarations [ 0 ] . name ) ) {
31- throw UnsupportedObjectDestructuringInForOf ( initializer ) ;
34+ context . diagnostics . push ( forOfUnsupportedObjectDestructuring ( initializer ) ) ;
35+ return ;
3236 }
3337
34- const variableStatements = transformVariableDeclaration ( context , initializer . declarations [ 0 ] ) ;
35- if ( variableStatements [ 0 ] ) {
36- // we can safely assume that for vars are not exported and therefore declarationstatenents
37- return lua . createVariableDeclarationStatement (
38- ( variableStatements [ 0 ] as lua . VariableDeclarationStatement ) . left ,
39- expression
40- ) ;
41- } else {
42- throw MissingForOfVariables ( initializer ) ;
43- }
38+ // we can safely assume that for vars are not exported and therefore VariableDeclarationStatement's
39+ const assignmentStatement = cast (
40+ transformVariableDeclaration ( context , initializer . declarations [ 0 ] ) [ 0 ] ,
41+ lua . isVariableDeclarationStatement
42+ ) ;
43+
44+ return lua . createVariableDeclarationStatement ( assignmentStatement . left , expression ) ;
4445 } else {
4546 // Assignment to existing variable
4647 let variables : lua . AssignmentLeftHandSideExpression | lua . AssignmentLeftHandSideExpression [ ] ;
@@ -56,7 +57,8 @@ function transformForOfInitializer(
5657 return undefined ;
5758 }
5859 } else if ( ts . isObjectLiteralExpression ( initializer ) ) {
59- throw UnsupportedObjectDestructuringInForOf ( initializer ) ;
60+ context . diagnostics . push ( forOfUnsupportedObjectDestructuring ( initializer ) ) ;
61+ return ;
6062 } else {
6163 variables = cast ( context . transformExpression ( initializer ) , lua . isAssignmentLeftHandSideExpression ) ;
6264 }
0 commit comments