Merge pull request #2177 from jches/export-codegen

more export codegen fixes
pull/2188/head
Rich Harris 6 years ago committed by GitHub
commit 333b933837
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -820,29 +820,34 @@ export default class Component {
}
if (variable.export_name) {
if (variable.subscribable) {
coalesced_declarations.push({
kind: node.kind,
declarators: [declarator],
insert: get_insert(variable)
});
if (current_group && current_group.kind !== node.kind) {
current_group = null;
} else {
if (current_group && current_group.kind !== node.kind) {
current_group = null;
}
}
if (!current_group) {
current_group = { kind: node.kind, declarators: [], insert: null };
coalesced_declarations.push(current_group);
}
const insert = variable.subscribable
? get_insert(variable)
: null;
if (!current_group || (current_group.insert && insert)) {
current_group = { kind: node.kind, declarators: [declarator], insert };
coalesced_declarations.push(current_group);
} else if (insert) {
current_group.insert = insert
current_group.declarators.push(declarator);
} else {
current_group.declarators.push(declarator);
}
if (variable.name !== variable.export_name) {
code.prependRight(declarator.id.start, `${variable.export_name}:`)
}
if (next) {
const next_variable = component.var_lookup.get(next.id.name)
if (next_variable && !next_variable.export_name) {
const new_declaration = !next_variable.export_name
|| (current_group.insert && next_variable.subscribable)
if (new_declaration) {
code.overwrite(declarator.end, next.start, ` ${node.kind} `);
}
}
@ -919,6 +924,11 @@ export default class Component {
const all_hoistable = node.declarations.every(d => {
if (!d.init) return false;
if (d.init.type !== 'Literal') return false;
const v = this.var_lookup.get(d.id.name)
if (v.reassigned) return false
if (v.export_name && v.export_name !== v.name) return false
if (this.var_lookup.get(d.id.name).reassigned) return false;
if (this.vars.find(variable => variable.name === d.id.name && variable.module)) return false;

@ -0,0 +1,29 @@
import { writable } from '../../../../store';
export default {
props: {
s1: writable(42),
s2: writable(43),
p1: 2,
p3: 3,
a1: writable(1),
a2: 4,
a6: writable(29),
for: 'loop',
continue: '...',
},
html: `
$s1=42
$s2=43
p1=2
p3=3
$v1=1
v2=4
vi1=4
$vs1=1
vl1=test
$s3=29
loop...
`
}

@ -0,0 +1,46 @@
<script>
// export multiple subscribables in one line
export let u1, s1, u2, s2
let p1, p2, p3
// export previously declared props
export { p1, p3 }
// aliased props <component a1={...} a2={...}> assign to v1, v2
let v1, v2
export { v1 as a1, v2 as a2 }
// aliased export with initializer
let vi1 = v2
export { vi1 as a3 }
// aliased subscribable export
let vs1 = v1
export { vs1 as a4 }
// aliased with literal initializer
let vl1 = 'test'
export { vl1 as a5 }
// aliased store surrounded by non-aliased non-stores
let n1, n2, s3
export { n1, s3 as a6, n2 }
// keyword exports
let k1, k2
export { k1 as for, k2 as continue }
</script>
$s1={$s1}
$s2={$s2}
p1={p1}
p3={p3}
$v1={$v1}
v2={v2}
vi1={vi1}
$vs1={$vs1}
vl1={vl1}
$s3={$s3}
{k1}{k2}
Loading…
Cancel
Save