uio-jpt / pt-compiler

5 stars 0 forks source link

Metoder og felt på array'er kan ikke aksesseres i fra addition-klasser #19

Closed eyvindwa closed 12 years ago

eyvindwa commented 12 years ago

Følgende eksempel kompilerer ikke:

template T {
    class A {
        Object[] objects = new Object[10];
    }
}

package P {
    inst T;
    class A adds {
        void m() {
            System.out.println(objects.length);
        }
    }
}

Kompilatoren sier da

JPT: Semantic errors:
JPT: null:11,23:
  Semantic Error: objects not found
JPT: null:11,31:
  Semantic Error: no field named length

Dersom jeg derimot tar bort referansen til feltet length så fungerer det.

svk commented 12 years ago

Skal være fikset i 655ec. Dette handlet om at den gjeldende aksessen ("objects" på venstresiden av en Dot) på et tidlig tidspunkt er flertydig (AmbiguousAccess). Når denne blir omskrevet i adds-klassen før feltet "objects" er lagt til, blir den til slutt omskrevet til en pakke-aksess siden det ikke finnes noen annen "objects". (Feilmeldingen "objects not found" er fra JastaddJ og er faktisk en feilmelding om at pakken "objects" ikke finnes.)

Løsningen her er at denne omskrivingen blir utsatt til etter at feltene er lagt til i adds-klassen. Hoveddelen av koden i commiten er fikling med unntak fra dette for tilsvarende aksesser som faktisk trengs i mergingsprosessen, der det heller ikke burde være noe problem siden siden PackageAccess vil være riktig -- dette gjelder spesifikt i typeaksesser i implements-lister.