From 0aa49b069ca1cef885d1fdee51ed03ecfdab77ce Mon Sep 17 00:00:00 2001 From: daiwei Date: Thu, 12 Dec 2024 09:08:17 +0800 Subject: [PATCH] wip: save --- .../src/generators/operation.ts | 33 +++++-------------- .../compiler-vapor/src/generators/prop.ts | 33 +++++-------------- 2 files changed, 17 insertions(+), 49 deletions(-) diff --git a/packages/compiler-vapor/src/generators/operation.ts b/packages/compiler-vapor/src/generators/operation.ts index f40eeba23..3d1ab1e2b 100644 --- a/packages/compiler-vapor/src/generators/operation.ts +++ b/packages/compiler-vapor/src/generators/operation.ts @@ -100,7 +100,7 @@ export function genEffects( push(`)`) } - // declare variables: let _foo, _bar + // declare variables: let _foo, __foo if (declareNames.size) { frag.splice(1, 0, `let ${[...declareNames].join(', ')}`, NEWLINE) } @@ -125,43 +125,28 @@ export function genEffect( allDeclareNames.add([...preAccessNames].join(', ')) } + // pre access: __foo = _ctx.foo const accessExps: CodeFragment[] = preAccessExps.size > 0 ? [[...preAccessExps].join(';'), NEWLINE] : [] - // const newlineCount = operationsExps.filter(frag => frag === NEWLINE).length - // if (newlineCount > 1) { - // multiline check expression: if (_foo !== _ctx.foo || _bar !== _ctx.bar) { - const checkExpsStart: CodeFragment[] = + // check start: if (_foo !== __foo) { + const checkStartExps: CodeFragment[] = earlyCheckExps.length > 0 ? [`if(`, ...earlyCheckExps.join(' || '), `) {`, INDENT_START] : [] - const checkExpsEnd: CodeFragment[] = + // check end: } + const checkEndExps: CodeFragment[] = earlyCheckExps.length > 0 ? [INDENT_END, NEWLINE, '}'] : [] - // assignment: _foo = _ctx.foo; _bar = _ctx.bar + // assignment: _foo = __foo const assignmentExps: CodeFragment[] = earlyCheckExps.length > 0 ? [NEWLINE, ...earlyCheckExps.map(c => c.replace('!==', '=')).join(';')] : [] push( ...accessExps, - ...checkExpsStart, + ...checkStartExps, ...operationsExps, ...assignmentExps, - ...checkExpsEnd, + ...checkEndExps, ) - // } else { - // single line check expression: (_foo !== _ctx.foo || _bar !== _ctx.bar) && - // const multiple = earlyCheckExps.length > 1 - // const checkExps: CodeFragment[] = - // earlyCheckExps.length > 0 - // ? [ - // multiple ? `(` : undefined, - // ...earlyCheckExps.join(' || '), - // multiple ? `)` : undefined, - // ' && ', - // ] - // : [] - // push(...checkExps, ...operationsExps.filter(frag => frag !== NEWLINE)) - // } - return frag } diff --git a/packages/compiler-vapor/src/generators/prop.ts b/packages/compiler-vapor/src/generators/prop.ts index f2ef49485..cf1bce982 100644 --- a/packages/compiler-vapor/src/generators/prop.ts +++ b/packages/compiler-vapor/src/generators/prop.ts @@ -46,16 +46,10 @@ export function genSetProp( } = oper const { helperName, omitKey } = getRuntimeHelper(tag, key.content, modifier) const propValue = genPropValue(values, context) - const { prevValueName, shouldWrapInParentheses } = processPropValues( - context, - helperName, - [propValue], - ) + const { prevValueName } = processPropValues(context, helperName, [propValue]) return [ NEWLINE, - ...(prevValueName - ? [shouldWrapInParentheses ? `(` : undefined, `${prevValueName} = `] - : []), + ...(prevValueName ? [`${prevValueName} = `] : []), ...genCall( [helper(helperName), null], `n${oper.element}`, @@ -67,7 +61,6 @@ export function genSetProp( ? 'true' : undefined, ), - ...(prevValueName && shouldWrapInParentheses ? [`)`] : []), ] } @@ -84,16 +77,14 @@ export function genDynamicProps( ? genLiteralObjectProps([props], context) // dynamic arg props : genExpression(props.value, context), ) // v-bind="" - const { prevValueName, shouldWrapInParentheses } = processPropValues( + const { prevValueName } = processPropValues( context, 'setDynamicProps', values, ) return [ NEWLINE, - ...(prevValueName - ? [shouldWrapInParentheses ? `(` : undefined, `${prevValueName} = `] - : []), + ...(prevValueName ? [`${prevValueName} = `] : []), ...genCall( helper('setDynamicProps'), `n${oper.element}`, @@ -101,7 +92,6 @@ export function genDynamicProps( genMulti(DELIMITERS_ARRAY, ...values), oper.root && 'true', ), - ...(prevValueName && shouldWrapInParentheses ? [`)`] : []), ] } @@ -241,12 +231,8 @@ function processPropValues( context: CodegenContext, helperName: string, values: CodeFragment[][], -): { prevValueName: string | undefined; shouldWrapInParentheses: boolean } { +): { prevValueName: string | undefined } { const { shouldCacheRenderEffectDeps, processingRenderEffect } = context - // single-line render effect and the operation needs cache return a value, - // the expression needs to be wrapped in parentheses. - // e.g. _foo === _ctx.foo && (_prev_foo = _setStyle(...)) - let shouldWrapInParentheses: boolean = false let prevValueName if (shouldCacheRenderEffectDeps()) { const { declareNames, preAccessNames, preAccessExps } = @@ -268,10 +254,9 @@ function processPropValues( } declareNames.add(prevValueName) } - shouldWrapInParentheses = false //operations.length === 1 } - return { prevValueName, shouldWrapInParentheses } + return { prevValueName } } export function processValues( @@ -301,15 +286,12 @@ function processValue( const { declareNames, earlyCheckExps, preAccessNames, preAccessExps } = processingRenderEffect! - // const isSingleLine = operations.length === 1 for (const frag of values) { if (!isArray(frag)) continue - // [code, newlineIndex, loc, name] -> [(_name = code), newlineIndex, loc, name] + // [code, newlineIndex, loc, name] -> [(__name), newlineIndex, loc, name] const [newName, , , rawName] = frag if (rawName) { let name = rawName.replace(/[^\w]/g, '_') - // if (rewrittenNames.has(name)) continue - // rewrittenNames.add(name) name = `_${name}` if (!declareNames.has(name)) { @@ -324,6 +306,7 @@ function processValue( preAccessExps.add(`${preAccessName} = ${newName}`) earlyCheckExps.push(`${name} !== ${preAccessName}`) if (needRewrite) { + // replace the original name with the preAccessName frag[0] = `${preAccessName}` } }