mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-11-18 17:21:48 +00:00
Adding Diagnostic message for missing ']' and ')' in Array literal and conditional statements (#40884)
* Adding Diagnostic message for missing ']' in Array literal * revert change on parseArrayBindingPattern * Adding diagnostic message for if, while, do and with statements * Extract parseExpectMatchingBrackets Co-authored-by: Keerthana Kanakaraju <kekanaka@microsoft.com> Co-authored-by: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com>
This commit is contained in:
co-authored by
Keerthana Kanakaraju
Nathan Shively-Sanders
parent
294a5a7d78
commit
555ef73da8
@@ -15,7 +15,7 @@
|
||||
"category": "Error",
|
||||
"code": 1006
|
||||
},
|
||||
"The parser expected to find a '}' to match the '{' token here.": {
|
||||
"The parser expected to find a '{1}' to match the '{0}' token here.": {
|
||||
"category": "Error",
|
||||
"code": 1007
|
||||
},
|
||||
|
||||
+26
-15
@@ -1542,6 +1542,20 @@ namespace ts {
|
||||
return false;
|
||||
}
|
||||
|
||||
function parseExpectedMatchingBrackets(openKind: SyntaxKind, closeKind: SyntaxKind, openPosition: number) {
|
||||
if (!parseExpected(closeKind)) {
|
||||
const lastError = lastOrUndefined(parseDiagnostics);
|
||||
if (lastError && lastError.code === Diagnostics._0_expected.code) {
|
||||
addRelatedInfo(
|
||||
lastError,
|
||||
createDetachedDiagnostic(fileName, openPosition, 1, Diagnostics.The_parser_expected_to_find_a_1_to_match_the_0_token_here, tokenToString(openKind), tokenToString(closeKind))
|
||||
);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function parseOptional(t: SyntaxKind): boolean {
|
||||
if (token() === t) {
|
||||
nextToken();
|
||||
@@ -5426,10 +5440,11 @@ namespace ts {
|
||||
|
||||
function parseArrayLiteralExpression(): ArrayLiteralExpression {
|
||||
const pos = getNodePos();
|
||||
const openBracketPosition = scanner.getTokenPos();
|
||||
parseExpected(SyntaxKind.OpenBracketToken);
|
||||
const multiLine = scanner.hasPrecedingLineBreak();
|
||||
const elements = parseDelimitedList(ParsingContext.ArrayLiteralMembers, parseArgumentOrArrayLiteralElement);
|
||||
parseExpected(SyntaxKind.CloseBracketToken);
|
||||
parseExpectedMatchingBrackets(SyntaxKind.OpenBracketToken, SyntaxKind.CloseBracketToken, openBracketPosition);
|
||||
return finishNode(factory.createArrayLiteralExpression(elements, multiLine), pos);
|
||||
}
|
||||
|
||||
@@ -5503,7 +5518,7 @@ namespace ts {
|
||||
if (lastError && lastError.code === Diagnostics._0_expected.code) {
|
||||
addRelatedInfo(
|
||||
lastError,
|
||||
createDetachedDiagnostic(fileName, openBracePosition, 1, Diagnostics.The_parser_expected_to_find_a_to_match_the_token_here)
|
||||
createDetachedDiagnostic(fileName, openBracePosition, 1, Diagnostics.The_parser_expected_to_find_a_1_to_match_the_0_token_here, tokenToString(SyntaxKind.OpenBraceToken), tokenToString(SyntaxKind.CloseBraceToken))
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -5591,15 +5606,7 @@ namespace ts {
|
||||
if (parseExpected(SyntaxKind.OpenBraceToken, diagnosticMessage) || ignoreMissingOpenBrace) {
|
||||
const multiLine = scanner.hasPrecedingLineBreak();
|
||||
const statements = parseList(ParsingContext.BlockStatements, parseStatement);
|
||||
if (!parseExpected(SyntaxKind.CloseBraceToken)) {
|
||||
const lastError = lastOrUndefined(parseDiagnostics);
|
||||
if (lastError && lastError.code === Diagnostics._0_expected.code) {
|
||||
addRelatedInfo(
|
||||
lastError,
|
||||
createDetachedDiagnostic(fileName, openBracePosition, 1, Diagnostics.The_parser_expected_to_find_a_to_match_the_token_here)
|
||||
);
|
||||
}
|
||||
}
|
||||
parseExpectedMatchingBrackets(SyntaxKind.OpenBraceToken, SyntaxKind.CloseBraceToken, openBracePosition);
|
||||
return finishNode(factory.createBlock(statements, multiLine), pos);
|
||||
}
|
||||
else {
|
||||
@@ -5647,9 +5654,10 @@ namespace ts {
|
||||
function parseIfStatement(): IfStatement {
|
||||
const pos = getNodePos();
|
||||
parseExpected(SyntaxKind.IfKeyword);
|
||||
const openParenPosition = scanner.getTokenPos();
|
||||
parseExpected(SyntaxKind.OpenParenToken);
|
||||
const expression = allowInAnd(parseExpression);
|
||||
parseExpected(SyntaxKind.CloseParenToken);
|
||||
parseExpectedMatchingBrackets(SyntaxKind.OpenParenToken, SyntaxKind.CloseParenToken, openParenPosition);
|
||||
const thenStatement = parseStatement();
|
||||
const elseStatement = parseOptional(SyntaxKind.ElseKeyword) ? parseStatement() : undefined;
|
||||
return finishNode(factory.createIfStatement(expression, thenStatement, elseStatement), pos);
|
||||
@@ -5660,9 +5668,10 @@ namespace ts {
|
||||
parseExpected(SyntaxKind.DoKeyword);
|
||||
const statement = parseStatement();
|
||||
parseExpected(SyntaxKind.WhileKeyword);
|
||||
const openParenPosition = scanner.getTokenPos();
|
||||
parseExpected(SyntaxKind.OpenParenToken);
|
||||
const expression = allowInAnd(parseExpression);
|
||||
parseExpected(SyntaxKind.CloseParenToken);
|
||||
parseExpectedMatchingBrackets(SyntaxKind.OpenParenToken, SyntaxKind.CloseParenToken, openParenPosition);
|
||||
|
||||
// From: https://mail.mozilla.org/pipermail/es-discuss/2011-August/016188.html
|
||||
// 157 min --- All allen at wirfs-brock.com CONF --- "do{;}while(false)false" prohibited in
|
||||
@@ -5675,9 +5684,10 @@ namespace ts {
|
||||
function parseWhileStatement(): WhileStatement {
|
||||
const pos = getNodePos();
|
||||
parseExpected(SyntaxKind.WhileKeyword);
|
||||
const openParenPosition = scanner.getTokenPos();
|
||||
parseExpected(SyntaxKind.OpenParenToken);
|
||||
const expression = allowInAnd(parseExpression);
|
||||
parseExpected(SyntaxKind.CloseParenToken);
|
||||
parseExpectedMatchingBrackets(SyntaxKind.OpenParenToken, SyntaxKind.CloseParenToken, openParenPosition);
|
||||
const statement = parseStatement();
|
||||
return finishNode(factory.createWhileStatement(expression, statement), pos);
|
||||
}
|
||||
@@ -5749,9 +5759,10 @@ namespace ts {
|
||||
function parseWithStatement(): WithStatement {
|
||||
const pos = getNodePos();
|
||||
parseExpected(SyntaxKind.WithKeyword);
|
||||
const openParenPosition = scanner.getTokenPos();
|
||||
parseExpected(SyntaxKind.OpenParenToken);
|
||||
const expression = allowInAnd(parseExpression);
|
||||
parseExpected(SyntaxKind.CloseParenToken);
|
||||
parseExpectedMatchingBrackets(SyntaxKind.OpenParenToken, SyntaxKind.CloseParenToken, openParenPosition);
|
||||
const statement = doInsideOfContext(NodeFlags.InWithStatement, parseStatement);
|
||||
return finishNode(factory.createWithStatement(expression, statement), pos);
|
||||
}
|
||||
|
||||
@@ -121,6 +121,7 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(261,1): error TS
|
||||
if (retValue != 0 ^= {
|
||||
~~
|
||||
!!! error TS1005: ')' expected.
|
||||
!!! related TS1007 tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts:22:20: The parser expected to find a ')' to match the '(' token here.
|
||||
~
|
||||
|
||||
|
||||
@@ -504,6 +505,7 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(261,1): error TS
|
||||
!!! error TS1135: Argument expression expected.
|
||||
~
|
||||
!!! error TS1005: '(' expected.
|
||||
!!! related TS1007 tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts:257:33: The parser expected to find a ')' to match the '(' token here.
|
||||
~~~~~~
|
||||
!!! error TS2693: 'string' only refers to a type, but is being used as a value here.
|
||||
~~~
|
||||
|
||||
@@ -39,6 +39,7 @@ tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration2.ts(
|
||||
!!! error TS2322: Type 'string' is not assignable to type 'number'.
|
||||
~
|
||||
!!! error TS1005: ',' expected.
|
||||
!!! related TS1007 tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration2.ts:7:4: The parser expected to find a ']' to match the '[' token here.
|
||||
a0([1, 2, [["world"]], "string"]); // Error
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2345: Argument of type '[number, number, string[][], string]' is not assignable to parameter of type '[number, number, string[][]]'.
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
tests/cases/compiler/missingCloseBracketInArray.ts(1,48): error TS1005: ']' expected.
|
||||
|
||||
|
||||
==== tests/cases/compiler/missingCloseBracketInArray.ts (1 errors) ====
|
||||
var alphas:string[] = alphas = ["1","2","3","4"
|
||||
|
||||
!!! error TS1005: ']' expected.
|
||||
!!! related TS1007 tests/cases/compiler/missingCloseBracketInArray.ts:1:32: The parser expected to find a ']' to match the '[' token here.
|
||||
@@ -0,0 +1,5 @@
|
||||
//// [missingCloseBracketInArray.ts]
|
||||
var alphas:string[] = alphas = ["1","2","3","4"
|
||||
|
||||
//// [missingCloseBracketInArray.js]
|
||||
var alphas = alphas = ["1", "2", "3", "4"];
|
||||
@@ -0,0 +1,5 @@
|
||||
=== tests/cases/compiler/missingCloseBracketInArray.ts ===
|
||||
var alphas:string[] = alphas = ["1","2","3","4"
|
||||
>alphas : Symbol(alphas, Decl(missingCloseBracketInArray.ts, 0, 3))
|
||||
>alphas : Symbol(alphas, Decl(missingCloseBracketInArray.ts, 0, 3))
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
=== tests/cases/compiler/missingCloseBracketInArray.ts ===
|
||||
var alphas:string[] = alphas = ["1","2","3","4"
|
||||
>alphas : string[]
|
||||
>alphas = ["1","2","3","4" : string[]
|
||||
>alphas : string[]
|
||||
>["1","2","3","4" : string[]
|
||||
>"1" : "1"
|
||||
>"2" : "2"
|
||||
>"3" : "3"
|
||||
>"4" : "4"
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
tests/cases/compiler/missingCloseParenStatements.ts(2,26): error TS1005: ')' expected.
|
||||
tests/cases/compiler/missingCloseParenStatements.ts(4,5): error TS1005: ')' expected.
|
||||
tests/cases/compiler/missingCloseParenStatements.ts(8,39): error TS1005: ')' expected.
|
||||
tests/cases/compiler/missingCloseParenStatements.ts(11,35): error TS1005: ')' expected.
|
||||
|
||||
|
||||
==== tests/cases/compiler/missingCloseParenStatements.ts (4 errors) ====
|
||||
var a1, a2, a3 = 0;
|
||||
if ( a1 && (a2 + a3 > 0) {
|
||||
~
|
||||
!!! error TS1005: ')' expected.
|
||||
!!! related TS1007 tests/cases/compiler/missingCloseParenStatements.ts:2:4: The parser expected to find a ')' to match the '(' token here.
|
||||
while( (a2 > 0) && a1
|
||||
{
|
||||
~
|
||||
!!! error TS1005: ')' expected.
|
||||
!!! related TS1007 tests/cases/compiler/missingCloseParenStatements.ts:3:10: The parser expected to find a ')' to match the '(' token here.
|
||||
do {
|
||||
var i = i + 1;
|
||||
a1 = a1 + i;
|
||||
with ((a2 + a3 > 0) && a1 {
|
||||
~
|
||||
!!! error TS1005: ')' expected.
|
||||
!!! related TS1007 tests/cases/compiler/missingCloseParenStatements.ts:8:18: The parser expected to find a ')' to match the '(' token here.
|
||||
console.log(x);
|
||||
}
|
||||
} while (i < 5 && (a1 > 5);
|
||||
~
|
||||
!!! error TS1005: ')' expected.
|
||||
!!! related TS1007 tests/cases/compiler/missingCloseParenStatements.ts:11:17: The parser expected to find a ')' to match the '(' token here.
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
//// [missingCloseParenStatements.ts]
|
||||
var a1, a2, a3 = 0;
|
||||
if ( a1 && (a2 + a3 > 0) {
|
||||
while( (a2 > 0) && a1
|
||||
{
|
||||
do {
|
||||
var i = i + 1;
|
||||
a1 = a1 + i;
|
||||
with ((a2 + a3 > 0) && a1 {
|
||||
console.log(x);
|
||||
}
|
||||
} while (i < 5 && (a1 > 5);
|
||||
}
|
||||
}
|
||||
|
||||
//// [missingCloseParenStatements.js]
|
||||
var a1, a2, a3 = 0;
|
||||
if (a1 && (a2 + a3 > 0)) {
|
||||
while ((a2 > 0) && a1) {
|
||||
do {
|
||||
var i = i + 1;
|
||||
a1 = a1 + i;
|
||||
with ((a2 + a3 > 0) && a1) {
|
||||
console.log(x);
|
||||
}
|
||||
} while (i < 5 && (a1 > 5));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
=== tests/cases/compiler/missingCloseParenStatements.ts ===
|
||||
var a1, a2, a3 = 0;
|
||||
>a1 : Symbol(a1, Decl(missingCloseParenStatements.ts, 0, 3))
|
||||
>a2 : Symbol(a2, Decl(missingCloseParenStatements.ts, 0, 7))
|
||||
>a3 : Symbol(a3, Decl(missingCloseParenStatements.ts, 0, 11))
|
||||
|
||||
if ( a1 && (a2 + a3 > 0) {
|
||||
>a1 : Symbol(a1, Decl(missingCloseParenStatements.ts, 0, 3))
|
||||
>a2 : Symbol(a2, Decl(missingCloseParenStatements.ts, 0, 7))
|
||||
>a3 : Symbol(a3, Decl(missingCloseParenStatements.ts, 0, 11))
|
||||
|
||||
while( (a2 > 0) && a1
|
||||
>a2 : Symbol(a2, Decl(missingCloseParenStatements.ts, 0, 7))
|
||||
>a1 : Symbol(a1, Decl(missingCloseParenStatements.ts, 0, 3))
|
||||
{
|
||||
do {
|
||||
var i = i + 1;
|
||||
>i : Symbol(i, Decl(missingCloseParenStatements.ts, 5, 15))
|
||||
>i : Symbol(i, Decl(missingCloseParenStatements.ts, 5, 15))
|
||||
|
||||
a1 = a1 + i;
|
||||
>a1 : Symbol(a1, Decl(missingCloseParenStatements.ts, 0, 3))
|
||||
>a1 : Symbol(a1, Decl(missingCloseParenStatements.ts, 0, 3))
|
||||
>i : Symbol(i, Decl(missingCloseParenStatements.ts, 5, 15))
|
||||
|
||||
with ((a2 + a3 > 0) && a1 {
|
||||
>a2 : Symbol(a2, Decl(missingCloseParenStatements.ts, 0, 7))
|
||||
>a3 : Symbol(a3, Decl(missingCloseParenStatements.ts, 0, 11))
|
||||
>a1 : Symbol(a1, Decl(missingCloseParenStatements.ts, 0, 3))
|
||||
|
||||
console.log(x);
|
||||
}
|
||||
} while (i < 5 && (a1 > 5);
|
||||
>i : Symbol(i, Decl(missingCloseParenStatements.ts, 5, 15))
|
||||
>a1 : Symbol(a1, Decl(missingCloseParenStatements.ts, 0, 3))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
=== tests/cases/compiler/missingCloseParenStatements.ts ===
|
||||
var a1, a2, a3 = 0;
|
||||
>a1 : any
|
||||
>a2 : any
|
||||
>a3 : number
|
||||
>0 : 0
|
||||
|
||||
if ( a1 && (a2 + a3 > 0) {
|
||||
>a1 && (a2 + a3 > 0) : boolean
|
||||
>a1 : any
|
||||
>(a2 + a3 > 0) : boolean
|
||||
>a2 + a3 > 0 : boolean
|
||||
>a2 + a3 : any
|
||||
>a2 : any
|
||||
>a3 : number
|
||||
>0 : 0
|
||||
|
||||
while( (a2 > 0) && a1
|
||||
>(a2 > 0) && a1 : any
|
||||
>(a2 > 0) : boolean
|
||||
>a2 > 0 : boolean
|
||||
>a2 : any
|
||||
>0 : 0
|
||||
>a1 : any
|
||||
{
|
||||
do {
|
||||
var i = i + 1;
|
||||
>i : any
|
||||
>i + 1 : any
|
||||
>i : any
|
||||
>1 : 1
|
||||
|
||||
a1 = a1 + i;
|
||||
>a1 = a1 + i : any
|
||||
>a1 : any
|
||||
>a1 + i : any
|
||||
>a1 : any
|
||||
>i : any
|
||||
|
||||
with ((a2 + a3 > 0) && a1 {
|
||||
>(a2 + a3 > 0) && a1 : any
|
||||
>(a2 + a3 > 0) : boolean
|
||||
>a2 + a3 > 0 : boolean
|
||||
>a2 + a3 : any
|
||||
>a2 : any
|
||||
>a3 : number
|
||||
>0 : 0
|
||||
>a1 : any
|
||||
|
||||
console.log(x);
|
||||
>console.log(x) : any
|
||||
>console.log : any
|
||||
>console : any
|
||||
>log : any
|
||||
>x : any
|
||||
}
|
||||
} while (i < 5 && (a1 > 5);
|
||||
>i < 5 && (a1 > 5) : boolean
|
||||
>i < 5 : boolean
|
||||
>i : any
|
||||
>5 : 5
|
||||
>(a1 > 5) : boolean
|
||||
>a1 > 5 : boolean
|
||||
>a1 : any
|
||||
>5 : 5
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,7 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrayLiteralExpressions
|
||||
var texCoords = [2, 2, 0.5000001192092895, 0.8749999 ; 403953552, 0.5000001192092895, 0.8749999403953552];
|
||||
~
|
||||
!!! error TS1005: ',' expected.
|
||||
!!! related TS1007 tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrayLiteralExpressions/parserErrorRecoveryArrayLiteralExpression3.ts:1:17: The parser expected to find a ']' to match the '[' token here.
|
||||
~~~~~~~~~
|
||||
!!! error TS2695: Left side of comma operator is unused and has no side effects.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@@ -11,6 +11,7 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/IfStatements/parserErro
|
||||
}
|
||||
~
|
||||
!!! error TS1005: ')' expected.
|
||||
!!! related TS1007 tests/cases/conformance/parser/ecmascript5/ErrorRecovery/IfStatements/parserErrorRecoveryIfStatement2.ts:3:8: The parser expected to find a ')' to match the '(' token here.
|
||||
f2() {
|
||||
}
|
||||
f3() {
|
||||
|
||||
@@ -11,6 +11,7 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/IfStatements/parserErro
|
||||
}
|
||||
~
|
||||
!!! error TS1005: ')' expected.
|
||||
!!! related TS1007 tests/cases/conformance/parser/ecmascript5/ErrorRecovery/IfStatements/parserErrorRecoveryIfStatement3.ts:3:8: The parser expected to find a ')' to match the '(' token here.
|
||||
f2() {
|
||||
}
|
||||
f3() {
|
||||
|
||||
@@ -45,6 +45,7 @@ tests/cases/compiler/reservedWords2.ts(12,17): error TS1138: Parameter declarati
|
||||
!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.
|
||||
~
|
||||
!!! error TS1005: ')' expected.
|
||||
!!! related TS1007 tests/cases/compiler/reservedWords2.ts:1:14: The parser expected to find a ')' to match the '(' token here.
|
||||
import * as while from "foo"
|
||||
|
||||
!!! error TS2300: Duplicate identifier '(Missing)'.
|
||||
@@ -58,6 +59,7 @@ tests/cases/compiler/reservedWords2.ts(12,17): error TS1138: Parameter declarati
|
||||
!!! error TS2304: Cannot find name 'from'.
|
||||
~~~~~
|
||||
!!! error TS1005: ')' expected.
|
||||
!!! related TS1007 tests/cases/compiler/reservedWords2.ts:2:20: The parser expected to find a ')' to match the '(' token here.
|
||||
|
||||
var typeof = 10;
|
||||
~~~~~~
|
||||
@@ -103,6 +105,7 @@ tests/cases/compiler/reservedWords2.ts(12,17): error TS1138: Parameter declarati
|
||||
!!! error TS1005: ';' expected.
|
||||
~
|
||||
!!! error TS1005: '(' expected.
|
||||
!!! related TS1007 tests/cases/compiler/reservedWords2.ts:9:18: The parser expected to find a ')' to match the '(' token here.
|
||||
~
|
||||
!!! error TS1128: Declaration or statement expected.
|
||||
enum void {}
|
||||
|
||||
@@ -93,6 +93,7 @@ tests/cases/conformance/expressions/typeAssertions/typeAssertions.ts(48,50): err
|
||||
!!! error TS2304: Cannot find name 'is'.
|
||||
~~~~~~
|
||||
!!! error TS1005: ')' expected.
|
||||
!!! related TS1007 tests/cases/conformance/expressions/typeAssertions/typeAssertions.ts:44:3: The parser expected to find a ')' to match the '(' token here.
|
||||
~~~~~~
|
||||
!!! error TS2693: 'string' only refers to a type, but is being used as a value here.
|
||||
~
|
||||
@@ -108,6 +109,7 @@ tests/cases/conformance/expressions/typeAssertions/typeAssertions.ts(48,50): err
|
||||
!!! error TS2749: 'numOrStr' refers to a value, but is being used as a type here. Did you mean 'typeof numOrStr'?
|
||||
~~
|
||||
!!! error TS1005: ')' expected.
|
||||
!!! related TS1007 tests/cases/conformance/expressions/typeAssertions/typeAssertions.ts:48:3: The parser expected to find a ')' to match the '(' token here.
|
||||
~~
|
||||
!!! error TS2304: Cannot find name 'is'.
|
||||
~~~~~~
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
var alphas:string[] = alphas = ["1","2","3","4"
|
||||
@@ -0,0 +1,13 @@
|
||||
var a1, a2, a3 = 0;
|
||||
if ( a1 && (a2 + a3 > 0) {
|
||||
while( (a2 > 0) && a1
|
||||
{
|
||||
do {
|
||||
var i = i + 1;
|
||||
a1 = a1 + i;
|
||||
with ((a2 + a3 > 0) && a1 {
|
||||
console.log(x);
|
||||
}
|
||||
} while (i < 5 && (a1 > 5);
|
||||
}
|
||||
}
|
||||
-1
@@ -1,2 +1 @@
|
||||
|
||||
var texCoords = [2, 2, 0.5000001192092895, 0.8749999 ; 403953552, 0.5000001192092895, 0.8749999403953552];
|
||||
|
||||
Reference in New Issue
Block a user