NQP-rx generates bad access code for non-twigiled attribute #662

Open
aghast opened this Issue Mar 16, 2010 · 2 comments

Comments

Projects
None yet
2 participants

aghast commented Mar 16, 2010

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.

Originally http://trac.parrot.org/parrot/ticket/1512

aghast commented Mar 16, 2010

Also, '?' as a twigil exhibits the same bad behavior. ('*' goes a totally different route, and appears to work)

Owner

pmichaud commented Feb 2, 2011

I think I'm going to decide that attribute declarations require the ! twigil, at least for nqp-rx. So, the real problem here becomes that nqp-rx is allowing attribute declarations without the ! twigil, and fixing that likely requires a deprecation cycle.

Pm

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment