}"
`;
+exports[`cache multiple access > optional chaining 1`] = `
+"import { setProp as _setProp, renderEffect as _renderEffect, template as _template } from 'vue';
+const t0 = _template("<div></div>", true)
+
+export function render(_ctx) {
+ const n0 = t0()
+ _renderEffect(() => {
+ const _obj = _ctx.obj
+ _setProp(n0, "id", _obj?.foo + _obj?.bar)
+ })
+ return n0
+}"
+`;
+
exports[`cache multiple access > repeated expression in expressions 1`] = `
"import { setProp as _setProp, renderEffect as _renderEffect, template as _template } from 'vue';
const t0 = _template("<div></div>")
expect(code).contains('_setStyle(n0, {color: _color})')
})
+ test('optional chaining', () => {
+ const { code } = compileWithVBind(`<div :id="obj?.foo + obj?.bar"></div>`)
+ expect(code).matchSnapshot()
+ expect(code).contains('const _obj = _ctx.obj')
+ expect(code).contains('_setProp(n0, "id", _obj?.foo + _obj?.bar)')
+ })
+
test('not cache variable only used in property shorthand', () => {
const { code } = compileWithVBind(`
<div :style="{color}" />
case 'CallExpression': // 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)
const prop = exp.computed
? `[${extractMemberExpression(exp.property, onIdentifier)}]`