wip(compiler): adjust statement positions
This commit is contained in:
@@ -145,10 +145,20 @@ export function generate(
|
||||
const context = createCodegenContext(ast, options)
|
||||
const { mode, push, prefixIdentifiers, indent, deindent, newline } = context
|
||||
const imports = ast.imports.join(', ')
|
||||
|
||||
// preambles
|
||||
if (mode === 'function') {
|
||||
// generate const declarations for helpers
|
||||
// Generate const declaration for helpers
|
||||
// In prefix mode, we place the const declaration at top so it's done
|
||||
// only once; But if we not prefixing, we place the decalration inside the
|
||||
// with block so it doesn't incur the `in` check cost for every helper access.
|
||||
if (imports) {
|
||||
push(`const { ${imports} } = Vue\n`)
|
||||
if (prefixIdentifiers) {
|
||||
push(`const { ${imports} } = Vue\n`)
|
||||
} else {
|
||||
// save Vue in a separate variable to avoid collision
|
||||
push(`const _Vue = Vue`)
|
||||
}
|
||||
}
|
||||
genHoists(ast.hoists, context)
|
||||
push(`return `)
|
||||
@@ -160,8 +170,24 @@ export function generate(
|
||||
genHoists(ast.hoists, context)
|
||||
push(`export default `)
|
||||
}
|
||||
|
||||
// enter render function
|
||||
push(`function render() {`)
|
||||
indent()
|
||||
|
||||
if (!prefixIdentifiers) {
|
||||
push(`with (this) {`)
|
||||
indent()
|
||||
// function mode const declarations should be inside with block
|
||||
if (mode === 'function' && imports) {
|
||||
push(`const { ${imports} } = _Vue`)
|
||||
newline()
|
||||
}
|
||||
} else {
|
||||
push(`const _ctx = this`)
|
||||
newline()
|
||||
}
|
||||
|
||||
// generate asset resolution statements
|
||||
if (ast.statements.length) {
|
||||
ast.statements.forEach(s => {
|
||||
@@ -170,13 +196,8 @@ export function generate(
|
||||
})
|
||||
newline()
|
||||
}
|
||||
if (!prefixIdentifiers) {
|
||||
push(`with (this) {`)
|
||||
indent()
|
||||
} else {
|
||||
push(`const _ctx = this`)
|
||||
newline()
|
||||
}
|
||||
|
||||
// generate the VNode tree expression
|
||||
push(`return `)
|
||||
genChildren(ast.children, context, true /* asRoot */)
|
||||
if (!prefixIdentifiers) {
|
||||
|
||||
Reference in New Issue
Block a user