From: Evan You Date: Sat, 18 Nov 2023 04:01:55 +0000 (+0800) Subject: wip: tune perf X-Git-Tag: v3.4.0-alpha.2~40 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=caabba75900a767f0ad63994473fece58cea5dbd;p=thirdparty%2Fvuejs%2Fcore.git wip: tune perf --- diff --git a/packages/compiler-core/src/parser/index.ts b/packages/compiler-core/src/parser/index.ts index b51fd4f616..cb8e26ab45 100644 --- a/packages/compiler-core/src/parser/index.ts +++ b/packages/compiler-core/src/parser/index.ts @@ -74,7 +74,6 @@ let currentProp: AttributeNode | DirectiveNode | null = null let currentAttrValue = '' let currentAttrStartIndex = -1 let currentAttrEndIndex = -1 -let currentAttrs: Set = new Set() let inPre = 0 let inVPre = false let currentVPreBoundary: ElementNode | null = null @@ -124,7 +123,6 @@ const tokenizer = new Tokenizer(stack, { loc: getLoc(start - 1), codegenNode: undefined } - currentAttrs.clear() }, onopentagend(end) { @@ -249,18 +247,18 @@ const tokenizer = new Tokenizer(stack, { }, onattribnameend(end) { - // check duplicate attrs const start = currentProp!.loc.start.offset const name = getSlice(start, end) if (currentProp!.type === NodeTypes.DIRECTIVE) { currentProp!.rawName = name } - if (currentAttrs.has(name)) { - currentProp = null - // TODO emit error DUPLICATE_ATTRIBUTE - throw new Error(`duplicate attr ${name}`) - } else { - currentAttrs.add(name) + // check duplicate attrs + if ( + currentElement!.props.some( + p => (p.type === NodeTypes.DIRECTIVE ? p.rawName : p.name) === name + ) + ) { + // TODO duplicate } }, @@ -688,7 +686,6 @@ function reset() { tokenizer.reset() currentElement = null currentProp = null - currentAttrs.clear() currentAttrValue = '' currentAttrStartIndex = -1 currentAttrEndIndex = -1