1/* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16//! CHECKER AOT IR Builder, check String concatenation 17//! SKIP_IF @architecture == "arm32" 18//! RUN entry: "ETSGLOBAL::main" 19//! RUN_PAOC options: "--compiler-regex='.*concat[0-9]+' --compiler-inlining=false" 20//! 21//! METHOD "ETSGLOBAL::concat0" 22//! PASS_BEFORE "BranchElimination" 23//! INST_NOT /Intrinsic.StdCoreStringConcat/ 24//! INST /StringBuilder::<ctor>/ 25//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 26//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 27//! INST_NEXT /Intrinsic.StdCoreSbToString/ 28//! PASS_AFTER "ChecksElimination" 29//! INST_NOT /StringBuilder::<ctor>/ 30//! INST_NOT /Intrinsic.StdCoreSbAppendString/ 31//! INST_NOT /Intrinsic.StdCoreSbToString/ 32//! INST_COUNT /Intrinsic.StdCoreStringConcat2/,1 33//! 34//! METHOD "ETSGLOBAL::concat1" 35//! PASS_BEFORE "BranchElimination" 36//! INST_NOT /Intrinsic.StdCoreStringConcat/ 37//! INST /StringBuilder::<ctor>/ 38//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 39//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 40//! INST_NEXT /Intrinsic.StdCoreSbToString/ 41//! PASS_AFTER "ChecksElimination" 42//! INST_NOT /StringBuilder::<ctor>/ 43//! INST_NOT /Intrinsic.StdCoreSbAppendString/ 44//! INST_NOT /Intrinsic.StdCoreSbToString/ 45//! INST_COUNT /Intrinsic.StdCoreStringConcat2/,1 46//! 47//! METHOD "ETSGLOBAL::concat2" 48//! PASS_BEFORE "BranchElimination" 49//! INST_NOT /Intrinsic.StdCoreStringConcat/ 50//! INST /StringBuilder::<ctor>/ 51//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 52//! INST_NEXT /Intrinsic.StdCoreSbToString/ 53//! PASS_AFTER "ChecksElimination" 54//! INST_NOT /Intrinsic.StdCoreStringConcat/ 55//! INST /StringBuilder::<ctor>/ 56//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 57//! INST_NEXT /Intrinsic.StdCoreSbToString/ 58//! 59//! METHOD "ETSGLOBAL::concat3" 60//! PASS_BEFORE "BranchElimination" 61//! INST_NOT /Intrinsic.StdCoreStringConcat/ 62//! INST /StringBuilder::<ctor>/ 63//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 64//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 65//! INST_NEXT /Intrinsic.StdCoreSbToString/ 66//! PASS_AFTER "ChecksElimination" 67//! INST_NOT /Intrinsic.StdCoreStringConcat/ 68//! INST /StringBuilder::<ctor>/ 69//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 70//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 71//! INST_NEXT /Intrinsic.StdCoreSbToString/ 72//! 73//! METHOD "ETSGLOBAL::concat4" 74//! PASS_BEFORE "BranchElimination" 75//! INST_NOT /Intrinsic.StdCoreStringConcat/ 76//! INST /StringBuilder::<ctor>/ 77//! INST_COUNT /Intrinsic.StdCoreSbAppendString/,3 78//! INST /Intrinsic.StdCoreSbToString/ 79//! PASS_AFTER "ChecksElimination" 80//! INST_NOT /StringBuilder::<ctor>/ 81//! INST_NOT /Intrinsic.StdCoreSbAppendString/ 82//! INST_NOT /Intrinsic.StdCoreSbToString/ 83//! INST_COUNT /Intrinsic.StdCoreStringConcat3/,1 84//! 85//! METHOD "ETSGLOBAL::concat5" 86//! PASS_BEFORE "BranchElimination" 87//! INST_NOT /Intrinsic.StdCoreStringConcat/ 88//! INST /StringBuilder::<ctor>/ 89//! INST_COUNT /Intrinsic.StdCoreSbAppendString/,4 90//! INST /Intrinsic.StdCoreSbToString/ 91//! PASS_AFTER "ChecksElimination" 92//! INST_NOT /StringBuilder::<ctor>/ 93//! INST_NOT /Intrinsic.StdCoreSbAppendString/ 94//! INST_NOT /Intrinsic.StdCoreSbToString/ 95//! INST_COUNT /Intrinsic.StdCoreStringConcat4/,1 96//! 97//! METHOD "ETSGLOBAL::concat6" 98//! PASS_BEFORE "BranchElimination" 99//! INST_NOT /Intrinsic.StdCoreStringConcat/ 100//! INST_COUNT /StringBuilder::<ctor>/,3 101//! INST_COUNT /Intrinsic.StdCoreSbAppendString/,6 102//! INST_COUNT /Intrinsic.StdCoreSbToString/,3 103//! PASS_AFTER "ChecksElimination" 104//! INST_NOT /StringBuilder::<ctor>/ 105//! INST_NOT /Intrinsic.StdCoreSbAppendString/ 106//! INST_NOT /Intrinsic.StdCoreSbToString/ 107//! INST_COUNT /Intrinsic.StdCoreStringConcat2/,3 108//! 109//! METHOD "ETSGLOBAL::concat7" 110//! PASS_BEFORE "BranchElimination" 111//! INST_NOT /Intrinsic.StdCoreStringConcat/ 112//! INST_COUNT /StringBuilder::<ctor>/,3 113//! INST_COUNT /Intrinsic.StdCoreSbAppendString/,6 114//! INST_COUNT /Intrinsic.StdCoreSbToString/,3 115//! PASS_AFTER "ChecksElimination" 116//! INST_NOT /StringBuilder::<ctor>/ 117//! INST_NOT /Intrinsic.StdCoreSbAppendString/ 118//! INST_NOT /Intrinsic.StdCoreSbToString/ 119//! INST_COUNT /Intrinsic.StdCoreStringConcat2/,3 120//! 121//! METHOD "ETSGLOBAL::concat8" 122//! PASS_BEFORE "BranchElimination" 123//! INST_NOT /Intrinsic.StdCoreStringConcat/ 124//! INST /StringBuilder::<ctor>/ 125//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 126//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 127//! INST_NEXT /Intrinsic.StdCoreSbToString/ 128//! PASS_AFTER "ChecksElimination" 129//! INST_NOT /Intrinsic.StdCoreStringConcat/ 130//! INST /StringBuilder::<ctor>/ 131//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 132//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 133//! INST_NEXT /Intrinsic.StdCoreSbToString/ 134//! 135//! METHOD "ETSGLOBAL::concat9" 136//! PASS_BEFORE "BranchElimination" 137//! INST_NOT /Intrinsic.StdCoreStringConcat/ 138//! INST /StringBuilder::<ctor>/ 139//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 140//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 141//! INST_NEXT /Intrinsic.StdCoreSbToString/ 142//! PASS_AFTER "ChecksElimination" 143//! INST_NOT /Intrinsic.StdCoreStringConcat/ 144//! INST /StringBuilder::<ctor>/ 145//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 146//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 147//! INST_NEXT /Intrinsic.StdCoreSbToString/ 148//! 149//! METHOD "ETSGLOBAL::concat10" 150//! PASS_BEFORE "BranchElimination" 151//! INST_NOT /Intrinsic.StdCoreStringConcat/ 152//! INST /StringBuilder::<ctor>/ 153//! INST_COUNT /Intrinsic.StdCoreSbAppendString/,5 154//! INST /Intrinsic.StdCoreSbToString/ 155//! PASS_AFTER "ChecksElimination" 156//! INST_NOT /Intrinsic.StdCoreStringConcat/ 157//! INST /StringBuilder::<ctor>/ 158//! INST_COUNT /Intrinsic.StdCoreSbAppendString/,5 159//! INST /Intrinsic.StdCoreSbToString/ 160//! 161//! METHOD "ETSGLOBAL::concat11" 162//! PASS_BEFORE "BranchElimination" 163//! INST_NOT /Intrinsic.StdCoreStringConcat/ 164//! INST /StringBuilder::<ctor>/ 165//! INST_COUNT /Intrinsic.StdCoreSbAppend/,3 166//! INST /Intrinsic.StdCoreSbToString/ 167//! PASS_AFTER "ChecksElimination" 168//! INST_NOT /Intrinsic.StdCoreStringConcat/ 169//! INST /StringBuilder::<ctor>/ 170//! INST_COUNT /Intrinsic.StdCoreSbAppend/,3 171//! INST /Intrinsic.StdCoreSbToString/ 172//! 173//! METHOD "ETSGLOBAL::concat12" 174//! PASS_BEFORE "BranchElimination" 175//! INST_NOT /Intrinsic.StdCoreStringConcat/ 176//! INST_COUNT /StringBuilder::<ctor>/,3 177//! INST_COUNT /Intrinsic.StdCoreSbAppendString/,6 178//! INST_COUNT /Intrinsic.StdCoreSbToString/,3 179//! PASS_AFTER "ChecksElimination" 180//! INST_NOT /StringBuilder::<ctor>/ 181//! INST_NOT /Intrinsic.StdCoreSbAppendString/ 182//! INST_NOT /Intrinsic.StdCoreSbToString/ 183//! INST_COUNT /Intrinsic.StdCoreStringConcat2/,3 184//! 185//! METHOD "ETSGLOBAL::concat13" 186//! PASS_BEFORE "BranchElimination" 187//! INST_NOT /Intrinsic.StdCoreStringConcat/ 188//! INST /StringBuilder::<ctor>/ 189//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 190//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 191//! INST_NEXT /Intrinsic.StdCoreSbToString/ 192//! PASS_AFTER "ChecksElimination" 193//! INST_NOT /StringBuilder::<ctor>/ 194//! INST_NOT /Intrinsic.StdCoreSbAppendString/ 195//! INST_NOT /Intrinsic.StdCoreSbToString/ 196//! INST /Intrinsic.StdCoreStringConcat2/ 197//! 198//! METHOD "ETSGLOBAL::concat14" 199//! PASS_BEFORE "BranchElimination" 200//! INST_NOT /Intrinsic.StdCoreStringConcat/ 201//! INST /StringBuilder::<ctor>/ 202//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 203//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 204//! INST_NEXT /Intrinsic.StdCoreSbToString/ 205//! PASS_AFTER "ChecksElimination" 206//! INST /StringBuilder::<ctor>/ 207//! INST_NOT /Intrinsic.StdCoreStringConcat/ 208//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 209//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 210//! INST_NEXT /Intrinsic.StdCoreSbToString/ 211 212//! CHECKER JIT IR Builder, check String concatenation 213//! SKIP_IF @architecture == "arm32" 214//! RUN force_jit: true, options: "--compiler-regex='.*concat[0-9]+.*' --compiler-inlining=false", entry: "ETSGLOBAL::main" 215//! 216//! METHOD "ETSGLOBAL::concat0" 217//! PASS_BEFORE "BranchElimination" 218//! INST_NOT /Intrinsic.StdCoreStringConcat/ 219//! INST /StringBuilder::<ctor>/ 220//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 221//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 222//! INST_NEXT /Intrinsic.StdCoreSbToString/ 223//! PASS_AFTER "ChecksElimination" 224//! INST_NOT /StringBuilder::<ctor>/ 225//! INST_NOT /Intrinsic.StdCoreSbAppendString/ 226//! INST_NOT /Intrinsic.StdCoreSbToString/ 227//! INST_COUNT /Intrinsic.StdCoreStringConcat2/,1 228//! 229//! METHOD "ETSGLOBAL::concat1" 230//! PASS_BEFORE "BranchElimination" 231//! INST_NOT /Intrinsic.StdCoreStringConcat/ 232//! INST /StringBuilder::<ctor>/ 233//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 234//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 235//! INST_NEXT /Intrinsic.StdCoreSbToString/ 236//! PASS_AFTER "ChecksElimination" 237//! INST_NOT /StringBuilder::<ctor>/ 238//! INST_NOT /Intrinsic.StdCoreSbAppendString/ 239//! INST_NOT /Intrinsic.StdCoreSbToString/ 240//! INST_COUNT /Intrinsic.StdCoreStringConcat2/,1 241//! 242//! METHOD "ETSGLOBAL::concat2" 243//! PASS_BEFORE "BranchElimination" 244//! INST_NOT /Intrinsic.StdCoreStringConcat/ 245//! INST /StringBuilder::<ctor>/ 246//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 247//! INST_NEXT /Intrinsic.StdCoreSbToString/ 248//! PASS_AFTER "ChecksElimination" 249//! INST_NOT /Intrinsic.StdCoreStringConcat/ 250//! INST /StringBuilder::<ctor>/ 251//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 252//! INST_NEXT /Intrinsic.StdCoreSbToString/ 253//! 254//! METHOD "ETSGLOBAL::concat3" 255//! PASS_BEFORE "BranchElimination" 256//! INST_NOT /Intrinsic.StdCoreStringConcat/ 257//! INST /StringBuilder::<ctor>/ 258//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 259//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 260//! INST_NEXT /Intrinsic.StdCoreSbToString/ 261//! PASS_AFTER "ChecksElimination" 262//! INST_NOT /Intrinsic.StdCoreStringConcat/ 263//! INST /StringBuilder::<ctor>/ 264//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 265//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 266//! INST_NEXT /Intrinsic.StdCoreSbToString/ 267//! 268//! METHOD "ETSGLOBAL::concat4" 269//! PASS_BEFORE "BranchElimination" 270//! INST_NOT /Intrinsic.StdCoreStringConcat/ 271//! INST /StringBuilder::<ctor>/ 272//! INST_COUNT /Intrinsic.StdCoreSbAppendString/,3 273//! INST /Intrinsic.StdCoreSbToString/ 274//! PASS_AFTER "ChecksElimination" 275//! INST_NOT /StringBuilder::<ctor>/ 276//! INST_NOT /Intrinsic.StdCoreSbAppendString/ 277//! INST_NOT /Intrinsic.StdCoreSbToString/ 278//! INST_COUNT /Intrinsic.StdCoreStringConcat3/,1 279//! 280//! METHOD "ETSGLOBAL::concat5" 281//! PASS_BEFORE "BranchElimination" 282//! INST_NOT /Intrinsic.StdCoreStringConcat/ 283//! INST /StringBuilder::<ctor>/ 284//! INST_COUNT /Intrinsic.StdCoreSbAppendString/,4 285//! INST /Intrinsic.StdCoreSbToString/ 286//! PASS_AFTER "ChecksElimination" 287//! INST_NOT /StringBuilder::<ctor>/ 288//! INST_NOT /Intrinsic.StdCoreSbAppendString/ 289//! INST_NOT /Intrinsic.StdCoreSbToString/ 290//! INST_COUNT /Intrinsic.StdCoreStringConcat4/,1 291//! 292//! METHOD "ETSGLOBAL::concat6" 293//! PASS_BEFORE "BranchElimination" 294//! INST_NOT /Intrinsic.StdCoreStringConcat/ 295//! INST_COUNT /StringBuilder::<ctor>/,3 296//! INST_COUNT /Intrinsic.StdCoreSbAppendString/,6 297//! INST_COUNT /Intrinsic.StdCoreSbToString/,3 298//! PASS_AFTER "ChecksElimination" 299//! INST_NOT /StringBuilder::<ctor>/ 300//! INST_NOT /Intrinsic.StdCoreSbAppendString/ 301//! INST_NOT /Intrinsic.StdCoreSbToString/ 302//! INST_COUNT /Intrinsic.StdCoreStringConcat2/,3 303//! 304//! METHOD "ETSGLOBAL::concat7" 305//! PASS_BEFORE "BranchElimination" 306//! INST_NOT /Intrinsic.StdCoreStringConcat/ 307//! INST_COUNT /StringBuilder::<ctor>/,3 308//! INST_COUNT /Intrinsic.StdCoreSbAppendString/,6 309//! INST_COUNT /Intrinsic.StdCoreSbToString/,3 310//! PASS_AFTER "ChecksElimination" 311//! INST_NOT /StringBuilder::<ctor>/ 312//! INST_NOT /Intrinsic.StdCoreSbAppendString/ 313//! INST_NOT /Intrinsic.StdCoreSbToString/ 314//! INST_COUNT /Intrinsic.StdCoreStringConcat2/,3 315//! 316//! METHOD "ETSGLOBAL::concat8" 317//! PASS_BEFORE "BranchElimination" 318//! INST_NOT /Intrinsic.StdCoreStringConcat/ 319//! INST /StringBuilder::<ctor>/ 320//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 321//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 322//! INST_NEXT /Intrinsic.StdCoreSbToString/ 323//! PASS_AFTER "ChecksElimination" 324//! INST_NOT /Intrinsic.StdCoreStringConcat/ 325//! INST /StringBuilder::<ctor>/ 326//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 327//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 328//! INST_NEXT /Intrinsic.StdCoreSbToString/ 329//! 330//! METHOD "ETSGLOBAL::concat9" 331//! PASS_BEFORE "BranchElimination" 332//! INST_NOT /Intrinsic.StdCoreStringConcat/ 333//! INST /StringBuilder::<ctor>/ 334//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 335//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 336//! INST_NEXT /Intrinsic.StdCoreSbToString/ 337//! PASS_AFTER "ChecksElimination" 338//! INST_NOT /Intrinsic.StdCoreStringConcat/ 339//! INST /StringBuilder::<ctor>/ 340//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 341//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 342//! INST_NEXT /Intrinsic.StdCoreSbToString/ 343//! 344//! METHOD "ETSGLOBAL::concat10" 345//! PASS_BEFORE "BranchElimination" 346//! INST_NOT /Intrinsic.StdCoreStringConcat/ 347//! INST /StringBuilder::<ctor>/ 348//! INST_COUNT /Intrinsic.StdCoreSbAppendString/,5 349//! INST /Intrinsic.StdCoreSbToString/ 350//! PASS_AFTER "ChecksElimination" 351//! INST_NOT /Intrinsic.StdCoreStringConcat/ 352//! INST /StringBuilder::<ctor>/ 353//! INST_COUNT /Intrinsic.StdCoreSbAppendString/,5 354//! INST /Intrinsic.StdCoreSbToString/ 355//! 356//! METHOD "ETSGLOBAL::concat11" 357//! PASS_BEFORE "BranchElimination" 358//! INST_NOT /Intrinsic.StdCoreStringConcat/ 359//! INST /StringBuilder::<ctor>/ 360//! INST_COUNT /Intrinsic.StdCoreSbAppend/,3 361//! INST /Intrinsic.StdCoreSbToString/ 362//! PASS_AFTER "ChecksElimination" 363//! INST_NOT /Intrinsic.StdCoreStringConcat/ 364//! INST /StringBuilder::<ctor>/ 365//! INST_COUNT /Intrinsic.StdCoreSbAppend/,3 366//! INST /Intrinsic.StdCoreSbToString/ 367//! 368//! METHOD "ETSGLOBAL::concat12" 369//! PASS_BEFORE "BranchElimination" 370//! INST_NOT /Intrinsic.StdCoreStringConcat/ 371//! INST_COUNT /StringBuilder::<ctor>/,3 372//! INST_COUNT /Intrinsic.StdCoreSbAppendString/,6 373//! INST_COUNT /Intrinsic.StdCoreSbToString/,3 374//! PASS_AFTER "ChecksElimination" 375//! INST_NOT /StringBuilder::<ctor>/ 376//! INST_NOT /Intrinsic.StdCoreSbAppendString/ 377//! INST_NOT /Intrinsic.StdCoreSbToString/ 378//! INST_COUNT /Intrinsic.StdCoreStringConcat2/,3 379//! 380//! METHOD "ETSGLOBAL::concat13" 381//! PASS_BEFORE "BranchElimination" 382//! INST_NOT /Intrinsic.StdCoreStringConcat/ 383//! INST /StringBuilder::<ctor>/ 384//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 385//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 386//! INST_NEXT /Intrinsic.StdCoreSbToString/ 387//! PASS_AFTER "ChecksElimination" 388//! INST_NOT /StringBuilder::<ctor>/ 389//! INST_NOT /Intrinsic.StdCoreSbAppendString/ 390//! INST_NOT /Intrinsic.StdCoreSbToString/ 391//! INST /Intrinsic.StdCoreStringConcat2/ 392//! 393//! METHOD "ETSGLOBAL::concat14" 394//! PASS_BEFORE "BranchElimination" 395//! INST_NOT /Intrinsic.StdCoreStringConcat/ 396//! INST /StringBuilder::<ctor>/ 397//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 398//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 399//! INST_NEXT /Intrinsic.StdCoreSbToString/ 400//! PASS_AFTER "ChecksElimination" 401//! INST /StringBuilder::<ctor>/ 402//! INST_NOT /Intrinsic.StdCoreStringConcat/ 403//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 404//! INST_NEXT /Intrinsic.StdCoreSbAppendString/ 405//! INST_NEXT /Intrinsic.StdCoreSbToString/ 406 407function concat0(a: String, b: String): String { 408 return a + b; // applied 409} 410 411function concat1(a: String, b: String): String { 412 let sb = new StringBuilder(); 413 sb.append(a); 414 sb.append(b); 415 return sb.toString(); // applied, IR is equivalent to 'return a + b;' 416} 417 418function concat2(a: String, b: String): String { 419 let sb = new StringBuilder(a); 420 sb.append(b); 421 return sb.toString(); // not applied, IR is not equivalent to 'return a + b;' 422} 423 424let sb: StringBuilder; 425 426function concat3(a: String, b: String): String { 427 sb = new StringBuilder(); // the object is a global variable 428 sb.append(a); 429 sb.append(b); 430 return sb.toString(); // not applied, IR is not equivalent to 'return a + b;' 431} 432 433function concat4(a: String, b: String, c: String): String { 434 return a + b + c; // applied 435} 436 437function concat5(a: String, b: String, c: String, d: String): String { 438 return a + b + c + d; // applied 439} 440 441function concat6(a: String, b: String, c: String, d: String): String { 442 let ab = a + b; // applied 443 let cd = c + d; // applied 444 return ab + cd; // applied 445} 446 447function concat7(a: String, b: String, c: String, d: String): String { 448 let str = a + b; // applied 449 str += c; // applied 450 str += d; // applied 451 return str; 452} 453 454function concat8(a: String, b: String): String { 455 let sb = new StringBuilder(); 456 sb.append(a); 457 if (b != "") 458 sb.append(b); 459 return sb.toString(); // not applied, IR is not equivalent to 'return a + b;' 460} 461 462function concat9(a: String, b: String): String { 463 return new StringBuilder().append(a).append(b).toString(); // not applied, IR is not equivalent to 'return a + b;' 464} 465 466function concat10(a: String, b: String, c: String, d: String, e: String): String { 467 return a + b + c + d + e; // not applied, to many args 468} 469 470function concat11(a: String, b: String): String { 471 return a + b + 1; // not applied, concatenation with int 472} 473 474function concat12(a: String, b: String, c: String, d: String): String { 475 let abcd = a + b; // applied 476 abcd += c + d; // applied 477 return abcd; 478} 479 480function concat13(): string 481{ 482 let str = "" + StringBuilder.toString(1); // applied 483 return str; 484} 485 486function concat14(src: string|null): string { 487 let dst: string = "" + src; // not applied due to instance used outside 488 // basic block it was created 489 return dst; 490} 491 492function main() { 493 assert concat0("abc", "de") == "abcde": "Wrong result at concat0"; 494 assert concat1("abc", "de") == "abcde": "Wrong result at concat1"; 495 assert concat2("abc", "de") == "abcde": "Wrong result at concat2"; 496 assert concat3("abc", "de") == "abcde": "Wrong result at concat3"; 497 assert concat4("ab", "c", "de") == "abcde": "Wrong result at concat4"; 498 assert concat5("ab", "c", "d", "e") == "abcde": "Wrong result at concat5"; 499 console.log(concat6("ab", "c", "d", "e")) 500// assert concat6("ab", "c", "d", "e") == "abcde": "Wrong result at concat6"; 501 console.log(concat7("ab", "c", "d", "e")) 502 assert concat7("ab", "c", "d", "e") == "abcde": "Wrong result at concat7"; 503 assert concat8("abc", "de") == "abcde": "Wrong result at concat8"; 504 assert concat9("abc", "de") == "abcde": "Wrong result at concat9"; 505 assert concat10("a", "b", "c", "d", "e") == "abcde": "Wrong result at concat10"; 506 assert concat11("abc", "de") == "abcde1": "Wrong result at concat11"; 507 console.log(concat12("ab", "c", "d", "e")) 508 assert concat12("ab", "c", "d", "e") == "abcde": "Wrong result at concat12"; 509 assert concat13() == "1": "Wrong result at concat13"; 510 assert concat14(null) == "null": "Wrong result at concat14"; 511} 512