}"
`;
+exports[`cache multiple access > should cache optional call expression with same arguments 1`] = `
+"import { setProp as _setProp, renderEffect as _renderEffect, template as _template } from 'vue';
+const t0 = _template("<div></div>")
+
+export function render(_ctx) {
+ const n0 = t0()
+ const n1 = t0()
+ _renderEffect(() => {
+ const _obj_foo_bar = _ctx.obj[_ctx.foo?.(_ctx.bar)]
+ _setProp(n0, "id", _obj_foo_bar)
+ _setProp(n1, "id", _obj_foo_bar)
+ })
+ return [n0, n1]
+}"
+`;
+
exports[`cache multiple access > should not cache method call with different arguments 1`] = `
"import { setProp as _setProp, renderEffect as _renderEffect, template as _template } from 'vue';
const t0 = _template("<div></div>")
expect(code).contains(`const _msg_replace_1_2 = _ctx.msg.replace('1', '2')`)
expect(code).not.contains('const _msg = _ctx.msg')
})
+
+ test('should cache optional call expression with same arguments', () => {
+ const { code } = compileWithVBind(`
+ <div :id="obj[foo?.(bar)]"></div>
+ <div :id="obj[foo?.(bar)]"></div>
+ `)
+ expect(code).matchSnapshot()
+ expect(code).contains(`const _obj_foo_bar = _ctx.obj[_ctx.foo?.(_ctx.bar)]`)
+ })
})
return `${extractMemberExpression(exp.left, onIdentifier)} ${exp.operator} ${extractMemberExpression(exp.right, onIdentifier)}`
case 'CallExpression': // foo[bar(baz)]
return `${extractMemberExpression(exp.callee, onIdentifier)}(${exp.arguments.map(arg => extractMemberExpression(arg, onIdentifier)).join(', ')})`
+ case 'OptionalCallExpression': // foo[bar?.(baz)]
+ return `${extractMemberExpression(exp.callee, onIdentifier)}?.(${exp.arguments.map(arg => extractMemberExpression(arg, onIdentifier)).join(', ')})`
case 'MemberExpression': // foo[bar.baz]
case 'OptionalMemberExpression': // foo?.bar
const object = extractMemberExpression(exp.object, onIdentifier)