}
}
- bool is_out = false;
-
- if (array_expr is UnaryExpression) {
- var unary_expr = (UnaryExpression) array_expr;
- if (unary_expr.operator == UnaryOperator.OUT || unary_expr.operator == UnaryOperator.REF) {
- is_out = true;
- }
- }
-
List<CCodeExpression> size = get_array_sizes (array_expr);
- if (size != null && size.size >= dim) {
- return size[dim - 1];
- }
-
- if (!is_out) {
- /* allow arrays with unknown length even for value types
- * as else it may be impossible to bind some libraries
- * users of affected libraries should explicitly set
- * the array length as early as possible
- * by setting the virtual length field of the array
- */
- return new CCodeConstant ("-1");
- } else {
- return new CCodeConstant ("NULL");
- }
+ assert (size != null && size.size >= dim);
+ return size[dim - 1];
}
public override string get_array_size_cname (string array_cname) {
if (requires_destroy (local.variable_type)) {
var ma = new MemberAccess.simple (local.name);
ma.symbol_reference = local;
+ ma.value_type = local.variable_type.copy ();
+ visit_member_access (ma);
ccode.add_expression (get_unref_expression (get_variable_cexpression (local.name), local.variable_type, ma));
}
}
var local = new LocalVariable (owned_type, param.name);
var ma = new MemberAccess.simple (param.name);
ma.symbol_reference = local;
+ ma.value_type = owned_type.copy ();
+ visit_member_access (ma);
var stmt = new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier (param.name), owned_type, ma));
postfragment.append (stmt);
}
var local = new LocalVariable (owned_type, param.name);
var ma = new MemberAccess.simple (param.name);
ma.symbol_reference = local;
+ ma.value_type = owned_type.copy ();
+ visit_member_access (ma);
var stmt = new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier (param.name), owned_type, ma));
if (param.direction == ParameterDirection.IN) {
in_postfragment.append (stmt);
var local = new LocalVariable (m.return_type, " result");
var ma = new MemberAccess.simple ("result");
ma.symbol_reference = local;
+ ma.value_type = m.return_type.copy ();
+ visit_member_access (ma);
out_postfragment.append (new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier ("result"), m.return_type, ma)));
}
var local = new LocalVariable (m.return_type, " result");
var ma = new MemberAccess.simple ("result");
ma.symbol_reference = local;
+ ma.value_type = m.return_type.copy ();
+ visit_member_access (ma);
out_postfragment.append (new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier ("result"), m.return_type, ma)));
}
}
var local = new LocalVariable (prop.get_accessor.value_type, " result");
var ma = new MemberAccess.simple ("result");
ma.symbol_reference = local;
+ ma.value_type = local.variable_type.copy ();
+ visit_member_access (ma);
postfragment.append (new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier ("result"), prop.get_accessor.value_type, ma)));
}
var local = new LocalVariable (prop.get_accessor.value_type, " result");
var ma = new MemberAccess.simple ("result");
ma.symbol_reference = local;
+ ma.value_type = local.variable_type.copy ();
+ visit_member_access (ma);
postfragment.append (new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier ("result"), prop.get_accessor.value_type, ma)));
}
var local = new LocalVariable (owned_type, "value");
var ma = new MemberAccess.simple ("value");
ma.symbol_reference = local;
+ ma.value_type = local.variable_type.copy ();
+ visit_member_access (ma);
prop_block.add_statement (new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier ("value"), owned_type, ma)));
}
var local = new LocalVariable (owned_type, param.name);
var ma = new MemberAccess.simple (param.name);
ma.symbol_reference = local;
+ ma.value_type = local.variable_type.copy ();
+ visit_member_access (ma);
ccode.add_expression (get_unref_expression (new CCodeIdentifier (param.name), owned_type, ma));
}
}
var local = new LocalVariable (m.return_type, " result");
var ma = new MemberAccess.simple ("result");
ma.symbol_reference = local;
+ ma.value_type = local.variable_type.copy ();
+ visit_member_access (ma);
ccode.add_expression (get_unref_expression (new CCodeIdentifier ("result"), m.return_type, ma));
}
} else {
var local = new LocalVariable (m.return_type, " result");
var ma = new MemberAccess.simple ("result");
ma.symbol_reference = local;
+ ma.value_type = local.variable_type.copy ();
+ visit_member_access (ma);
ccode.add_expression (get_unref_expression (new CCodeIdentifier ("result"), m.return_type, ma));
}
}
var local = new LocalVariable (owned_type, param.name);
var ma = new MemberAccess.simple (param.name);
ma.symbol_reference = local;
+ ma.value_type = local.variable_type.copy ();
+ visit_member_access (ma);
ccode.add_expression (get_unref_expression (new CCodeIdentifier (param.name), owned_type, ma));
}
}
var local = new LocalVariable (prop.property_type, " result");
var ma = new MemberAccess.simple ("result");
ma.symbol_reference = local;
+ ma.value_type = local.variable_type.copy ();
+ visit_member_access (ma);
ccode.add_expression (get_unref_expression (new CCodeIdentifier ("result"), prop.property_type, ma));
}
var local = new LocalVariable (owned_type, "value");
var ma = new MemberAccess.simple ("value");
ma.symbol_reference = local;
+ ma.value_type = local.variable_type.copy ();
+ visit_member_access (ma);
ccode.add_expression (get_unref_expression (new CCodeIdentifier ("value"), owned_type, ma));
}