public override void visit_pointer_indirection (PointerIndirection expr) {
set_cvalue (expr, new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, get_cvalue (expr.inner)));
+ ((GLibValue) expr.target_value).lvalue = get_lvalue (expr.inner.target_value);
}
public override void visit_addressof_expression (AddressofExpression expr) {
structs/bug667890.vala \
structs/bug669580.vala \
structs/bug685177.vala \
+ structs/bug686190.vala \
structs/bug690380.vala \
delegates/delegates.vala \
delegates/bug539166.vala \
var this_access = inner.symbol_reference is Parameter && inner.symbol_reference.name == "this";
var struct_or_array = (inner.value_type is StructValueType && !inner.value_type.nullable) || inner.value_type is ArrayType;
- if (instance && struct_or_array && (symbol_reference is Method || lvalue) && ((inner is MemberAccess && inner.symbol_reference is Variable) || inner is ElementAccess) && !this_access) {
+ var ma = inner as MemberAccess;
+ if (ma == null && struct_or_array && inner is PointerIndirection) {
+ // (*struct)->method()
+ ma = ((PointerIndirection) inner).inner as MemberAccess;
+ }
+
+ if (instance && struct_or_array && (symbol_reference is Method || lvalue) && ((ma != null && ma.symbol_reference is Variable) || inner is ElementAccess) && !this_access) {
inner.lvalue = true;
- if (inner is MemberAccess) {
- ((MemberAccess) inner).check_lvalue_access ();
+ if (ma != null) {
+ ma.lvalue = true;
+ ma.check_lvalue_access ();
}
}
}