diff --git a/packages/compiler-core/src/parser.ts b/packages/compiler-core/src/parser.ts index 0d66d2055..95c5e129f 100644 --- a/packages/compiler-core/src/parser.ts +++ b/packages/compiler-core/src/parser.ts @@ -933,6 +933,10 @@ function getLoc(start: number, end?: number): SourceLocation { } } +export function cloneLoc(loc: SourceLocation): SourceLocation { + return getLoc(loc.start.offset, loc.end.offset) +} + function setLocEnd(loc: SourceLocation, end: number) { loc.end = tokenizer.getPos(end) loc.source = getSlice(loc.start.offset, end) diff --git a/packages/compiler-core/src/transforms/vIf.ts b/packages/compiler-core/src/transforms/vIf.ts index caefa197e..54c505407 100644 --- a/packages/compiler-core/src/transforms/vIf.ts +++ b/packages/compiler-core/src/transforms/vIf.ts @@ -30,6 +30,7 @@ import { import { ErrorCodes, createCompilerError } from '../errors' import { processExpression } from './transformExpression' import { validateBrowserExpression } from '../validateExpression' +import { cloneLoc } from '../parser' import { CREATE_COMMENT, FRAGMENT } from '../runtimeHelpers' import { findDir, findProp, getMemoedVNodeCall, injectProp } from '../utils' import { PatchFlags } from '@vue/shared' @@ -110,7 +111,7 @@ export function processIf( const branch = createIfBranch(node, dir) const ifNode: IfNode = { type: NodeTypes.IF, - loc: node.loc, + loc: cloneLoc(node.loc), branches: [branch], } context.replaceNode(ifNode)