Skip to content

Commit b1066ad

Browse files
committed
[js] When compiling a block for use with it's missing outer import stuff from the setting.
1 parent b864add commit b1066ad

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

src/vm/js/Compiler.nqp

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -782,18 +782,22 @@ class QAST::CompilerJS does DWIMYNameMangling does SerializeOnce {
782782
# Instead of implementing forceouterctx we use this hack to support settings.
783783
method setup_setting($node) {
784784
if nqp::eqaddr($node, $*SETTING_TARGET) {
785-
my @imported;
786-
for $node.symtable -> $symbol {
787-
@imported.push("{self.mangle_name($symbol.key)} = setting[{quote_string($symbol.key)}]");
788-
}
789-
"var setting = nqp.setup_setting({quote_string($*SETTING_NAME)});\n"
790-
~ self.declare_js_vars(@imported);
785+
self.import_stuff_from_setting($node);
791786
}
792787
else {
793788
'';
794789
}
795790
}
796791

792+
method import_stuff_from_setting($node) {
793+
my @imported;
794+
for $node.symtable -> $symbol {
795+
@imported.push("{self.mangle_name($symbol.key)} = setting[{quote_string($symbol.key)}]");
796+
}
797+
"var setting = nqp.setup_setting({quote_string($*SETTING_NAME)});\n"
798+
~ self.declare_js_vars(@imported);
799+
}
800+
797801

798802
has %!serialized_code_ref_info;
799803

@@ -867,8 +871,8 @@ class QAST::CompilerJS does DWIMYNameMangling does SerializeOnce {
867871
my $expected_outer := %*BLOCKS_INFO{$_.key}.outer;
868872

869873
if $expected_outer.cuid ne $*BLOCK.cuid {
870-
@capture_inners.push("/*static block*/\n");
871874
@capture_inners.push("(function() \{\n");
875+
@capture_inners.push(self.import_stuff_from_setting($*SETTING_TARGET));
872876
@capture_inners.push("var {$expected_outer.ctx} = null;\n");
873877
}
874878

0 commit comments

Comments
 (0)