Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[js] allow setting dynamic variables in signatures, like sub foo($*FO…
…O) {...}
  • Loading branch information
pmurias committed Oct 23, 2015
1 parent add7e11 commit b71938d
Showing 1 changed file with 18 additions and 1 deletion.
19 changes: 18 additions & 1 deletion src/vm/js/QAST/Compiler.nqp
Expand Up @@ -2225,6 +2225,23 @@ class QAST::CompilerJS does DWIMYNameMangling does SerializeOnce {
# TODO required named arguments and defaultless optional ones

@setup.push("{self.mangle_name($_.name)} = $value;\n");
} elsif self.is_dynamic_var($_) {
my $tmp := self.unique_var('param');
@sig.push($tmp);

my $set := "{$*CTX}[{quote_string($_.name)}] = ";

if $_.default {
my $default_value := self.as_js($_.default, :want($T_OBJ));

@setup.push(Chunk.void(
"if (arguments.length < {+@sig}) \{\n",
$default_value,
"$set {$default_value.expr};\n\} else \{\n$set $tmp;\n\}\n"
));
} else {
@setup.push($set ~ $tmp ~ ";\n");
}
} else {
my $default := '';
my $name := self.mangle_name($_.name);
Expand Down Expand Up @@ -2563,8 +2580,8 @@ class QAST::CompilerJS does DWIMYNameMangling does SerializeOnce {
self.setup_setting($node),
self.declare_js_vars($*BLOCK.tmps),
self.declare_js_vars($*BLOCK.js_lexicals),
$sig,
$create_ctx,
$sig,
self.clone_inners($*BLOCK),
$stmts,
"return {$stmts.expr};\n",
Expand Down

0 comments on commit b71938d

Please sign in to comment.