summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2017-12-11 09:08:25 +0100
committerRico Tzschichholz <ricotz@ubuntu.com>2017-12-11 10:09:24 +0100
commitcdb133fdce2fca9e795fc9cb3fa5678eb08f72ed (patch)
tree143457e876f80967d1301706207fd45a1dab2101
parent2468739f56befa9317157088bbb4c81bccc75505 (diff)
downloadvala-cdb133fdce2fca9e795fc9cb3fa5678eb08f72ed.tar.gz
girparser: Don't mark simple-type out-parameters with '?' as nullable
Using '?' on simple-types has a different meaning in vala and would create a boxed-type which is not compatible with the original type.
-rw-r--r--vala/valagirparser.vala18
1 files changed, 18 insertions, 0 deletions
diff --git a/vala/valagirparser.vala b/vala/valagirparser.vala
index d51d469d1..d169cd7b7 100644
--- a/vala/valagirparser.vala
+++ b/vala/valagirparser.vala
@@ -3694,6 +3694,24 @@ public class Vala.GirParser : CodeVisitor {
}
}
}
+
+ // Do not mark out-parameters as nullable if they are simple-types,
+ // since it would result in a boxed-type in vala
+ foreach (ParameterInfo info in parameters) {
+ var type = info.param.variable_type;
+ if (info.param.direction == ParameterDirection.OUT && type.nullable) {
+ Struct? st = null;
+ if (type is UnresolvedType) {
+ st = resolve_symbol (node.parent, ((UnresolvedType) type).unresolved_symbol) as Struct;
+ } else if (type is ValueType) {
+ st = type.data_type as Struct;
+ }
+ if (st != null && st.is_simple_type ()) {
+ type.nullable = false;
+ }
+ }
+ }
+
if (parameters.size > 1) {
ParameterInfo last_param = parameters[parameters.size-1];
if (last_param.param.ellipsis) {