From ba692feb49f2a70a2b24236774d6c806e2e24bf0 Mon Sep 17 00:00:00 2001 From: XiaoPi <530257315@qq.com> Date: Mon, 17 Feb 2025 13:32:44 +0800 Subject: [PATCH] return UnknownValue if the usedbranch is unkown and the path is not empty (#5846) --- src/ast/nodes/LogicalExpression.ts | 2 +- .../logical-expression-with-property-access/_config.js | 3 +++ .../logical-expression-with-property-access/_expected.js | 8 ++++++++ .../logical-expression-with-property-access/main.js | 6 ++++++ 4 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 test/form/samples/logical-expression-with-property-access/_config.js create mode 100644 test/form/samples/logical-expression-with-property-access/_expected.js create mode 100644 test/form/samples/logical-expression-with-property-access/main.js diff --git a/src/ast/nodes/LogicalExpression.ts b/src/ast/nodes/LogicalExpression.ts index d2eee96f2..ac0305c60 100644 --- a/src/ast/nodes/LogicalExpression.ts +++ b/src/ast/nodes/LogicalExpression.ts @@ -119,7 +119,7 @@ export default class LogicalExpression extends NodeBase implements Deoptimizable if (usedBranch) { this.expressionsToBeDeoptimized.push(origin); return usedBranch.getLiteralValueAtPath(path, recursionTracker, origin); - } else if (!this.hasDeoptimizedCache) { + } else if (!this.hasDeoptimizedCache && !path.length) { const rightValue = this.right.getLiteralValueAtPath(path, recursionTracker, origin); const booleanOrUnknown = tryCastLiteralValueToBoolean(rightValue); if (typeof booleanOrUnknown !== 'symbol') { diff --git a/test/form/samples/logical-expression-with-property-access/_config.js b/test/form/samples/logical-expression-with-property-access/_config.js new file mode 100644 index 000000000..b1636b09a --- /dev/null +++ b/test/form/samples/logical-expression-with-property-access/_config.js @@ -0,0 +1,3 @@ +module.exports = defineTest({ + description: 'keep logical expressions' +}); diff --git a/test/form/samples/logical-expression-with-property-access/_expected.js b/test/form/samples/logical-expression-with-property-access/_expected.js new file mode 100644 index 000000000..87feb1127 --- /dev/null +++ b/test/form/samples/logical-expression-with-property-access/_expected.js @@ -0,0 +1,8 @@ +const config = { + someComponent: { }, + default: { config1: 'config1DefaultValue' } +}; + +var main = (config.someComponent || config.default).config1 || 'config1DefaultValue'; + +export { main as default }; diff --git a/test/form/samples/logical-expression-with-property-access/main.js b/test/form/samples/logical-expression-with-property-access/main.js new file mode 100644 index 000000000..0355da37f --- /dev/null +++ b/test/form/samples/logical-expression-with-property-access/main.js @@ -0,0 +1,6 @@ +const config = { + someComponent: { someOtherConfig: false }, + default: { config1: 'config1DefaultValue' } +}; + +export default (config.someComponent || config.default).config1 || 'config1DefaultValue';