240a241,249 > // helper: pointer and nullsafe pointer > pointer(res) ::= PTR. { > res = '->'; > } > > pointer(res) ::= QMARK PTR. { > res = '?->'; > } > 1026c1035 < objectelement(res)::= PTR ID(i) arrayindex(a). { --- > objectelement(res)::= pointer(p) ID(i) arrayindex(a). { 1030c1039 < res = '->'.i.a; --- > res = p.i.a; 1033c1042 < objectelement(res)::= PTR varvar(v) arrayindex(a). { --- > objectelement(res)::= pointer(p) varvar(v) arrayindex(a). { 1037c1046 < res = '->{'.$this->compiler->compileVariable(v).a.'}'; --- > res = p.'{'.$this->compiler->compileVariable(v).a.'}'; 1040c1049 < objectelement(res)::= PTR LDEL expr(e) RDEL arrayindex(a). { --- > objectelement(res)::= pointer(p) LDEL expr(e) RDEL arrayindex(a). { 1044c1053 < res = '->{'.e.a.'}'; --- > res = p.'{'.e.a.'}'; 1047c1056 < objectelement(res)::= PTR ID(ii) LDEL expr(e) RDEL arrayindex(a). { --- > objectelement(res)::= pointer(p) ID(ii) LDEL expr(e) RDEL arrayindex(a). { 1051c1060 < res = '->{\''.ii.'\'.'.e.a.'}'; --- > res = p.'{\''.ii.'\'.'.e.a.'}'; 1055,1056c1064,1065 < objectelement(res)::= PTR method(f). { < res = '->'.f; --- > objectelement(res)::= pointer(p) method(f). { > res = p.f;