pull/4000/head
daszgfz 6 years ago
parent a1337fd11f
commit 0d9d8dccc8

@ -63,8 +63,6 @@ export default class Component {
imports: ImportDeclaration[] = []; imports: ImportDeclaration[] = [];
function_args: Set<string> = new Set();
hoistable_nodes: Set<Node> = new Set(); hoistable_nodes: Set<Node> = new Set();
node_for_declaration: Map<string, Node> = new Map(); node_for_declaration: Map<string, Node> = new Map();
partly_hoisted: Array<(Node | Node[])> = []; partly_hoisted: Array<(Node | Node[])> = [];
@ -701,7 +699,7 @@ export default class Component {
const component = this; const component = this;
const { content } = script; const { content } = script;
const { function_args, instance_scope, instance_scope_map: map } = this; const { instance_scope, instance_scope_map: map } = this;
let scope = instance_scope; let scope = instance_scope;
@ -718,14 +716,6 @@ export default class Component {
scope = map.get(node); scope = map.get(node);
} }
if (node.type === 'CallExpression') {
node.arguments.forEach(arg => {
if (arg.type == 'Identifier') {
function_args.add(arg.name);
}
});
}
if (node.type === 'ImportDeclaration') { if (node.type === 'ImportDeclaration') {
component.extract_imports(node); component.extract_imports(node);
// TODO: to use actual remove // TODO: to use actual remove
@ -806,6 +796,17 @@ export default class Component {
scope = map.get(node); scope = map.get(node);
} }
// @ts-ignore
if (node.type === 'ExpressionStatement' && node.expression && node.expression.arguments) {
// @ts-ignore
node.expression.arguments.forEach(({ name }) => {
if (scope.find_owner(name) === instance_scope) {
const variable = component.var_lookup.get(name);
variable['argument'] = true;
}
});
}
if (node.type === 'AssignmentExpression' || node.type === 'UpdateExpression') { if (node.type === 'AssignmentExpression' || node.type === 'UpdateExpression') {
const assignee = node.type === 'AssignmentExpression' ? node.left : node.argument; const assignee = node.type === 'AssignmentExpression' ? node.left : node.argument;
const names = extract_names(assignee); const names = extract_names(assignee);
@ -1064,7 +1065,6 @@ export default class Component {
const instance_scope = this.instance_scope; const instance_scope = this.instance_scope;
let scope = this.instance_scope; let scope = this.instance_scope;
const map = this.instance_scope_map; const map = this.instance_scope_map;
const function_args = this.function_args;
let hoistable = true; let hoistable = true;
@ -1083,9 +1083,7 @@ export default class Component {
const { name } = flatten_reference(node); const { name } = flatten_reference(node);
const owner = scope.find_owner(name); const owner = scope.find_owner(name);
if (function_args.has(name)) { if (injected_reactive_declaration_vars.has(name)) {
hoistable = false;
} else if (injected_reactive_declaration_vars.has(name)) {
hoistable = false; hoistable = false;
} else if (name[0] === '$' && !owner) { } else if (name[0] === '$' && !owner) {
hoistable = false; hoistable = false;
@ -1138,6 +1136,7 @@ export default class Component {
for (const [name, node] of top_level_function_declarations) { for (const [name, node] of top_level_function_declarations) {
if (is_hoistable(node)) { if (is_hoistable(node)) {
const variable = this.var_lookup.get(name); const variable = this.var_lookup.get(name);
if ('argument' in variable && !variable.argument) {
variable.hoistable = true; variable.hoistable = true;
hoistable_nodes.add(node); hoistable_nodes.add(node);
@ -1147,6 +1146,7 @@ export default class Component {
} }
} }
} }
}
extract_reactive_declarations() { extract_reactive_declarations() {
const component = this; const component = this;

@ -160,4 +160,5 @@ export interface Var {
hoistable?: boolean; hoistable?: boolean;
subscribable?: boolean; subscribable?: boolean;
is_reactive_dependency?: boolean; is_reactive_dependency?: boolean;
argument?: boolean;
} }

@ -21,10 +21,10 @@ function create_fragment(ctx) {
}, },
m(target, anchor) { m(target, anchor) {
insert(target, button, anchor); insert(target, button, anchor);
foo_action = foo.call(null, button, /*foo_function*/ ctx[2]) || ({}); foo_action = /*foo*/ ctx[2].call(null, button, /*foo_function*/ ctx[3]) || ({});
}, },
p(ctx, [dirty]) { p(ctx, [dirty]) {
if (is_function(foo_action.update) && dirty & /*bar*/ 1) foo_action.update.call(null, /*foo_function*/ ctx[2]); if (is_function(foo_action.update) && dirty & /*bar*/ 1) foo_action.update.call(null, /*foo_function*/ ctx[3]);
}, },
i: noop, i: noop,
o: noop, o: noop,
@ -35,10 +35,6 @@ function create_fragment(ctx) {
}; };
} }
function foo(node, callback) {
}
function instance($$self, $$props, $$invalidate) { function instance($$self, $$props, $$invalidate) {
let { bar } = $$props; let { bar } = $$props;
@ -46,13 +42,17 @@ function instance($$self, $$props, $$invalidate) {
console.log(bar); console.log(bar);
} }
function foo(node, callback) {
}
const foo_function = () => handleFoo(bar); const foo_function = () => handleFoo(bar);
$$self.$set = $$props => { $$self.$set = $$props => {
if ("bar" in $$props) $$invalidate(0, bar = $$props.bar); if ("bar" in $$props) $$invalidate(0, bar = $$props.bar);
}; };
return [bar, handleFoo, foo_function]; return [bar, handleFoo, foo, foo_function];
} }
class Component extends SvelteComponent { class Component extends SvelteComponent {

@ -17,7 +17,7 @@ function create_fragment(ctx) {
return { return {
c() { c() {
input = element("input"); input = element("input");
dispose = listen(input, "input", make_uppercase); dispose = listen(input, "input", /*make_uppercase*/ ctx[0]);
}, },
m(target, anchor) { m(target, anchor) {
insert(target, input, anchor); insert(target, input, anchor);
@ -32,14 +32,18 @@ function create_fragment(ctx) {
}; };
} }
function instance($$self) {
function make_uppercase() { function make_uppercase() {
this.value = this.value.toUpperCase(); this.value = this.value.toUpperCase();
} }
return [make_uppercase];
}
class Component extends SvelteComponent { class Component extends SvelteComponent {
constructor(options) { constructor(options) {
super(); super();
init(this, options, null, create_fragment, safe_not_equal, {}); init(this, options, instance, create_fragment, safe_not_equal, {});
} }
} }

@ -19,14 +19,14 @@ import {
function get_each_context(ctx, list, i) { function get_each_context(ctx, list, i) {
const child_ctx = ctx.slice(); const child_ctx = ctx.slice();
child_ctx[1] = list[i]; child_ctx[2] = list[i];
return child_ctx; return child_ctx;
} }
// (19:0) {#each things as thing (thing.id)} // (19:0) {#each things as thing (thing.id)}
function create_each_block(key_1, ctx) { function create_each_block(key_1, ctx) {
let div; let div;
let t_value = /*thing*/ ctx[1].name + ""; let t_value = /*thing*/ ctx[2].name + "";
let t; let t;
let rect; let rect;
let stop_animation = noop; let stop_animation = noop;
@ -44,7 +44,7 @@ function create_each_block(key_1, ctx) {
append(div, t); append(div, t);
}, },
p(ctx, dirty) { p(ctx, dirty) {
if (dirty & /*things*/ 1 && t_value !== (t_value = /*thing*/ ctx[1].name + "")) set_data(t, t_value); if (dirty & /*things*/ 1 && t_value !== (t_value = /*thing*/ ctx[2].name + "")) set_data(t, t_value);
}, },
r() { r() {
rect = div.getBoundingClientRect(); rect = div.getBoundingClientRect();
@ -55,7 +55,7 @@ function create_each_block(key_1, ctx) {
}, },
a() { a() {
stop_animation(); stop_animation();
stop_animation = create_animation(div, rect, foo, {}); stop_animation = create_animation(div, rect, /*foo*/ ctx[1], {});
}, },
d(detaching) { d(detaching) {
if (detaching) detach(div); if (detaching) detach(div);
@ -68,7 +68,7 @@ function create_fragment(ctx) {
let each_1_lookup = new Map(); let each_1_lookup = new Map();
let each_1_anchor; let each_1_anchor;
let each_value = /*things*/ ctx[0]; let each_value = /*things*/ ctx[0];
const get_key = ctx => /*thing*/ ctx[1].id; const get_key = ctx => /*thing*/ ctx[2].id;
for (let i = 0; i < each_value.length; i += 1) { for (let i = 0; i < each_value.length; i += 1) {
let child_ctx = get_each_context(ctx, each_value, i); let child_ctx = get_each_context(ctx, each_value, i);
@ -109,6 +109,9 @@ function create_fragment(ctx) {
}; };
} }
function instance($$self, $$props, $$invalidate) {
let { things } = $$props;
function foo(node, animation, params) { function foo(node, animation, params) {
const dx = animation.from.left - animation.to.left; const dx = animation.from.left - animation.to.left;
const dy = animation.from.top - animation.to.top; const dy = animation.from.top - animation.to.top;
@ -123,14 +126,11 @@ function foo(node, animation, params) {
}; };
} }
function instance($$self, $$props, $$invalidate) {
let { things } = $$props;
$$self.$set = $$props => { $$self.$set = $$props => {
if ("things" in $$props) $$invalidate(0, things = $$props.things); if ("things" in $$props) $$invalidate(0, things = $$props.things);
}; };
return [things]; return [things, foo];
} }
class Component extends SvelteComponent { class Component extends SvelteComponent {

@ -37,10 +37,10 @@ function create_fragment(ctx) {
button2.textContent = "or me!"; button2.textContent = "or me!";
dispose = [ dispose = [
listen(button0, "click", stop_propagation(prevent_default(handleClick))), listen(button0, "click", stop_propagation(prevent_default(/*handleClick*/ ctx[1]))),
listen(button1, "click", handleClick, { once: true, capture: true }), listen(button1, "click", /*handleClick*/ ctx[1], { once: true, capture: true }),
listen(button2, "click", handleClick, true), listen(button2, "click", /*handleClick*/ ctx[1], true),
listen(div, "touchstart", handleTouchstart, { passive: true }) listen(div, "touchstart", /*handleTouchstart*/ ctx[0], { passive: true })
]; ];
}, },
m(target, anchor) { m(target, anchor) {
@ -61,6 +61,7 @@ function create_fragment(ctx) {
}; };
} }
function instance($$self) {
function handleTouchstart() { function handleTouchstart() {
} }
@ -69,10 +70,13 @@ function handleClick() {
} }
return [handleTouchstart, handleClick];
}
class Component extends SvelteComponent { class Component extends SvelteComponent {
constructor(options) { constructor(options) {
super(); super();
init(this, options, null, create_fragment, safe_not_equal, {}); init(this, options, instance, create_fragment, safe_not_equal, {});
} }
} }

@ -15,7 +15,7 @@ function create_fragment(ctx) {
return { return {
c() { c() {
b = element("b"); b = element("b");
b.textContent = `${get_answer()}`; b.textContent = `${/*get_answer*/ ctx[0]()}`;
}, },
m(target, anchor) { m(target, anchor) {
insert(target, b, anchor); insert(target, b, anchor);
@ -31,14 +31,18 @@ function create_fragment(ctx) {
const ANSWER = 42; const ANSWER = 42;
function instance($$self) {
function get_answer() { function get_answer() {
return ANSWER; return ANSWER;
} }
return [get_answer];
}
class Component extends SvelteComponent { class Component extends SvelteComponent {
constructor(options) { constructor(options) {
super(); super();
init(this, options, null, create_fragment, safe_not_equal, {}); init(this, options, instance, create_fragment, safe_not_equal, {});
} }
} }

@ -15,7 +15,7 @@ function create_fragment(ctx) {
return { return {
c() { c() {
b = element("b"); b = element("b");
b.textContent = `${get_answer()}`; b.textContent = `${/*get_answer*/ ctx[0]()}`;
}, },
m(target, anchor) { m(target, anchor) {
insert(target, b, anchor); insert(target, b, anchor);
@ -31,14 +31,18 @@ function create_fragment(ctx) {
let ANSWER = 42; let ANSWER = 42;
function instance($$self) {
function get_answer() { function get_answer() {
return ANSWER; return ANSWER;
} }
return [get_answer];
}
class Component extends SvelteComponent { class Component extends SvelteComponent {
constructor(options) { constructor(options) {
super(); super();
init(this, options, null, create_fragment, safe_not_equal, {}); init(this, options, instance, create_fragment, safe_not_equal, {});
} }
} }

@ -3,11 +3,11 @@ import { SvelteComponent, init, safe_not_equal } from "svelte/internal";
const SOME_CONSTANT = 42; const SOME_CONSTANT = 42;
function instance($$self, $$props, $$invalidate) {
function foo(bar) { function foo(bar) {
console.log(bar); console.log(bar);
} }
function instance($$self, $$props, $$invalidate) {
return [foo]; return [foo];
} }
@ -18,7 +18,7 @@ class Component extends SvelteComponent {
} }
get foo() { get foo() {
return foo; return this.$$.ctx[0];
} }
} }

@ -7,14 +7,6 @@ function preload(input) {
return output; return output;
} }
function foo() {
console.log("foo");
}
function swipe(node, callback) {
}
const Component = create_ssr_component(($$result, $$props, $$bindings, $$slots) => { const Component = create_ssr_component(($$result, $$props, $$bindings, $$slots) => {
onMount(() => { onMount(() => {
console.log("onMount"); console.log("onMount");
@ -24,6 +16,14 @@ const Component = create_ssr_component(($$result, $$props, $$bindings, $$slots)
console.log("onDestroy"); console.log("onDestroy");
}); });
function foo() {
console.log("foo");
}
function swipe(node, callback) {
}
return ``; return ``;
}); });

@ -65,7 +65,7 @@ function create_if_block_1(ctx) {
if (local) { if (local) {
if (!div_intro) { if (!div_intro) {
add_render_callback(() => { add_render_callback(() => {
div_intro = create_in_transition(div, foo, {}); div_intro = create_in_transition(div, /*foo*/ ctx[2], {});
div_intro.start(); div_intro.start();
}); });
} }
@ -114,20 +114,20 @@ function create_fragment(ctx) {
}; };
} }
function foo() {
}
function instance($$self, $$props, $$invalidate) { function instance($$self, $$props, $$invalidate) {
let { x } = $$props; let { x } = $$props;
let { y } = $$props; let { y } = $$props;
function foo() {
}
$$self.$set = $$props => { $$self.$set = $$props => {
if ("x" in $$props) $$invalidate(0, x = $$props.x); if ("x" in $$props) $$invalidate(0, x = $$props.x);
if ("y" in $$props) $$invalidate(1, y = $$props.y); if ("y" in $$props) $$invalidate(1, y = $$props.y);
}; };
return [x, y]; return [x, y, foo];
} }
class Component extends SvelteComponent { class Component extends SvelteComponent {

Loading…
Cancel
Save