Skip to content

Commit 0b83296

Browse files
committed
Extend NQP BUILDPLAN to handle build closure case.
1 parent da0668d commit 0b83296

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed

src/core/NQPMu.pm

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,20 @@ my class NQPMu {
1616
my $i := 0;
1717
while $i < $count {
1818
my $task := nqp::atpos($build_plan, $i);
19+
my int $code := nqp::atpos($task, 0);
1920
$i := $i + 1;
20-
if nqp::iseq_i(nqp::atpos($task, 0), 0) {
21+
if nqp::iseq_i($code, 0) {
2122
# Custom BUILD call.
2223
nqp::atpos($task, 1)(self, |%attrinit);
2324
}
24-
elsif nqp::iseq_i(nqp::atpos($task, 0), 1) {
25+
elsif nqp::iseq_i($code, 1) {
2526
# See if we have a value to initialize this attr with.
2627
my $key_name := nqp::atpos($task, 2);
2728
if nqp::existskey(%attrinit, $key_name) {
2829
nqp::bindattr(self, nqp::atpos($task, 1), nqp::atpos_s($task, 3), %attrinit{$key_name});
2930
}
3031
}
31-
elsif nqp::iseq_i(nqp::atpos($task, 0), 2) {
32+
elsif nqp::iseq_i($code, 2) {
3233
# See if we have a value to initialize this attr with;
3334
# if not, set it to an empty array.
3435
my $key_name := nqp::atpos($task, 2);
@@ -39,7 +40,7 @@ my class NQPMu {
3940
nqp::bindattr(self, nqp::atpos($task, 1), nqp::atpos_s($task, 3), nqp::list());
4041
}
4142
}
42-
elsif nqp::iseq_i(nqp::atpos($task, 0), 3) {
43+
elsif nqp::iseq_i($code, 3) {
4344
# See if we have a value to initialize this attr with;
4445
# if not, set it to an empty array.
4546
my $key_name := nqp::atpos($task, 2);
@@ -50,13 +51,13 @@ my class NQPMu {
5051
nqp::bindattr(self, nqp::atpos($task, 1), nqp::atpos_s($task, 3), nqp::hash());
5152
}
5253
}
53-
# Uncomment if we get attribute initialization closures in NQP.
54-
#elsif nqp::iseq_i(nqp::atpos($task, 0), 4) {
55-
# unless nqp::attrinited(self, nqp::atpos($task, 1), nqp::atpos($task, 2)) {
56-
# nqp::bindattr(self, nqp::atpos($task, 1), nqp::atpos($task, 2),
57-
# nqp::atpos($task, 3)(self, $attr));
58-
# }
59-
#}
54+
elsif nqp::iseq_i($code, 4) {
55+
unless nqp::attrinited(self, nqp::atpos($task, 1), nqp::atpos($task, 2)) {
56+
nqp::bindattr(self, nqp::atpos($task, 1), nqp::atpos($task, 2),
57+
nqp::atpos($task, 3)(self,
58+
nqp::getattr(self, nqp::atpos($task, 1), nqp::atpos($task, 2))));
59+
}
60+
}
6061
else {
6162
nqp::die("Invalid BUILDALLPLAN");
6263
}

0 commit comments

Comments
 (0)