reduce diff

pull/17038/head
Rich Harris 1 week ago
parent df666c3ce3
commit 7585da0686

@ -281,10 +281,9 @@ export function create_child_block(body, async) {
export function create_async_block(body, blockers = b.array([]), has_await = true, markers = true) { export function create_async_block(body, blockers = b.array([]), has_await = true, markers = true) {
return b.stmt( return b.stmt(
b.call( b.call(
'$$renderer.async', markers ? '$$renderer.async_block' : '$$renderer.async',
blockers, blockers,
b.arrow([b.id('$$renderer')], body, has_await), b.arrow([b.id('$$renderer')], body, has_await)
markers && b.true
) )
); );
} }

@ -102,9 +102,18 @@ export class Renderer {
/** /**
* @param {Array<Promise<void>>} blockers * @param {Array<Promise<void>>} blockers
* @param {(renderer: Renderer) => void} fn * @param {(renderer: Renderer) => void} fn
* @param {boolean} markers
*/ */
async(blockers, fn, markers) { async_block(blockers, fn) {
this.#out.push(BLOCK_OPEN);
this.async(blockers, fn);
this.#out.push(BLOCK_CLOSE);
}
/**
* @param {Array<Promise<void>>} blockers
* @param {(renderer: Renderer) => void} fn
*/
async(blockers, fn) {
let callback = fn; let callback = fn;
if (blockers.length > 0) { if (blockers.length > 0) {
@ -124,9 +133,7 @@ export class Renderer {
}; };
} }
if (markers) this.#out.push(BLOCK_OPEN);
this.child(callback); this.child(callback);
if (markers) this.#out.push(BLOCK_CLOSE);
} }
/** /**

@ -2,28 +2,24 @@ import 'svelte/internal/flags/async';
import * as $ from 'svelte/internal/server'; import * as $ from 'svelte/internal/server';
export default function Async_each_fallback_hoisting($$renderer) { export default function Async_each_fallback_hoisting($$renderer) {
$$renderer.async( $$renderer.async_block([], async ($$renderer) => {
[], const each_array = $.ensure_array_like((await $.save(Promise.resolve([])))());
async ($$renderer) => {
const each_array = $.ensure_array_like((await $.save(Promise.resolve([])))());
if (each_array.length !== 0) { if (each_array.length !== 0) {
$$renderer.push('<!--[-->'); $$renderer.push('<!--[-->');
for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) { for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
let item = each_array[$$index]; let item = each_array[$$index];
$$renderer.push(`<!---->`);
$$renderer.push(async () => $.escape(await Promise.reject('This should never be reached')));
}
} else {
$$renderer.push('<!--[!-->');
$$renderer.push(`<!---->`); $$renderer.push(`<!---->`);
$$renderer.push(async () => $.escape(await Promise.resolve(4))); $$renderer.push(async () => $.escape(await Promise.reject('This should never be reached')));
} }
}, } else {
true $$renderer.push('<!--[!-->');
); $$renderer.push(`<!---->`);
$$renderer.push(async () => $.escape(await Promise.resolve(4)));
}
});
$$renderer.push(`<!--]-->`); $$renderer.push(`<!--]-->`);
} }

@ -8,20 +8,16 @@ export default function Async_each_hoisting($$renderer) {
$$renderer.push(`<!--[-->`); $$renderer.push(`<!--[-->`);
$$renderer.async( $$renderer.async_block([], async ($$renderer) => {
[], const each_array = $.ensure_array_like((await $.save(Promise.resolve([first, second, third])))());
async ($$renderer) => {
const each_array = $.ensure_array_like((await $.save(Promise.resolve([first, second, third])))());
for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) { for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
let item = each_array[$$index]; let item = each_array[$$index];
$$renderer.push(`<!---->`); $$renderer.push(`<!---->`);
$$renderer.push(async () => $.escape(await item)); $$renderer.push(async () => $.escape(await item));
} }
}, });
true
);
$$renderer.push(`<!--]-->`); $$renderer.push(`<!--]-->`);
} }

@ -2,19 +2,15 @@ import 'svelte/internal/flags/async';
import * as $ from 'svelte/internal/server'; import * as $ from 'svelte/internal/server';
export default function Async_if_alternate_hoisting($$renderer) { export default function Async_if_alternate_hoisting($$renderer) {
$$renderer.async( $$renderer.async_block([], async ($$renderer) => {
[], if ((await $.save(Promise.resolve(false)))()) {
async ($$renderer) => { $$renderer.push('<!--[-->');
if ((await $.save(Promise.resolve(false)))()) { $$renderer.push(async () => $.escape(await Promise.reject('no no no')));
$$renderer.push('<!--[-->'); } else {
$$renderer.push(async () => $.escape(await Promise.reject('no no no'))); $$renderer.push('<!--[!-->');
} else { $$renderer.push(async () => $.escape(await Promise.resolve('yes yes yes')));
$$renderer.push('<!--[!-->'); }
$$renderer.push(async () => $.escape(await Promise.resolve('yes yes yes'))); });
}
},
true
);
$$renderer.push(`<!--]-->`); $$renderer.push(`<!--]-->`);
} }

@ -2,19 +2,15 @@ import 'svelte/internal/flags/async';
import * as $ from 'svelte/internal/server'; import * as $ from 'svelte/internal/server';
export default function Async_if_hoisting($$renderer) { export default function Async_if_hoisting($$renderer) {
$$renderer.async( $$renderer.async_block([], async ($$renderer) => {
[], if ((await $.save(Promise.resolve(true)))()) {
async ($$renderer) => { $$renderer.push('<!--[-->');
if ((await $.save(Promise.resolve(true)))()) { $$renderer.push(async () => $.escape(await Promise.resolve('yes yes yes')));
$$renderer.push('<!--[-->'); } else {
$$renderer.push(async () => $.escape(await Promise.resolve('yes yes yes'))); $$renderer.push('<!--[!-->');
} else { $$renderer.push(async () => $.escape(await Promise.reject('no no no')));
$$renderer.push('<!--[!-->'); }
$$renderer.push(async () => $.escape(await Promise.reject('no no no'))); });
}
},
true
);
$$renderer.push(`<!--]-->`); $$renderer.push(`<!--]-->`);
} }

@ -18,28 +18,24 @@ export default function Async_in_derived($$renderer, $$props) {
} }
]); ]);
$$renderer.async( $$renderer.async_block([], async ($$renderer) => {
[], if (true) {
async ($$renderer) => { $$renderer.push('<!--[-->');
if (true) {
$$renderer.push('<!--[-->'); const yes1 = (await $.save(1))();
const yes2 = foo((await $.save(1))());
const yes1 = (await $.save(1))();
const yes2 = foo((await $.save(1))()); const no1 = (async () => {
return await 1;
const no1 = (async () => { })();
return await 1;
})(); const no2 = (async () => {
return await 1;
const no2 = (async () => { })();
return await 1; } else {
})(); $$renderer.push('<!--[!-->');
} else { }
$$renderer.push('<!--[!-->'); });
}
},
true
);
$$renderer.push(`<!--]-->`); $$renderer.push(`<!--]-->`);
}); });

Loading…
Cancel
Save