summaryrefslogtreecommitdiff
path: root/codegen/valaccodemethodmodule.vala
diff options
context:
space:
mode:
Diffstat (limited to 'codegen/valaccodemethodmodule.vala')
-rw-r--r--codegen/valaccodemethodmodule.vala31
1 files changed, 17 insertions, 14 deletions
diff --git a/codegen/valaccodemethodmodule.vala b/codegen/valaccodemethodmodule.vala
index 840aa14bc..4bc754bb7 100644
--- a/codegen/valaccodemethodmodule.vala
+++ b/codegen/valaccodemethodmodule.vala
@@ -872,26 +872,29 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
public virtual CCodeParameter generate_parameter (Parameter param, CCodeFile decl_space, Map<int,CCodeParameter> cparam_map, Map<int,CCodeExpression>? carg_map) {
CCodeParameter cparam;
if (!param.ellipsis && !param.params_array) {
- string ctypename = get_ccode_name (param.variable_type);
-
generate_type_declaration (param.variable_type, decl_space);
- // pass non-simple structs always by reference
- unowned Struct? st = param.variable_type.type_symbol as Struct;
- if (st != null) {
- if (!st.is_simple_type () && param.direction == ParameterDirection.IN) {
- if (st.is_immutable && !param.variable_type.value_owned) {
- ctypename = "const " + ctypename;
- }
+ string? ctypename = get_ccode_type (param);
+ if (ctypename == null) {
+ ctypename = get_ccode_name (param.variable_type);
+
+ // pass non-simple structs always by reference
+ unowned Struct? st = param.variable_type.type_symbol as Struct;
+ if (st != null) {
+ if (!st.is_simple_type () && param.direction == ParameterDirection.IN) {
+ if (st.is_immutable && !param.variable_type.value_owned) {
+ ctypename = "const " + ctypename;
+ }
- if (!param.variable_type.nullable) {
- ctypename += "*";
+ if (!param.variable_type.nullable) {
+ ctypename += "*";
+ }
}
}
- }
- if (param.direction != ParameterDirection.IN) {
- ctypename += "*";
+ if (param.direction != ParameterDirection.IN) {
+ ctypename += "*";
+ }
}
cparam = new CCodeParameter (get_ccode_name (param), ctypename);