13af6ab5fSopenharmony_ci/*
23af6ab5fSopenharmony_ci * Copyright (c) 2023-2024 Huawei Device Co., Ltd.
33af6ab5fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
43af6ab5fSopenharmony_ci * you may not use this file except in compliance with the License.
53af6ab5fSopenharmony_ci * You may obtain a copy of the License at
63af6ab5fSopenharmony_ci *
73af6ab5fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
83af6ab5fSopenharmony_ci *
93af6ab5fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
103af6ab5fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
113af6ab5fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
123af6ab5fSopenharmony_ci * See the License for the specific language governing permissions and
133af6ab5fSopenharmony_ci * limitations under the License.
143af6ab5fSopenharmony_ci */
153af6ab5fSopenharmony_ci
163af6ab5fSopenharmony_ciclass C {
173af6ab5fSopenharmony_ci  a: any;
183af6ab5fSopenharmony_ci  b: any[];
193af6ab5fSopenharmony_ci  c: [number, number];
203af6ab5fSopenharmony_ci  d: number[];
213af6ab5fSopenharmony_ci}
223af6ab5fSopenharmony_ci
233af6ab5fSopenharmony_cifunction arrayLiteralsInVarDecl(): void {
243af6ab5fSopenharmony_ci  const a = [1, 2]; // NOW OK
253af6ab5fSopenharmony_ci  const b: any = [3, 4]; // NOW OK
263af6ab5fSopenharmony_ci  const c: any[] = [5, 6]; // OK
273af6ab5fSopenharmony_ci  const d: [number, number] = [7, 8]; // NOW OK
283af6ab5fSopenharmony_ci  const e: number[] = [9, 10]; // OK
293af6ab5fSopenharmony_ci  const f = [1, 'x', true]; // NOW OK
303af6ab5fSopenharmony_ci  const g: object[] = [2, 'y', false]; // OK
313af6ab5fSopenharmony_ci
323af6ab5fSopenharmony_ci  const h: C = {
333af6ab5fSopenharmony_ci    a: [1, 2], // NOW OK
343af6ab5fSopenharmony_ci    b: [3, 4], // OK
353af6ab5fSopenharmony_ci    c: [5, 6], // NOW OK
363af6ab5fSopenharmony_ci    d: [7, 8], // OK
373af6ab5fSopenharmony_ci  };
383af6ab5fSopenharmony_ci
393af6ab5fSopenharmony_ci  const x = [1, 2, 3][1]; // NOW OK
403af6ab5fSopenharmony_ci}
413af6ab5fSopenharmony_ci
423af6ab5fSopenharmony_cilet a: number[];
433af6ab5fSopenharmony_cilet b: any;
443af6ab5fSopenharmony_cilet c: any[];
453af6ab5fSopenharmony_cilet d: [number, number];
463af6ab5fSopenharmony_cilet e: number[];
473af6ab5fSopenharmony_cilet f: [number, string, boolean];
483af6ab5fSopenharmony_cilet g: object[];
493af6ab5fSopenharmony_cilet h: C;
503af6ab5fSopenharmony_ci
513af6ab5fSopenharmony_cifunction arrayLiteralsInAssignment(): void {
523af6ab5fSopenharmony_ci  a = [1, 2]; // OK
533af6ab5fSopenharmony_ci  b = [3, 4]; // NOW OK
543af6ab5fSopenharmony_ci  c = [5, 6]; // OK
553af6ab5fSopenharmony_ci  d = [7, 8]; // NOW OK
563af6ab5fSopenharmony_ci  e = [9, 10]; // OK
573af6ab5fSopenharmony_ci  f = [1, 'x', true]; // NOW OK for ARR.LITERAL
583af6ab5fSopenharmony_ci  g = [2, 'y', false]; // OK
593af6ab5fSopenharmony_ci
603af6ab5fSopenharmony_ci  h = {
613af6ab5fSopenharmony_ci    a: [1, 2], // NOW OK
623af6ab5fSopenharmony_ci    b: [3, 4], // OK
633af6ab5fSopenharmony_ci    c: [5, 6], // NOW OK
643af6ab5fSopenharmony_ci    d: [7, 8], // OK
653af6ab5fSopenharmony_ci  };
663af6ab5fSopenharmony_ci}
673af6ab5fSopenharmony_ci
683af6ab5fSopenharmony_ci// Default parameter value
693af6ab5fSopenharmony_cifunction foo(x = [1, 2]) {
703af6ab5fSopenharmony_ci  return x;
713af6ab5fSopenharmony_ci} // NOW OK
723af6ab5fSopenharmony_cifunction foo2(x: any = [3, 4]) {
733af6ab5fSopenharmony_ci  return x;
743af6ab5fSopenharmony_ci} // NOW OK
753af6ab5fSopenharmony_cifunction foo3(x: any[] = [5, 6]) {
763af6ab5fSopenharmony_ci  return x;
773af6ab5fSopenharmony_ci} // OK
783af6ab5fSopenharmony_cifunction foo4(x: [number, number] = [7, 8]) {
793af6ab5fSopenharmony_ci  return x;
803af6ab5fSopenharmony_ci} // NOW OK
813af6ab5fSopenharmony_cifunction foo5(x: number[] = [9, 10]) {
823af6ab5fSopenharmony_ci  return x;
833af6ab5fSopenharmony_ci} // OK
843af6ab5fSopenharmony_ci
853af6ab5fSopenharmony_cifunction arrayLiteralsInFunCall(): void {
863af6ab5fSopenharmony_ci  foo([1, 2]); // OK
873af6ab5fSopenharmony_ci  foo2([3, 4]); // NOW OK
883af6ab5fSopenharmony_ci  foo3([5, 6]); // OK
893af6ab5fSopenharmony_ci  foo4([7, 8]); // NOW OK
903af6ab5fSopenharmony_ci  foo5([9, 10]); // OK
913af6ab5fSopenharmony_ci}
923af6ab5fSopenharmony_ci
933af6ab5fSopenharmony_ci// Return from function
943af6ab5fSopenharmony_cifunction bar() {
953af6ab5fSopenharmony_ci  return [1, 2];
963af6ab5fSopenharmony_ci} // NOW OK
973af6ab5fSopenharmony_cifunction bar2(): any {
983af6ab5fSopenharmony_ci  return [3, 4];
993af6ab5fSopenharmony_ci} // NOW OK
1003af6ab5fSopenharmony_cifunction bar3(): any[] {
1013af6ab5fSopenharmony_ci  return [5, 6];
1023af6ab5fSopenharmony_ci} // OK
1033af6ab5fSopenharmony_cifunction bar4(): [number, number] {
1043af6ab5fSopenharmony_ci  return [7, 8];
1053af6ab5fSopenharmony_ci} // NOW OK
1063af6ab5fSopenharmony_cifunction bar5(): number[] {
1073af6ab5fSopenharmony_ci  return [9, 10];
1083af6ab5fSopenharmony_ci} // OK
1093af6ab5fSopenharmony_ci
1103af6ab5fSopenharmony_cifunction arrayLiteralsInTernaryOp(): void {
1113af6ab5fSopenharmony_ci  const condition = true;
1123af6ab5fSopenharmony_ci  a = condition ? [1, 2] : [3, 4]; // OK
1133af6ab5fSopenharmony_ci  b = condition ? [5, 6] : [7, 8]; // NOW OK
1143af6ab5fSopenharmony_ci  c = condition ? [9, 10] : [11, 12]; // OK
1153af6ab5fSopenharmony_ci  d = condition ? [13, 14] : [15, 16]; // NOW OK
1163af6ab5fSopenharmony_ci  e = condition ? [17, 18] : [19, 20]; // OK
1173af6ab5fSopenharmony_ci}
1183af6ab5fSopenharmony_ci
1193af6ab5fSopenharmony_ciclass P {
1203af6ab5fSopenharmony_ci  n:number = 0;
1213af6ab5fSopenharmony_ci  s:string = '';
1223af6ab5fSopenharmony_ci}
1233af6ab5fSopenharmony_ci
1243af6ab5fSopenharmony_cilet a1 = [ { n:1, s:"1" } as P,  { n:2, s:"2" } as P ]; // OK
1253af6ab5fSopenharmony_cilet a2: P[] =  [ { n:3, s:"3" },  { n:4, s:"4" } ]; // OK
1263af6ab5fSopenharmony_cilet a3 =  [ { n:1, s:"1" },  { n:2, s:"2" } ]; // NOT OK
127