From caabba75900a767f0ad63994473fece58cea5dbd Mon Sep 17 00:00:00 2001 From: Evan You Date: Sat, 18 Nov 2023 12:01:55 +0800 Subject: [PATCH] wip: tune perf --- packages/compiler-core/src/parser/index.ts | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) 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 -- 2.47.3