Ticket #1512 (new bug)
NQP-rx generates bad access code for non-twigiled attribute
| Reported by: | Austin_Hastings | Owned by: | pmichaud |
|---|---|---|---|
| Priority: | normal | Milestone: | |
| Component: | nqp | Version: | 2.1.0 |
| Severity: | medium | Keywords: | |
| Cc: | Language: | ||
| Patch status: | Platform: |
Description
This code, with twigil:
austin@andLinux:~/kakapo$ cat test.nqp
method foo() {
has @!attr;
for my @a {
say(@!attr);
}
}
Generates this pir:
.annotate "line", 5
find_lex $P24, "self"
getattribute $P25, $P24, "@!attr"
unless_null $P25, vivify_14
new $P25, "ResizablePMCArray"
vivify_14:
Whereas this code, sans twigil:
austin@andLinux:~/kakapo$ cat test.nqp
method foo() {
has @attr;
for my @a {
say(@attr);
}
}
Generates this output:
.annotate "line", 5
getattribute $P24, self, "@attr"
$P25 = "say"($P24)
.annotate "line", 4
Because the sub is a nested block, it has no method declaration and so must do a find-lex lookup to get 'self'. This is not happening. Since the grammar does not support '.' as a twigil, which I think it should, I'm not sure if an attribute with no twigil is or isn't valid. If it's not valid, then the has @attr declaration should throw an error. If it's valid, then the access code should work.
Change History
Note: See
TracTickets for help on using
tickets.
