From 3943c473eac4f4ad0f8ee600d23c8a9ad88606e2 Mon Sep 17 00:00:00 2001 From: Fouckttt Date: Fri, 20 Jun 2025 19:28:20 +0800 Subject: [PATCH] Fix scan code stack overflow Issue:https://gitee.com/openharmony/arkcompiler_ets_frontend/issues/ICGR0J Test scenarios:scan Signed-off-by: Fouckttt --- ets2panda/linter/src/lib/utils/TsUtils.ts | 22 +++++++++++-------- .../linter/test/builtin/builtin_thisArgs.ets | 10 ++++++++- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/ets2panda/linter/src/lib/utils/TsUtils.ts b/ets2panda/linter/src/lib/utils/TsUtils.ts index 7aa8050e88..3395d32594 100644 --- a/ets2panda/linter/src/lib/utils/TsUtils.ts +++ b/ets2panda/linter/src/lib/utils/TsUtils.ts @@ -824,18 +824,22 @@ export class TsUtils { isStrict: boolean = false ): boolean { if ( - TsUtils.reduceReference(lhsType) === TsUtils.reduceReference(rhsType) && - TsUtils.isTypeReference(lhsType) && - TsUtils.isTypeReference(rhsType) + TsUtils.reduceReference(lhsType) !== TsUtils.reduceReference(rhsType) || + !TsUtils.isTypeReference(lhsType) || + !TsUtils.isTypeReference(rhsType) ) { - const lhsArgs = lhsType.typeArguments; - const rhsArgs = rhsType.typeArguments; - if (lhsArgs && lhsArgs.length > 0) { - if (rhsArgs && rhsArgs.length > 0) { - return this.needToDeduceStructuralIdentity(lhsArgs[0], rhsArgs[0], rhsExpr, isStrict); + return false; + } + const lhsArgs = lhsType.typeArguments; + const rhsArgs = rhsType.typeArguments; + if (lhsArgs && lhsArgs.length > 0) { + if (rhsArgs && rhsArgs.length > 0) { + if (rhsArgs[0] === lhsArgs[0]) { + return false; } - return this.needToDeduceStructuralIdentity(lhsArgs[0], rhsType, rhsExpr, isStrict); + return this.needToDeduceStructuralIdentity(lhsArgs[0], rhsArgs[0], rhsExpr, isStrict); } + return this.needToDeduceStructuralIdentity(lhsArgs[0], rhsType, rhsExpr, isStrict); } return false; } diff --git a/ets2panda/linter/test/builtin/builtin_thisArgs.ets b/ets2panda/linter/test/builtin/builtin_thisArgs.ets index 2a73669055..b296e847c1 100755 --- a/ets2panda/linter/test/builtin/builtin_thisArgs.ets +++ b/ets2panda/linter/test/builtin/builtin_thisArgs.ets @@ -28,4 +28,12 @@ let a = new MyClass(2); let b = new MyClass(3); arr.filter(a.compare, a); arr.filter(a.compare); -arr.filter(a.compare, b); \ No newline at end of file +arr.filter(a.compare, b); + +type T = number | T[]; +let arr: ReadonlyArray = [[1.0, 2.0], 3.0, [4.0, 5.0]]; +arr.flatMap( + (value, index, array) => { + return value; + } +); \ No newline at end of file -- Gitee