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.