13af6ab5fSopenharmony_ci/* 23af6ab5fSopenharmony_ci * Copyright (c) 2021-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 UserClassType 173af6ab5fSopenharmony_ci{ 183af6ab5fSopenharmony_ci v : int = 0; 193af6ab5fSopenharmony_ci constructor (p : int) 203af6ab5fSopenharmony_ci { 213af6ab5fSopenharmony_ci this.v = p; 223af6ab5fSopenharmony_ci } 233af6ab5fSopenharmony_ci 243af6ab5fSopenharmony_ci override toString() : string { 253af6ab5fSopenharmony_ci return Int.valueOf(this.v).toString(); 263af6ab5fSopenharmony_ci } 273af6ab5fSopenharmony_ci} 283af6ab5fSopenharmony_ci 293af6ab5fSopenharmony_cienum UserEnumType 303af6ab5fSopenharmony_ci{ 313af6ab5fSopenharmony_ci Red, 323af6ab5fSopenharmony_ci Green, 333af6ab5fSopenharmony_ci Blue 343af6ab5fSopenharmony_ci}; 353af6ab5fSopenharmony_ci 363af6ab5fSopenharmony_cilet g_array : int [] = [1,2,3]; 373af6ab5fSopenharmony_cilet g_array2 : int [] = [11,12,13]; 383af6ab5fSopenharmony_cilet g_Array : Array<Int> = new Array<Int>(new Int(4), new Int(5), new Int(6)); 393af6ab5fSopenharmony_cilet g_Array2 : Array<Int> = new Array<Int>(new Int(14), new Int(15), new Int(16)); 403af6ab5fSopenharmony_cilet g_Object : Object = new Object(); 413af6ab5fSopenharmony_cilet g_Object2 : Object = new Object(); 423af6ab5fSopenharmony_cilet g_Class : UserClassType = new UserClassType(25); 433af6ab5fSopenharmony_cilet g_Class2 : UserClassType = new UserClassType(250); 443af6ab5fSopenharmony_ci 453af6ab5fSopenharmony_ci 463af6ab5fSopenharmony_ci 473af6ab5fSopenharmony_ciclass GlobalClass 483af6ab5fSopenharmony_ci{ 493af6ab5fSopenharmony_ci static s_field : int = 13; 503af6ab5fSopenharmony_ci field : int = 14; 513af6ab5fSopenharmony_ci 523af6ab5fSopenharmony_ci static s_method_boxing_local_class() { 533af6ab5fSopenharmony_ci // predefined value types 543af6ab5fSopenharmony_ci let l_number : number = 1; 553af6ab5fSopenharmony_ci let l_byte : byte = 2; 563af6ab5fSopenharmony_ci let l_short : short = 3; 573af6ab5fSopenharmony_ci let l_int : int = 4; 583af6ab5fSopenharmony_ci let l_long : long = 5; 593af6ab5fSopenharmony_ci let l_float : float = 6.0; 603af6ab5fSopenharmony_ci let l_double : double = 7.0; 613af6ab5fSopenharmony_ci let l_boolean : boolean = false; 623af6ab5fSopenharmony_ci let l_char : char = c'x'; 633af6ab5fSopenharmony_ci 643af6ab5fSopenharmony_ci // user defined value types 653af6ab5fSopenharmony_ci let l_enum : UserEnumType = UserEnumType.Red; 663af6ab5fSopenharmony_ci 673af6ab5fSopenharmony_ci // predefined reference types 683af6ab5fSopenharmony_ci let l_Number : Number = new Number(11); 693af6ab5fSopenharmony_ci let l_Byte : Byte = new Byte(12 as byte); 703af6ab5fSopenharmony_ci let l_Short : Short = new Short(13 as short); 713af6ab5fSopenharmony_ci let l_Int : Int = new Int(14 as int); 723af6ab5fSopenharmony_ci let l_Long : Long = new Long(15 as long); 733af6ab5fSopenharmony_ci let l_Float : Float = new Float(16.0); 743af6ab5fSopenharmony_ci let l_Double : Double = new Double(17.0); 753af6ab5fSopenharmony_ci let l_Boolean: Boolean = new Boolean(false); 763af6ab5fSopenharmony_ci let l_Char : Char = new Char(c'X'); 773af6ab5fSopenharmony_ci 783af6ab5fSopenharmony_ci let l_string : string = "something"; 793af6ab5fSopenharmony_ci let l_String : String = new String("Something"); 803af6ab5fSopenharmony_ci let l_array : int [] = g_array; 813af6ab5fSopenharmony_ci let l_Array : Array<Int> = g_Array; 823af6ab5fSopenharmony_ci //let l_bigint : bigint = 20n; 833af6ab5fSopenharmony_ci //let l_BigInt : BigInt = new BigInt(21n); 843af6ab5fSopenharmony_ci let l_Object : Object = g_Object; 853af6ab5fSopenharmony_ci 863af6ab5fSopenharmony_ci // user defined reference types 873af6ab5fSopenharmony_ci let l_Class : UserClassType = g_Class; 883af6ab5fSopenharmony_ci 893af6ab5fSopenharmony_ci class LocalClassBoxing 903af6ab5fSopenharmony_ci { 913af6ab5fSopenharmony_ci local_field : int = 1000; 923af6ab5fSopenharmony_ci static local_s_field : int = 2000; 933af6ab5fSopenharmony_ci 943af6ab5fSopenharmony_ci static local_s_method(lp : int) : void 953af6ab5fSopenharmony_ci { 963af6ab5fSopenharmony_ci assert(lp == 300); 973af6ab5fSopenharmony_ci assert(LocalClassBoxing.local_s_field == 2000); 983af6ab5fSopenharmony_ci 993af6ab5fSopenharmony_ci LocalClassBoxing.local_s_field = 5000; 1003af6ab5fSopenharmony_ci assert(LocalClassBoxing.local_s_field == 5000); 1013af6ab5fSopenharmony_ci } 1023af6ab5fSopenharmony_ci 1033af6ab5fSopenharmony_ci local_method(lp : int) : void 1043af6ab5fSopenharmony_ci { 1053af6ab5fSopenharmony_ci // Parameter 1063af6ab5fSopenharmony_ci assert(lp == 400); 1073af6ab5fSopenharmony_ci // Local class object field 1083af6ab5fSopenharmony_ci assert(this.local_field == 1000); 1093af6ab5fSopenharmony_ci // Local class static field 1103af6ab5fSopenharmony_ci assert(LocalClassBoxing.local_s_field == 5000); 1113af6ab5fSopenharmony_ci // Outer class static field 1123af6ab5fSopenharmony_ci assert(GlobalClass.s_field == 13); 1133af6ab5fSopenharmony_ci // Predefined value types 1143af6ab5fSopenharmony_ci assert(l_number == 1); 1153af6ab5fSopenharmony_ci assert(l_byte == 2); 1163af6ab5fSopenharmony_ci assert(l_short == 3); 1173af6ab5fSopenharmony_ci assert(l_int == 4); 1183af6ab5fSopenharmony_ci assert(l_long == 5); 1193af6ab5fSopenharmony_ci assert(l_float == 6); 1203af6ab5fSopenharmony_ci assert(l_double == 7); 1213af6ab5fSopenharmony_ci assert(l_boolean == false); 1223af6ab5fSopenharmony_ci assert(l_char == c'x'); 1233af6ab5fSopenharmony_ci // User defined value type 1243af6ab5fSopenharmony_ci assert(l_enum == UserEnumType.Red); 1253af6ab5fSopenharmony_ci // Predefined reference types 1263af6ab5fSopenharmony_ci assert(l_Number == Number.valueOf(11)); 1273af6ab5fSopenharmony_ci assert(l_Byte == Byte.valueOf(12 as byte)); 1283af6ab5fSopenharmony_ci assert(l_Short == Short.valueOf(13 as short)); 1293af6ab5fSopenharmony_ci assert(l_Int == Int.valueOf(14 as int)); 1303af6ab5fSopenharmony_ci assert(l_Long == Long.valueOf(15 as long)); 1313af6ab5fSopenharmony_ci assert(l_Float == Float.valueOf(16 as float)); 1323af6ab5fSopenharmony_ci assert(l_Double == Double.valueOf(17 as double)); 1333af6ab5fSopenharmony_ci assert(l_Boolean == Boolean.valueOf(false)); 1343af6ab5fSopenharmony_ci assert(l_Char == Char.valueOf(c'X')); 1353af6ab5fSopenharmony_ci assert(l_string == "something"); 1363af6ab5fSopenharmony_ci assert(l_String == "Something"); 1373af6ab5fSopenharmony_ci // assert(l_array == g_array); 1383af6ab5fSopenharmony_ci // assert(l_Array == g_Array); 1393af6ab5fSopenharmony_ci assert(l_Object == g_Object); 1403af6ab5fSopenharmony_ci assert(l_Class == g_Class); 1413af6ab5fSopenharmony_ci 1423af6ab5fSopenharmony_ci this.local_field = 1100; 1433af6ab5fSopenharmony_ci LocalClassBoxing.local_s_field = 5100; 1443af6ab5fSopenharmony_ci 1453af6ab5fSopenharmony_ci l_number = 101; 1463af6ab5fSopenharmony_ci l_byte = 102; 1473af6ab5fSopenharmony_ci l_short = 103; 1483af6ab5fSopenharmony_ci l_int = 104; 1493af6ab5fSopenharmony_ci l_long = 105; 1503af6ab5fSopenharmony_ci l_float = 106.0; 1513af6ab5fSopenharmony_ci l_double = 107.0; 1523af6ab5fSopenharmony_ci l_boolean = true; 1533af6ab5fSopenharmony_ci l_char = c'y'; 1543af6ab5fSopenharmony_ci //l_enum = UserEnumType.Green; 1553af6ab5fSopenharmony_ci 1563af6ab5fSopenharmony_ci l_Number = new Number(111); 1573af6ab5fSopenharmony_ci l_Byte = new Byte(112 as byte); 1583af6ab5fSopenharmony_ci l_Short = new Short(113 as short); 1593af6ab5fSopenharmony_ci l_Int = new Int(114 as int); 1603af6ab5fSopenharmony_ci l_Long = new Long(115 as long); 1613af6ab5fSopenharmony_ci l_Float = new Float(116.0); 1623af6ab5fSopenharmony_ci l_Double = new Double(117.0); 1633af6ab5fSopenharmony_ci l_Boolean = new Boolean(true); 1643af6ab5fSopenharmony_ci l_Char = new Char(c'Y'); 1653af6ab5fSopenharmony_ci 1663af6ab5fSopenharmony_ci l_string = "something new"; 1673af6ab5fSopenharmony_ci l_String = new String("Something new"); 1683af6ab5fSopenharmony_ci l_array = g_array2; 1693af6ab5fSopenharmony_ci l_Array = g_Array2; 1703af6ab5fSopenharmony_ci l_Object = g_Object2; 1713af6ab5fSopenharmony_ci l_Class = g_Class2; 1723af6ab5fSopenharmony_ci } 1733af6ab5fSopenharmony_ci }; 1743af6ab5fSopenharmony_ci LocalClassBoxing.local_s_field = 2000; // due to the jit loop 1753af6ab5fSopenharmony_ci LocalClassBoxing.local_s_method(300); 1763af6ab5fSopenharmony_ci 1773af6ab5fSopenharmony_ci let lcb = new LocalClassBoxing(); 1783af6ab5fSopenharmony_ci lcb.local_method(400); 1793af6ab5fSopenharmony_ci 1803af6ab5fSopenharmony_ci assert(lcb.local_field == 1100); 1813af6ab5fSopenharmony_ci assert(LocalClassBoxing.local_s_field == 5100); 1823af6ab5fSopenharmony_ci assert(l_number == 101); 1833af6ab5fSopenharmony_ci assert(l_byte == 102); 1843af6ab5fSopenharmony_ci assert(l_short == 103); 1853af6ab5fSopenharmony_ci assert(l_int == 104); 1863af6ab5fSopenharmony_ci assert(l_long == 105); 1873af6ab5fSopenharmony_ci assert(l_float == 106); 1883af6ab5fSopenharmony_ci assert(l_double == 107); 1893af6ab5fSopenharmony_ci assert(l_boolean == true); 1903af6ab5fSopenharmony_ci assert(l_char == c'y'); 1913af6ab5fSopenharmony_ci 1923af6ab5fSopenharmony_ci //assert(l_enum == UserEnumType.Green); 1933af6ab5fSopenharmony_ci 1943af6ab5fSopenharmony_ci // Predefined reference types 1953af6ab5fSopenharmony_ci assert(l_Number == Number.valueOf(111)); 1963af6ab5fSopenharmony_ci assert(l_Byte == Byte.valueOf(112 as byte)); 1973af6ab5fSopenharmony_ci assert(l_Short == Short.valueOf(113 as short)); 1983af6ab5fSopenharmony_ci assert(l_Int == Int.valueOf(114 as int)); 1993af6ab5fSopenharmony_ci assert(l_Long == Long.valueOf(115 as long)); 2003af6ab5fSopenharmony_ci assert(l_Float == Float.valueOf(116 as float)); 2013af6ab5fSopenharmony_ci assert(l_Double == Double.valueOf(117 as double)); 2023af6ab5fSopenharmony_ci assert(l_Boolean == Boolean.valueOf(true)); 2033af6ab5fSopenharmony_ci assert(l_Char == Char.valueOf(c'Y')); 2043af6ab5fSopenharmony_ci assert(l_string == "something new"); 2053af6ab5fSopenharmony_ci assert(l_String == "Something new"); 2063af6ab5fSopenharmony_ci //assert(l_array == g_array2); 2073af6ab5fSopenharmony_ci //assert(l_Array == g_Array2); 2083af6ab5fSopenharmony_ci assert(l_Object == g_Object2); 2093af6ab5fSopenharmony_ci assert(l_Class == g_Class2); 2103af6ab5fSopenharmony_ci } 2113af6ab5fSopenharmony_ci} 2123af6ab5fSopenharmony_ci 2133af6ab5fSopenharmony_ci 2143af6ab5fSopenharmony_cifunction main() : int 2153af6ab5fSopenharmony_ci{ 2163af6ab5fSopenharmony_ci GlobalClass.s_method_boxing_local_class(); 2173af6ab5fSopenharmony_ci return 0; 2183af6ab5fSopenharmony_ci} 219