|
1 | 1 | import * as ts from "typescript"; |
2 | 2 | import * as lua from "../../../LuaAST"; |
3 | | -import { cast, assertNever } from "../../../utils"; |
| 3 | +import { assertNever } from "../../../utils"; |
4 | 4 | import { TransformationContext } from "../../context"; |
5 | 5 | import { transformInPrecedingStatementScope, WithPrecedingStatements } from "../../utils/preceding-statements"; |
6 | 6 | import { transformBinaryOperation } from "./index"; |
7 | 7 | import { transformAssignmentWithRightPrecedingStatements } from "./assignments"; |
8 | 8 | import { isArrayLength } from "./destructuring-assignments"; |
9 | 9 | import { LuaLibFeature, transformLuaLibFunction } from "../../utils/lualib"; |
| 10 | +import { cannotAssignToNodeOfKind } from "../../utils/diagnostics"; |
10 | 11 |
|
11 | 12 | function isLuaExpressionWithSideEffect(expression: lua.Expression) { |
12 | 13 | return !(lua.isLiteral(expression) || lua.isIdentifier(expression)); |
@@ -85,7 +86,12 @@ function transformCompoundAssignment( |
85 | 86 | return { precedingStatements, result: lengthSetterStatement.expression }; |
86 | 87 | } |
87 | 88 |
|
88 | | - const left = cast(context.transformExpression(lhs), lua.isAssignmentLeftHandSideExpression); |
| 89 | + const left = context.transformExpression(lhs); |
| 90 | + if (!lua.isAssignmentLeftHandSideExpression(left)) { |
| 91 | + context.diagnostics.push(cannotAssignToNodeOfKind(expression, left.kind)); |
| 92 | + return { precedingStatements: [], result: left }; |
| 93 | + } |
| 94 | + |
89 | 95 | const { precedingStatements: rightPrecedingStatements, result: right } = transformInPrecedingStatementScope( |
90 | 96 | context, |
91 | 97 | () => context.transformExpression(rhs) |
@@ -250,7 +256,12 @@ export function transformCompoundAssignmentStatement( |
250 | 256 | return [...precedingStatements, lengthSetterStatement]; |
251 | 257 | } |
252 | 258 |
|
253 | | - const left = cast(context.transformExpression(lhs), lua.isAssignmentLeftHandSideExpression); |
| 259 | + const left = context.transformExpression(lhs); |
| 260 | + if (!lua.isAssignmentLeftHandSideExpression(left)) { |
| 261 | + context.diagnostics.push(cannotAssignToNodeOfKind(node, left.kind)); |
| 262 | + return []; |
| 263 | + } |
| 264 | + |
254 | 265 | const { precedingStatements: rightPrecedingStatements, result: right } = transformInPrecedingStatementScope( |
255 | 266 | context, |
256 | 267 | () => context.transformExpression(rhs) |
|
0 commit comments