report warning when using null literal as return expression of method
authorJuerg Billeter <j@bitron.ch>
Mon, 14 Apr 2008 19:07:37 +0000 (19:07 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Mon, 14 Apr 2008 19:07:37 +0000 (19:07 +0000)
2008-04-14  Juerg Billeter  <j@bitron.ch>

* vala/valasemanticanalyzer.vala: report warning when using null
  literal as return expression of method returning non-null value

* */*.vala: fix warnings

svn path=/trunk/; revision=1228

48 files changed:
ChangeLog
gee/arraylist.vala
gee/hashmap.vala
gee/hashset.vala
gee/iterator.vala
gee/list.vala
gee/map.vala
gee/readonlycollection.vala
gee/readonlylist.vala
gee/readonlymap.vala
gee/readonlyset.vala
gen-project/valaprojectgenerator.vala
gobject/valaccodegenerator.vala
gobject/valaccodegeneratormethod.vala
gobject/valaccodegeneratorsignal.vala
gobject/valadbusbindingprovider.vala
vala/valaarraytype.vala
vala/valaattribute.vala
vala/valabindingprovider.vala
vala/valaclass.vala
vala/valacodecontext.vala
vala/valacodegenerator.vala
vala/valacodenode.vala
vala/valadatatype.vala
vala/valadelegate.vala
vala/valadelegatetype.vala
vala/valaenum.vala
vala/valaerrordomain.vala
vala/valaerrortype.vala
vala/valaexpressionstatement.vala
vala/valainterface.vala
vala/valamethodtype.vala
vala/valaparser.vala
vala/valapointertype.vala
vala/valascanner.vala
vala/valascope.vala
vala/valasemanticanalyzer.vala
vala/valasignaltype.vala
vala/valasourcefile.vala
vala/valastringliteral.vala
vala/valastruct.vala
vala/valasymbol.vala
vala/valatypesymbol.vala
vala/valaunresolvedtype.vala
vala/valavaluetype.vala
vala/valavoidtype.vala
vapigen/valagidlparser.vala
vapigen/valavapigen.vala

index a1231d0..28dc4a0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-04-14  Jürg Billeter  <j@bitron.ch>
+
+       * vala/valasemanticanalyzer.vala: report warning when using null
+         literal as return expression of method returning non-null value
+
+       * */*.vala: fix warnings
+
 2008-04-14  Marc-Andre Lureau  <marcandre.lureau@gmail.com>
 
        * vapi/dbus-glib-1.vapi, vapi/enchant.vapi, vapi/libxml-2.0.vapi,
index c0a42e6..97ce929 100644 (file)
@@ -68,7 +68,7 @@ public class Gee.ArrayList<G> : Object, Iterable<G>, Collection<G>, List<G> {
                return -1;
        }
 
-       public G get (int index) {
+       public G? get (int index) {
                assert (index >= 0 && index < _size);
 
                return _items[index];
@@ -178,7 +178,7 @@ public class Gee.ArrayList<G> : Object, Iterable<G>, Collection<G>, List<G> {
                        return (_index < _list._size);
                }
 
-               public G get () {
+               public G? get () {
                        assert (_stamp == _list._stamp);
 
                        if (_index < 0 || _index >= _list._size) {
index c4847ea..9269c75 100644 (file)
@@ -91,7 +91,7 @@ public class Gee.HashMap<K,V> : Object, Map<K,V> {
                return (*node != null);
        }
 
-       public V get (K key) {
+       public V? get (K key) {
                Node<K,V>* node = (*lookup_node (key));
                if (node != null) {
                        return node->value;
@@ -251,7 +251,7 @@ public class Gee.HashMap<K,V> : Object, Map<K,V> {
                        return (_node != null);
                }
 
-               public K get () {
+               public K? get () {
                        assert (_stamp == _map._stamp);
                        assert (_node != null);
                        return _node.key;
@@ -334,7 +334,7 @@ public class Gee.HashMap<K,V> : Object, Map<K,V> {
                        return (_node != null);
                }
 
-               public V get () {
+               public V? get () {
                        assert (_stamp == _map._stamp);
                        assert (_node != null);
                        return _node.value;
index aed8cad..96e85f4 100644 (file)
@@ -193,7 +193,7 @@ public class Gee.HashSet<G> : Object, Iterable<G>, Collection<G>, Set<G> {
                        return (_node != null);
                }
 
-               public G get () {
+               public G? get () {
                        assert (_stamp == _set._stamp);
                        assert (_node != null);
                        return _node.key;
index d6fa947..6642a90 100644 (file)
@@ -1,6 +1,6 @@
 /* iterator.vala
  *
- * Copyright (C) 2007  Jürg Billeter
+ * Copyright (C) 2007-2008  Jürg Billeter
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -37,6 +37,6 @@ public interface Gee.Iterator<G> : GLib.Object {
         *
         * @return the current element in the iteration
         */
-       public abstract G get ();
+       public abstract G? get ();
 }
 
index 52e864a..d034a91 100644 (file)
@@ -31,7 +31,7 @@ public interface Gee.List<G> : Collection<G> {
         *
         * @return      the item at the specified index in the list
         */
-       public abstract G get (int index);
+       public abstract G? get (int index);
 
        /**
         * Sets the item at the specified index in this list.
index 9c98c8c..78858ce 100644 (file)
@@ -60,7 +60,7 @@ public interface Gee.Map<K,V> : GLib.Object {
         * @return    the value associated with the key, or null if the key
         *            couldn't be found
         */
-       public abstract V get (K key);
+       public abstract V? get (K key);
 
        /**
         * Inserts a new key and value into this map.
index e0ec563..3a4ac77 100644 (file)
@@ -77,7 +77,7 @@ public class Gee.ReadOnlyCollection<G> : Object, Iterable<G>, Collection<G> {
                        return false;
                }
 
-               public G get () {
+               public G? get () {
                        return null;
                }
        }
index 2720521..1ea988d 100644 (file)
@@ -84,7 +84,7 @@ public class Gee.ReadOnlyList<G> : Object, Iterable<G>, Collection<G>, List<G> {
                assert_not_reached ();
        }
 
-       public G get (int index) {
+       public G? get (int index) {
                if (_list == null) {
                        return null;
                }
@@ -105,7 +105,7 @@ public class Gee.ReadOnlyList<G> : Object, Iterable<G>, Collection<G>, List<G> {
                        return false;
                }
 
-               public G get () {
+               public G? get () {
                        return null;
                }
        }
index b891189..e629527 100644 (file)
@@ -64,7 +64,7 @@ public class Gee.ReadOnlyMap<K,V> : Object, Map<K,V> {
                return _map.contains (key);
        }
 
-       public V get (K key) {
+       public V? get (K key) {
                if (_map == null) {
                        return null;
                }
index 0439c8c..15bcd52 100644 (file)
@@ -77,7 +77,7 @@ public class Gee.ReadOnlySet<G> : Object, Iterable<G>, Collection<G>, Set<G> {
                        return false;
                }
 
-               public G get () {
+               public G? get () {
                        return null;
                }
        }
index c1008ed..b770990 100644 (file)
@@ -594,7 +594,7 @@ class Vala.ProjectGenerator : Dialog {
                FileUtils.set_contents (project_path + "/MAINTAINERS", s, -1);
        }
 
-       private string get_automake_path () {
+       private string? get_automake_path () {
                var automake_paths = new string[] { "/usr/share/automake",
                                                    "/usr/share/automake-1.10",
                                                    "/usr/share/automake-1.9" };
index ff0cc00..b52f9e0 100644 (file)
@@ -1198,7 +1198,7 @@ public class Vala.CCodeGenerator : CodeGenerator {
                }
        }
 
-       private CCodeExpression get_dup_func_expression (DataType type, SourceReference? source_reference) {
+       private CCodeExpression? get_dup_func_expression (DataType type, SourceReference? source_reference) {
                if (type.data_type != null) {
                        string dup_function;
                        if (type.data_type.is_reference_counting ()) {
@@ -1226,7 +1226,7 @@ public class Vala.CCodeGenerator : CodeGenerator {
                }
        }
 
-       private CCodeExpression get_destroy_func_expression (DataType type) {
+       private CCodeExpression? get_destroy_func_expression (DataType type) {
                if (type.data_type != null) {
                        string unref_function;
                        if (type.data_type.is_reference_counting ()) {
@@ -2665,7 +2665,7 @@ public class Vala.CCodeGenerator : CodeGenerator {
                visit_expression (expr);
        }
        
-       private MemberAccess find_property_access (Expression expr) {
+       private MemberAccess? find_property_access (Expression expr) {
                if (expr is ParenthesizedExpression) {
                        var pe = (ParenthesizedExpression) expr;
                        return find_property_access (pe.inner);
@@ -2683,7 +2683,7 @@ public class Vala.CCodeGenerator : CodeGenerator {
                return null;
        }
        
-       private CCodeExpression get_ref_expression (Expression expr) {
+       private CCodeExpression? get_ref_expression (Expression expr) {
                /* (temp = expr, temp == NULL ? NULL : ref (temp))
                 *
                 * can be simplified to
@@ -3548,287 +3548,287 @@ public class Vala.CCodeGenerator : CodeGenerator {
                return type;
        }
 
-       public override CodeBinding create_namespace_binding (Namespace node) {
+       public override CodeBinding? create_namespace_binding (Namespace node) {
                return null;
        }
 
-       public override CodeBinding create_class_binding (Class node) {
+       public override CodeBinding? create_class_binding (Class node) {
                return null;
        }
 
-       public override CodeBinding create_struct_binding (Struct node) {
+       public override CodeBinding? create_struct_binding (Struct node) {
                return null;
        }
 
-       public override CodeBinding create_interface_binding (Interface node) {
+       public override CodeBinding? create_interface_binding (Interface node) {
                return null;
        }
 
-       public override CodeBinding create_enum_binding (Enum node) {
+       public override CodeBinding? create_enum_binding (Enum node) {
                return null;
        }
 
-       public override CodeBinding create_enum_value_binding (EnumValue node) {
+       public override CodeBinding? create_enum_value_binding (EnumValue node) {
                return null;
        }
 
-       public override CodeBinding create_error_domain_binding (ErrorDomain node) {
+       public override CodeBinding? create_error_domain_binding (ErrorDomain node) {
                return null;
        }
 
-       public override CodeBinding create_error_code_binding (ErrorCode node) {
+       public override CodeBinding? create_error_code_binding (ErrorCode node) {
                return null;
        }
 
-       public override CodeBinding create_delegate_binding (Delegate node) {
+       public override CodeBinding? create_delegate_binding (Delegate node) {
                return null;
        }
 
-       public override CodeBinding create_constant_binding (Constant node) {
+       public override CodeBinding? create_constant_binding (Constant node) {
                return null;
        }
 
-       public override CodeBinding create_field_binding (Field node) {
+       public override CodeBinding? create_field_binding (Field node) {
                return null;
        }
 
-       public override CodeBinding create_method_binding (Method node) {
+       public override CodeBinding? create_method_binding (Method node) {
                return new CCodeMethodBinding (this, node);
        }
 
-       public override CodeBinding create_creation_method_binding (CreationMethod node) {
+       public override CodeBinding? create_creation_method_binding (CreationMethod node) {
                return null;
        }
 
-       public override CodeBinding create_formal_parameter_binding (FormalParameter node) {
+       public override CodeBinding? create_formal_parameter_binding (FormalParameter node) {
                return null;
        }
 
-       public override CodeBinding create_property_binding (Property node) {
+       public override CodeBinding? create_property_binding (Property node) {
                return null;
        }
 
-       public override CodeBinding create_property_accessor_binding (PropertyAccessor node) {
+       public override CodeBinding? create_property_accessor_binding (PropertyAccessor node) {
                return null;
        }
 
-       public override CodeBinding create_signal_binding (Signal node) {
+       public override CodeBinding? create_signal_binding (Signal node) {
                return null;
        }
 
-       public override CodeBinding create_constructor_binding (Constructor node) {
+       public override CodeBinding? create_constructor_binding (Constructor node) {
                return null;
        }
 
-       public override CodeBinding create_destructor_binding (Destructor node) {
+       public override CodeBinding? create_destructor_binding (Destructor node) {
                return null;
        }
 
-       public override CodeBinding create_type_parameter_binding (TypeParameter node) {
+       public override CodeBinding? create_type_parameter_binding (TypeParameter node) {
                return null;
        }
 
-       public override CodeBinding create_block_binding (Block node) {
+       public override CodeBinding? create_block_binding (Block node) {
                return null;
        }
 
-       public override CodeBinding create_empty_statement_binding (EmptyStatement node) {
+       public override CodeBinding? create_empty_statement_binding (EmptyStatement node) {
                return null;
        }
 
-       public override CodeBinding create_declaration_statement_binding (DeclarationStatement node) {
+       public override CodeBinding? create_declaration_statement_binding (DeclarationStatement node) {
                return null;
        }
 
-       public override CodeBinding create_local_variable_declaration_binding (LocalVariableDeclaration node) {
+       public override CodeBinding? create_local_variable_declaration_binding (LocalVariableDeclaration node) {
                return null;
        }
 
-       public override CodeBinding create_variable_declarator_binding (VariableDeclarator node) {
+       public override CodeBinding? create_variable_declarator_binding (VariableDeclarator node) {
                return null;
        }
 
-       public override CodeBinding create_initializer_list_binding (InitializerList node) {
+       public override CodeBinding? create_initializer_list_binding (InitializerList node) {
                return null;
        }
 
-       public override CodeBinding create_expression_statement_binding (ExpressionStatement node) {
+       public override CodeBinding? create_expression_statement_binding (ExpressionStatement node) {
                return null;
        }
 
-       public override CodeBinding create_if_statement_binding (IfStatement node) {
+       public override CodeBinding? create_if_statement_binding (IfStatement node) {
                return null;
        }
 
-       public override CodeBinding create_switch_statement_binding (SwitchStatement node) {
+       public override CodeBinding? create_switch_statement_binding (SwitchStatement node) {
                return null;
        }
 
-       public override CodeBinding create_switch_section_binding (SwitchSection node) {
+       public override CodeBinding? create_switch_section_binding (SwitchSection node) {
                return null;
        }
 
-       public override CodeBinding create_switch_label_binding (SwitchLabel node) {
+       public override CodeBinding? create_switch_label_binding (SwitchLabel node) {
                return null;
        }
 
-       public override CodeBinding create_while_statement_binding (WhileStatement node) {
+       public override CodeBinding? create_while_statement_binding (WhileStatement node) {
                return null;
        }
 
-       public override CodeBinding create_do_statement_binding (DoStatement node) {
+       public override CodeBinding? create_do_statement_binding (DoStatement node) {
                return null;
        }
 
-       public override CodeBinding create_for_statement_binding (ForStatement node) {
+       public override CodeBinding? create_for_statement_binding (ForStatement node) {
                return null;
        }
 
-       public override CodeBinding create_foreach_statement_binding (ForeachStatement node) {
+       public override CodeBinding? create_foreach_statement_binding (ForeachStatement node) {
                return null;
        }
 
-       public override CodeBinding create_break_statement_binding (BreakStatement node) {
+       public override CodeBinding? create_break_statement_binding (BreakStatement node) {
                return null;
        }
 
-       public override CodeBinding create_continue_statement_binding (ContinueStatement node) {
+       public override CodeBinding? create_continue_statement_binding (ContinueStatement node) {
                return null;
        }
 
-       public override CodeBinding create_return_statement_binding (ReturnStatement node) {
+       public override CodeBinding? create_return_statement_binding (ReturnStatement node) {
                return null;
        }
 
-       public override CodeBinding create_throw_statement_binding (ThrowStatement node) {
+       public override CodeBinding? create_throw_statement_binding (ThrowStatement node) {
                return null;
        }
 
-       public override CodeBinding create_try_statement_binding (TryStatement node) {
+       public override CodeBinding? create_try_statement_binding (TryStatement node) {
                return null;
        }
 
-       public override CodeBinding create_catch_clause_binding (CatchClause node) {
+       public override CodeBinding? create_catch_clause_binding (CatchClause node) {
                return null;
        }
 
-       public override CodeBinding create_lock_statement_binding (LockStatement node) {
+       public override CodeBinding? create_lock_statement_binding (LockStatement node) {
                return null;
        }
 
-       public override CodeBinding create_delete_statement_binding (DeleteStatement node) {
+       public override CodeBinding? create_delete_statement_binding (DeleteStatement node) {
                return null;
        }
 
-       public override CodeBinding create_array_creation_expression_binding (ArrayCreationExpression node) {
+       public override CodeBinding? create_array_creation_expression_binding (ArrayCreationExpression node) {
                return new CCodeArrayCreationExpressionBinding (this, node);
        }
 
-       public override CodeBinding create_boolean_literal_binding (BooleanLiteral node) {
+       public override CodeBinding? create_boolean_literal_binding (BooleanLiteral node) {
                return null;
        }
 
-       public override CodeBinding create_character_literal_binding (CharacterLiteral node) {
+       public override CodeBinding? create_character_literal_binding (CharacterLiteral node) {
                return null;
        }
 
-       public override CodeBinding create_integer_literal_binding (IntegerLiteral node) {
+       public override CodeBinding? create_integer_literal_binding (IntegerLiteral node) {
                return null;
        }
 
-       public override CodeBinding create_real_literal_binding (RealLiteral node) {
+       public override CodeBinding? create_real_literal_binding (RealLiteral node) {
                return null;
        }
 
-       public override CodeBinding create_string_literal_binding (StringLiteral node) {
+       public override CodeBinding? create_string_literal_binding (StringLiteral node) {
                return null;
        }
 
-       public override CodeBinding create_null_literal_binding (NullLiteral node) {
+       public override CodeBinding? create_null_literal_binding (NullLiteral node) {
                return null;
        }
 
-       public override CodeBinding create_parenthesized_expression_binding (ParenthesizedExpression node) {
+       public override CodeBinding? create_parenthesized_expression_binding (ParenthesizedExpression node) {
                return null;
        }
 
-       public override CodeBinding create_member_access_binding (MemberAccess node) {
+       public override CodeBinding? create_member_access_binding (MemberAccess node) {
                return null;
        }
 
-       public override CodeBinding create_member_access_simple_binding (MemberAccess node) {
+       public override CodeBinding? create_member_access_simple_binding (MemberAccess node) {
                return null;
        }
 
-       public override CodeBinding create_invocation_expression_binding (InvocationExpression node) {
+       public override CodeBinding? create_invocation_expression_binding (InvocationExpression node) {
                return null;
        }
 
-       public override CodeBinding create_element_access_binding (ElementAccess node) {
+       public override CodeBinding? create_element_access_binding (ElementAccess node) {
                return new CCodeElementAccessBinding (this, node);
        }
 
-       public override CodeBinding create_base_access_binding (BaseAccess node) {
+       public override CodeBinding? create_base_access_binding (BaseAccess node) {
                return null;
        }
 
-       public override CodeBinding create_postfix_expression_binding (PostfixExpression node) {
+       public override CodeBinding? create_postfix_expression_binding (PostfixExpression node) {
                return null;
        }
 
-       public override CodeBinding create_object_creation_expression_binding (ObjectCreationExpression node) {
+       public override CodeBinding? create_object_creation_expression_binding (ObjectCreationExpression node) {
                return null;
        }
 
-       public override CodeBinding create_sizeof_expression_binding (SizeofExpression node) {
+       public override CodeBinding? create_sizeof_expression_binding (SizeofExpression node) {
                return null;
        }
 
-       public override CodeBinding create_typeof_expression_binding (TypeofExpression node) {
+       public override CodeBinding? create_typeof_expression_binding (TypeofExpression node) {
                return null;
        }
 
-       public override CodeBinding create_unary_expression_binding (UnaryExpression node) {
+       public override CodeBinding? create_unary_expression_binding (UnaryExpression node) {
                return null;
        }
 
-       public override CodeBinding create_cast_expression_binding (CastExpression node) {
+       public override CodeBinding? create_cast_expression_binding (CastExpression node) {
                return null;
        }
 
-       public override CodeBinding create_pointer_indirection_binding (PointerIndirection node) {
+       public override CodeBinding? create_pointer_indirection_binding (PointerIndirection node) {
                return null;
        }
 
-       public override CodeBinding create_addressof_expression_binding (AddressofExpression node) {
+       public override CodeBinding? create_addressof_expression_binding (AddressofExpression node) {
                return null;
        }
 
-       public override CodeBinding create_reference_transfer_expression_binding (ReferenceTransferExpression node) {
+       public override CodeBinding? create_reference_transfer_expression_binding (ReferenceTransferExpression node) {
                return null;
        }
 
-       public override CodeBinding create_binary_expression_binding (BinaryExpression node) {
+       public override CodeBinding? create_binary_expression_binding (BinaryExpression node) {
                return null;
        }
 
-       public override CodeBinding create_type_check_binding (TypeCheck node) {
+       public override CodeBinding? create_type_check_binding (TypeCheck node) {
                return null;
        }
 
-       public override CodeBinding create_conditional_expression_binding (ConditionalExpression node) {
+       public override CodeBinding? create_conditional_expression_binding (ConditionalExpression node) {
                return null;
        }
 
-       public override CodeBinding create_lambda_expression_binding (LambdaExpression node) {
+       public override CodeBinding? create_lambda_expression_binding (LambdaExpression node) {
                return null;
        }
 
-       public override CodeBinding create_lambda_expression_with_statement_body_binding (LambdaExpression node) {
+       public override CodeBinding? create_lambda_expression_with_statement_body_binding (LambdaExpression node) {
                return null;
        }
 
-       public override CodeBinding create_assignment_binding (Assignment node) {
+       public override CodeBinding? create_assignment_binding (Assignment node) {
                return new CCodeAssignmentBinding (this, node);
        }
 }
index 8a1f825..2521264 100644 (file)
@@ -649,7 +649,7 @@ public class Vala.CCodeGenerator {
                }
        }
 
-       private CCodeStatement create_type_check_statement (CodeNode method_node, DataType ret_type, Typesymbol t, bool non_null, string var_name) {
+       private CCodeStatement? create_type_check_statement (CodeNode method_node, DataType ret_type, Typesymbol t, bool non_null, string var_name) {
                var ccheck = new CCodeFunctionCall ();
                
                if ((t is Class && ((Class) t).is_subtype_of (gobject_type)) || (t is Interface && !((Interface) t).declaration_only)) {
@@ -717,7 +717,7 @@ public class Vala.CCodeGenerator {
                return new CCodeExpressionStatement (cassert);
        }
 
-       private CCodeExpression default_value_for_type (DataType type, bool initializer_expression) {
+       private CCodeExpression? default_value_for_type (DataType type, bool initializer_expression) {
                if ((type.data_type != null && type.data_type.is_reference_type ()) || type is PointerType || type is ArrayType) {
                        return new CCodeConstant ("NULL");
                } else if (type.data_type != null && type.data_type.get_default_value () != null) {
@@ -736,7 +736,7 @@ public class Vala.CCodeGenerator {
                return null;
        }
 
-       private Typesymbol find_parent_type (Symbol sym) {
+       private Typesymbol? find_parent_type (Symbol sym) {
                while (sym != null) {
                        if (sym is Typesymbol) {
                                return (Typesymbol) sym;
index e674400..1627742 100644 (file)
@@ -62,7 +62,7 @@ public class Vala.CCodeGenerator {
                return ret;
        }
        
-       private string get_value_type_name_from_type_reference (DataType t) {
+       private string? get_value_type_name_from_type_reference (DataType t) {
                if (t is PointerType || t.type_parameter != null || t.is_ref || t.is_out) {
                        return "gpointer";
                } else if (t is VoidType) {
index 95bec0e..f4f235e 100644 (file)
@@ -51,7 +51,7 @@ public class Vala.DBusBindingProvider : Object, BindingProvider {
        public DBusBindingProvider () {
        }
 
-       public Symbol get_binding (MemberAccess ma) {
+       public Symbol? get_binding (MemberAccess ma) {
                if (connection_type != null && ma.inner != null && ma.inner.static_type != null && ma.inner.static_type.data_type == connection_type) {
                        var type_args = ma.get_type_arguments ();
                        if (type_args.size != 1) {
index 12ba61b..71e74d2 100644 (file)
@@ -131,7 +131,7 @@ public class Vala.ArrayType : ReferenceType {
                return result;
        }
 
-       public override string get_cname (bool var_type, bool const_type) {
+       public override string? get_cname (bool var_type, bool const_type) {
                return element_type.get_cname () + "*";
        }
 
index 993bcec..cb0fd73 100644 (file)
@@ -81,7 +81,7 @@ public class Vala.Attribute : CodeNode {
         * @param name argument name
         * @return     string value
         */
-       public string get_string (string name) {
+       public string? get_string (string name) {
                // FIXME: use hash table
                foreach (NamedArgument arg in args) {
                        if (arg.name == name) {
index 2babe3a..ea12a9f 100644 (file)
@@ -1,6 +1,6 @@
 /* valabindingprovider.vala
  *
- * Copyright (C) 2007  Jürg Billeter
+ * Copyright (C) 2007-2008  Jürg Billeter
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -32,6 +32,6 @@ public interface Vala.BindingProvider : Object {
         * @param ma member access expression
         * @return   resolved symbol or null if no binding can be provided
         */
-       public abstract Symbol get_binding (MemberAccess ma);
+       public abstract Symbol? get_binding (MemberAccess ma);
 }
 
index 16b36a1..6d4b68b 100644 (file)
@@ -470,7 +470,7 @@ public class Vala.Class : Typesymbol {
                return lower_case_cprefix;
        }
        
-       public override string get_upper_case_cname (string? infix) {
+       public override string? get_upper_case_cname (string? infix) {
                return get_lower_case_cname (infix).up ();
        }
 
@@ -544,7 +544,7 @@ public class Vala.Class : Typesymbol {
                return has_type_id || (base_class != null && base_class.get_has_type_id ());
        }
 
-       public override string get_type_id () {
+       public override string? get_type_id () {
                if (type_id == null) {
                        if (get_has_type_id ()) {
                                type_id = get_upper_case_cname ("TYPE_");
@@ -560,7 +560,7 @@ public class Vala.Class : Typesymbol {
                this.type_id = type_id;
        }
 
-       public override string get_marshaller_type_name () {
+       public override string? get_marshaller_type_name () {
                if (marshaller_type_name == null) {
                        if (base_class != null) {
                                marshaller_type_name = base_class.get_marshaller_type_name ();
@@ -572,7 +572,7 @@ public class Vala.Class : Typesymbol {
                return marshaller_type_name;
        }
 
-       public override string get_get_value_function () {
+       public override string? get_get_value_function () {
                if (get_value_function == null) {
                        if (base_class != null) {
                                get_value_function = base_class.get_get_value_function ();
@@ -584,7 +584,7 @@ public class Vala.Class : Typesymbol {
                return get_value_function;
        }
        
-       public override string get_set_value_function () {
+       public override string? get_set_value_function () {
                if (set_value_function == null) {
                        if (base_class != null) {
                                set_value_function = base_class.get_set_value_function ();
index f554638..3f544ba 100644 (file)
@@ -381,7 +381,7 @@ public class Vala.CodeContext : Object {
                }
        }
 
-       public string get_package_path (string pkg, [CCode (array_length_pos = 1.9)] string[] vapi_directories) {
+       public string? get_package_path (string pkg, [CCode (array_length_pos = 1.9)] string[] vapi_directories) {
                string basename = "%s.vapi".printf (pkg);
                string filename = null;
 
index d34eaa5..dbe9a6b 100644 (file)
@@ -34,287 +34,287 @@ public class Vala.CodeGenerator : CodeVisitor {
        public virtual void emit (CodeContext context) {
        }
 
-       public virtual CodeBinding create_namespace_binding (Namespace node) {
+       public virtual CodeBinding? create_namespace_binding (Namespace node) {
                return null;
        }
 
-       public virtual CodeBinding create_class_binding (Class node) {
+       public virtual CodeBinding? create_class_binding (Class node) {
                return null;
        }
 
-       public virtual CodeBinding create_struct_binding (Struct node) {
+       public virtual CodeBinding? create_struct_binding (Struct node) {
                return null;
        }
 
-       public virtual CodeBinding create_interface_binding (Interface node) {
+       public virtual CodeBinding? create_interface_binding (Interface node) {
                return null;
        }
 
-       public virtual CodeBinding create_enum_binding (Enum node) {
+       public virtual CodeBinding? create_enum_binding (Enum node) {
                return null;
        }
 
-       public virtual CodeBinding create_enum_value_binding (EnumValue node) {
+       public virtual CodeBinding? create_enum_value_binding (EnumValue node) {
                return null;
        }
 
-       public virtual CodeBinding create_error_domain_binding (ErrorDomain node) {
+       public virtual CodeBinding? create_error_domain_binding (ErrorDomain node) {
                return null;
        }
 
-       public virtual CodeBinding create_error_code_binding (ErrorCode node) {
+       public virtual CodeBinding? create_error_code_binding (ErrorCode node) {
                return null;
        }
 
-       public virtual CodeBinding create_delegate_binding (Delegate node) {
+       public virtual CodeBinding? create_delegate_binding (Delegate node) {
                return null;
        }
 
-       public virtual CodeBinding create_constant_binding (Constant node) {
+       public virtual CodeBinding? create_constant_binding (Constant node) {
                return null;
        }
 
-       public virtual CodeBinding create_field_binding (Field node) {
+       public virtual CodeBinding? create_field_binding (Field node) {
                return null;
        }
 
-       public virtual CodeBinding create_method_binding (Method node) {
+       public virtual CodeBinding? create_method_binding (Method node) {
                return null;
        }
 
-       public virtual CodeBinding create_creation_method_binding (CreationMethod node) {
+       public virtual CodeBinding? create_creation_method_binding (CreationMethod node) {
                return null;
        }
 
-       public virtual CodeBinding create_formal_parameter_binding (FormalParameter node) {
+       public virtual CodeBinding? create_formal_parameter_binding (FormalParameter node) {
                return null;
        }
 
-       public virtual CodeBinding create_property_binding (Property node) {
+       public virtual CodeBinding? create_property_binding (Property node) {
                return null;
        }
 
-       public virtual CodeBinding create_property_accessor_binding (PropertyAccessor node) {
+       public virtual CodeBinding? create_property_accessor_binding (PropertyAccessor node) {
                return null;
        }
 
-       public virtual CodeBinding create_signal_binding (Signal node) {
+       public virtual CodeBinding? create_signal_binding (Signal node) {
                return null;
        }
 
-       public virtual CodeBinding create_constructor_binding (Constructor node) {
+       public virtual CodeBinding? create_constructor_binding (Constructor node) {
                return null;
        }
 
-       public virtual CodeBinding create_destructor_binding (Destructor node) {
+       public virtual CodeBinding? create_destructor_binding (Destructor node) {
                return null;
        }
 
-       public virtual CodeBinding create_type_parameter_binding (TypeParameter node) {
+       public virtual CodeBinding? create_type_parameter_binding (TypeParameter node) {
                return null;
        }
 
-       public virtual CodeBinding create_block_binding (Block node) {
+       public virtual CodeBinding? create_block_binding (Block node) {
                return null;
        }
 
-       public virtual CodeBinding create_empty_statement_binding (EmptyStatement node) {
+       public virtual CodeBinding? create_empty_statement_binding (EmptyStatement node) {
                return null;
        }
 
-       public virtual CodeBinding create_declaration_statement_binding (DeclarationStatement node) {
+       public virtual CodeBinding? create_declaration_statement_binding (DeclarationStatement node) {
                return null;
        }
 
-       public virtual CodeBinding create_local_variable_declaration_binding (LocalVariableDeclaration node) {
+       public virtual CodeBinding? create_local_variable_declaration_binding (LocalVariableDeclaration node) {
                return null;
        }
 
-       public virtual CodeBinding create_variable_declarator_binding (VariableDeclarator node) {
+       public virtual CodeBinding? create_variable_declarator_binding (VariableDeclarator node) {
                return null;
        }
 
-       public virtual CodeBinding create_initializer_list_binding (InitializerList node) {
+       public virtual CodeBinding? create_initializer_list_binding (InitializerList node) {
                return null;
        }
 
-       public virtual CodeBinding create_expression_statement_binding (ExpressionStatement node) {
+       public virtual CodeBinding? create_expression_statement_binding (ExpressionStatement node) {
                return null;
        }
 
-       public virtual CodeBinding create_if_statement_binding (IfStatement node) {
+       public virtual CodeBinding? create_if_statement_binding (IfStatement node) {
                return null;
        }
 
-       public virtual CodeBinding create_switch_statement_binding (SwitchStatement node) {
+       public virtual CodeBinding? create_switch_statement_binding (SwitchStatement node) {
                return null;
        }
 
-       public virtual CodeBinding create_switch_section_binding (SwitchSection node) {
+       public virtual CodeBinding? create_switch_section_binding (SwitchSection node) {
                return null;
        }
 
-       public virtual CodeBinding create_switch_label_binding (SwitchLabel node) {
+       public virtual CodeBinding? create_switch_label_binding (SwitchLabel node) {
                return null;
        }
 
-       public virtual CodeBinding create_while_statement_binding (WhileStatement node) {
+       public virtual CodeBinding? create_while_statement_binding (WhileStatement node) {
                return null;
        }
 
-       public virtual CodeBinding create_do_statement_binding (DoStatement node) {
+       public virtual CodeBinding? create_do_statement_binding (DoStatement node) {
                return null;
        }
 
-       public virtual CodeBinding create_for_statement_binding (ForStatement node) {
+       public virtual CodeBinding? create_for_statement_binding (ForStatement node) {
                return null;
        }
 
-       public virtual CodeBinding create_foreach_statement_binding (ForeachStatement node) {
+       public virtual CodeBinding? create_foreach_statement_binding (ForeachStatement node) {
                return null;
        }
 
-       public virtual CodeBinding create_break_statement_binding (BreakStatement node) {
+       public virtual CodeBinding? create_break_statement_binding (BreakStatement node) {
                return null;
        }
 
-       public virtual CodeBinding create_continue_statement_binding (ContinueStatement node) {
+       public virtual CodeBinding? create_continue_statement_binding (ContinueStatement node) {
                return null;
        }
 
-       public virtual CodeBinding create_return_statement_binding (ReturnStatement node) {
+       public virtual CodeBinding? create_return_statement_binding (ReturnStatement node) {
                return null;
        }
 
-       public virtual CodeBinding create_throw_statement_binding (ThrowStatement node) {
+       public virtual CodeBinding? create_throw_statement_binding (ThrowStatement node) {
                return null;
        }
 
-       public virtual CodeBinding create_try_statement_binding (TryStatement node) {
+       public virtual CodeBinding? create_try_statement_binding (TryStatement node) {
                return null;
        }
 
-       public virtual CodeBinding create_catch_clause_binding (CatchClause node) {
+       public virtual CodeBinding? create_catch_clause_binding (CatchClause node) {
                return null;
        }
 
-       public virtual CodeBinding create_lock_statement_binding (LockStatement node) {
+       public virtual CodeBinding? create_lock_statement_binding (LockStatement node) {
                return null;
        }
 
-       public virtual CodeBinding create_delete_statement_binding (DeleteStatement node) {
+       public virtual CodeBinding? create_delete_statement_binding (DeleteStatement node) {
                return null;
        }
 
-       public virtual CodeBinding create_array_creation_expression_binding (ArrayCreationExpression node) {
+       public virtual CodeBinding? create_array_creation_expression_binding (ArrayCreationExpression node) {
                return null;
        }
 
-       public virtual CodeBinding create_boolean_literal_binding (BooleanLiteral node) {
+       public virtual CodeBinding? create_boolean_literal_binding (BooleanLiteral node) {
                return null;
        }
 
-       public virtual CodeBinding create_character_literal_binding (CharacterLiteral node) {
+       public virtual CodeBinding? create_character_literal_binding (CharacterLiteral node) {
                return null;
        }
 
-       public virtual CodeBinding create_integer_literal_binding (IntegerLiteral node) {
+       public virtual CodeBinding? create_integer_literal_binding (IntegerLiteral node) {
                return null;
        }
 
-       public virtual CodeBinding create_real_literal_binding (RealLiteral node) {
+       public virtual CodeBinding? create_real_literal_binding (RealLiteral node) {
                return null;
        }
 
-       public virtual CodeBinding create_string_literal_binding (StringLiteral node) {
+       public virtual CodeBinding? create_string_literal_binding (StringLiteral node) {
                return null;
        }
 
-       public virtual CodeBinding create_null_literal_binding (NullLiteral node) {
+       public virtual CodeBinding? create_null_literal_binding (NullLiteral node) {
                return null;
        }
 
-       public virtual CodeBinding create_parenthesized_expression_binding (ParenthesizedExpression node) {
+       public virtual CodeBinding? create_parenthesized_expression_binding (ParenthesizedExpression node) {
                return null;
        }
 
-       public virtual CodeBinding create_member_access_binding (MemberAccess node) {
+       public virtual CodeBinding? create_member_access_binding (MemberAccess node) {
                return null;
        }
 
-       public virtual CodeBinding create_member_access_simple_binding (MemberAccess node) {
+       public virtual CodeBinding? create_member_access_simple_binding (MemberAccess node) {
                return null;
        }
 
-       public virtual CodeBinding create_invocation_expression_binding (InvocationExpression node) {
+       public virtual CodeBinding? create_invocation_expression_binding (InvocationExpression node) {
                return null;
        }
 
-       public virtual CodeBinding create_element_access_binding (ElementAccess node) {
+       public virtual CodeBinding? create_element_access_binding (ElementAccess node) {
                return null;
        }
 
-       public virtual CodeBinding create_base_access_binding (BaseAccess node) {
+       public virtual CodeBinding? create_base_access_binding (BaseAccess node) {
                return null;
        }
 
-       public virtual CodeBinding create_postfix_expression_binding (PostfixExpression node) {
+       public virtual CodeBinding? create_postfix_expression_binding (PostfixExpression node) {
                return null;
        }
 
-       public virtual CodeBinding create_object_creation_expression_binding (ObjectCreationExpression node) {
+       public virtual CodeBinding? create_object_creation_expression_binding (ObjectCreationExpression node) {
                return null;
        }
 
-       public virtual CodeBinding create_sizeof_expression_binding (SizeofExpression node) {
+       public virtual CodeBinding? create_sizeof_expression_binding (SizeofExpression node) {
                return null;
        }
 
-       public virtual CodeBinding create_typeof_expression_binding (TypeofExpression node) {
+       public virtual CodeBinding? create_typeof_expression_binding (TypeofExpression node) {
                return null;
        }
 
-       public virtual CodeBinding create_unary_expression_binding (UnaryExpression node) {
+       public virtual CodeBinding? create_unary_expression_binding (UnaryExpression node) {
                return null;
        }
 
-       public virtual CodeBinding create_cast_expression_binding (CastExpression node) {
+       public virtual CodeBinding? create_cast_expression_binding (CastExpression node) {
                return null;
        }
 
-       public virtual CodeBinding create_pointer_indirection_binding (PointerIndirection node) {
+       public virtual CodeBinding? create_pointer_indirection_binding (PointerIndirection node) {
                return null;
        }
 
-       public virtual CodeBinding create_addressof_expression_binding (AddressofExpression node) {
+       public virtual CodeBinding? create_addressof_expression_binding (AddressofExpression node) {
                return null;
        }
 
-       public virtual CodeBinding create_reference_transfer_expression_binding (ReferenceTransferExpression node) {
+       public virtual CodeBinding? create_reference_transfer_expression_binding (ReferenceTransferExpression node) {
                return null;
        }
 
-       public virtual CodeBinding create_binary_expression_binding (BinaryExpression node) {
+       public virtual CodeBinding? create_binary_expression_binding (BinaryExpression node) {
                return null;
        }
 
-       public virtual CodeBinding create_type_check_binding (TypeCheck node) {
+       public virtual CodeBinding? create_type_check_binding (TypeCheck node) {
                return null;
        }
 
-       public virtual CodeBinding create_conditional_expression_binding (ConditionalExpression node) {
+       public virtual CodeBinding? create_conditional_expression_binding (ConditionalExpression node) {
                return null;
        }
 
-       public virtual CodeBinding create_lambda_expression_binding (LambdaExpression node) {
+       public virtual CodeBinding? create_lambda_expression_binding (LambdaExpression node) {
                return null;
        }
 
-       public virtual CodeBinding create_lambda_expression_with_statement_body_binding (LambdaExpression node) {
+       public virtual CodeBinding? create_lambda_expression_with_statement_body_binding (LambdaExpression node) {
                return null;
        }
 
-       public virtual CodeBinding create_assignment_binding (Assignment node) {
+       public virtual CodeBinding? create_assignment_binding (Assignment node) {
                return null;
        }
 }
index 05ffa70..7218453 100644 (file)
@@ -106,7 +106,7 @@ public abstract class Vala.CodeNode : Object {
         * @param name attribute name
         * @return     attribute
         */
-       public Attribute get_attribute (string name) {
+       public Attribute? get_attribute (string name) {
                // FIXME: use hash table
                foreach (Attribute a in attributes) {
                        if (a.name == name) {
index f760adf..3bc03c0 100644 (file)
@@ -113,7 +113,7 @@ public abstract class Vala.DataType : CodeNode {
         *
         * @return the type string to be used in C code
         */
-       public virtual string get_cname (bool var_type = false, bool const_type = false) {
+       public virtual string? get_cname (bool var_type = false, bool const_type = false) {
                if (data_type == null && type_parameter == null) {
                        if (var_type) {
                                return "gpointer";
@@ -396,7 +396,7 @@ public abstract class Vala.DataType : CodeNode {
         *
         * @return return type
         */
-       public virtual DataType get_return_type () {
+       public virtual DataType? get_return_type () {
                return null;
        }
 
@@ -405,7 +405,7 @@ public abstract class Vala.DataType : CodeNode {
         *
         * @return parameter list
         */
-       public virtual Collection<FormalParameter> get_parameters () {
+       public virtual Collection<FormalParameter>? get_parameters () {
                return null;
        }
 
@@ -439,7 +439,7 @@ public abstract class Vala.DataType : CodeNode {
                return null;
        }
 
-       public virtual Symbol get_pointer_member (string member_name) {
+       public virtual Symbol? get_pointer_member (string member_name) {
                return null;
        }
 
index 5316fad..cc06308 100644 (file)
@@ -260,19 +260,19 @@ public class Vala.Delegate : Typesymbol {
                return false;
        }
 
-       public override string get_type_id () {
+       public override string? get_type_id () {
                return "G_TYPE_POINTER";
        }
 
-       public override string get_marshaller_type_name () {
+       public override string? get_marshaller_type_name () {
                return "POINTER";
        }
 
-       public override string get_get_value_function () {
+       public override string? get_get_value_function () {
                return "g_value_get_pointer";
        }
        
-       public override string get_set_value_function () {
+       public override string? get_set_value_function () {
                return "g_value_set_pointer";
        }
 
index 3702f3d..b0c908b 100644 (file)
@@ -37,11 +37,11 @@ public class Vala.DelegateType : DataType {
                return true;
        }
 
-       public override DataType get_return_type () {
+       public override DataType? get_return_type () {
                return delegate_symbol.return_type;
        }
 
-       public override Collection<FormalParameter> get_parameters () {
+       public override Collection<FormalParameter>? get_parameters () {
                return delegate_symbol.get_parameters ();
        }
 
@@ -53,7 +53,7 @@ public class Vala.DelegateType : DataType {
                return new DelegateType (delegate_symbol);
        }
 
-       public override string get_cname (bool var_type = false, bool const_type = false) {
+       public override string? get_cname (bool var_type, bool const_type) {
                return delegate_symbol.get_cname (const_type);
        }
 
index 9230477..f924608 100644 (file)
@@ -148,7 +148,7 @@ public class Vala.Enum : Typesymbol {
                return "%s%s%s".printf (parent_symbol.get_lower_case_cprefix (), infix, get_lower_case_csuffix ());
        }
 
-       public override string get_upper_case_cname (string? infix = null) {
+       public override string? get_upper_case_cname (string? infix = null) {
                return get_lower_case_cname (infix).up ();
        }
 
@@ -220,11 +220,11 @@ public class Vala.Enum : Typesymbol {
                }
        }
 
-       public void set_type_id (string type_id) {
+       public void set_type_id (string? type_id) {
                this.type_id = type_id;
        }
 
-       public override string get_type_id () {
+       public override string? get_type_id () {
                if (type_id == null) {
                        if (has_type_id) {
                                type_id = get_upper_case_cname ("TYPE_");
@@ -236,7 +236,7 @@ public class Vala.Enum : Typesymbol {
                return type_id;
        }
        
-       public override string get_marshaller_type_name () {
+       public override string? get_marshaller_type_name () {
                if (has_type_id) {
                        if (is_flags) {
                                return "FLAGS";
@@ -247,12 +247,12 @@ public class Vala.Enum : Typesymbol {
                        if (is_flags) {
                                return "UINT";
                        } else {
-               return "INT";
-       }
+                               return "INT";
+                       }
                }
        }
 
-       public override string get_get_value_function () {
+       public override string? get_get_value_function () {
                if (has_type_id) {
                        if (is_flags) {
                                return "g_value_get_flags";
@@ -268,7 +268,7 @@ public class Vala.Enum : Typesymbol {
                }
        }
        
-       public override string get_set_value_function () {
+       public override string? get_set_value_function () {
                if (has_type_id) {
                        if (is_flags) {
                                return "g_value_set_flags";
@@ -284,7 +284,7 @@ public class Vala.Enum : Typesymbol {
                }
        }
 
-       public override string get_default_value () {
+       public override string? get_default_value () {
                return "0";
        }
 }
index 63fa957..6b9b9cd 100644 (file)
@@ -137,7 +137,7 @@ public class Vala.ErrorDomain : Typesymbol {
                return "%s%s%s".printf (parent_symbol.get_lower_case_cprefix (), infix, get_lower_case_csuffix ());
        }
 
-       public override string get_upper_case_cname (string? infix) {
+       public override string? get_upper_case_cname (string? infix) {
                return get_lower_case_cname (null).up ();
        }
 
@@ -201,19 +201,19 @@ public class Vala.ErrorDomain : Typesymbol {
                }
        }
 
-       public override string get_type_id () {
+       public override string? get_type_id () {
                return "G_TYPE_POINTER";
        }
        
-       public override string get_marshaller_type_name () {
+       public override string? get_marshaller_type_name () {
                return "POINTER";
        }
 
-       public override string get_get_value_function () {
+       public override string? get_get_value_function () {
                return "g_value_get_pointer";
        }
        
-       public override string get_set_value_function () {
+       public override string? get_set_value_function () {
                return "g_value_set_pointer";
        }
 }
index 1414152..64540ab 100644 (file)
@@ -72,7 +72,7 @@ public class Vala.ErrorType : ReferenceType {
                return new ErrorType (error_domain, source_reference);
        }
 
-       public override string get_cname (bool var_type = false, bool const_type = false) {
+       public override string? get_cname (bool var_type = false, bool const_type = false) {
                return "GError*";
        }
 
index 4422e78..79cad53 100644 (file)
@@ -72,7 +72,7 @@ public class Vala.ExpressionStatement : CodeNode, Statement {
         * @return the property this statement sets, or null if it doesn't set
         *         a property
         */
-       public Property assigned_property () {
+       public Property? assigned_property () {
                if (expression is Assignment) {
                        var assign = (Assignment) expression;
                        if (assign.left is MemberAccess) {
index 5b15add..328b375 100644 (file)
@@ -313,7 +313,7 @@ public class Vala.Interface : Typesymbol {
                return "%s_".printf (get_lower_case_cname (null));
        }
        
-       public override string get_upper_case_cname (string? infix) {
+       public override string? get_upper_case_cname (string? infix) {
                return get_lower_case_cname (infix).up ();
        }
 
@@ -448,19 +448,19 @@ public class Vala.Interface : Typesymbol {
                this.type_cname = type_cname;
        }
 
-       public override string get_marshaller_type_name () {
+       public override string? get_marshaller_type_name () {
                return "OBJECT";
        }
 
-       public override string get_get_value_function () {
+       public override string? get_get_value_function () {
                return "g_value_get_object";
        }
        
-       public override string get_set_value_function () {
+       public override string? get_set_value_function () {
                return "g_value_set_object";
        }
 
-       public override string get_type_id () {
+       public override string? get_type_id () {
                if (type_id == null) {
                        type_id = get_upper_case_cname ("TYPE_");
                }
index 62fedf9..09f6bf8 100644 (file)
@@ -37,11 +37,11 @@ public class Vala.MethodType : DataType {
                return true;
        }
 
-       public override DataType get_return_type () {
+       public override DataType? get_return_type () {
                return method_symbol.return_type;
        }
 
-       public override Collection<FormalParameter> get_parameters () {
+       public override Collection<FormalParameter>? get_parameters () {
                return method_symbol.get_parameters ();
        }
 
index 32ba75a..d852044 100644 (file)
@@ -347,7 +347,7 @@ public class Vala.Parser : CodeVisitor {
                bool is_weak = accept (TokenType.WEAK);
 
                var sym = parse_symbol_name ();
-               var type_arg_list = parse_type_argument_list (false);
+               Gee.List<DataType> type_arg_list = parse_type_argument_list (false);
 
                int stars = 0;
                while (accept (TokenType.STAR)) {
@@ -476,7 +476,7 @@ public class Vala.Parser : CodeVisitor {
        Expression parse_simple_name () throws ParseError {
                var begin = get_location ();
                string id = parse_identifier ();
-               var type_arg_list = parse_type_argument_list (true);
+               Gee.List<DataType> type_arg_list = parse_type_argument_list (true);
                var expr = context.create_member_access (null, id, get_src (begin));
                if (type_arg_list != null) {
                        foreach (DataType type_arg in type_arg_list) {
@@ -509,7 +509,7 @@ public class Vala.Parser : CodeVisitor {
        Expression parse_member_access (SourceLocation begin, Expression inner) throws ParseError {
                expect (TokenType.DOT);
                string id = parse_identifier ();
-               var type_arg_list = parse_type_argument_list (true);
+               Gee.List<DataType> type_arg_list = parse_type_argument_list (true);
                var expr = context.create_member_access (inner, id, get_src (begin));
                if (type_arg_list != null) {
                        foreach (DataType type_arg in type_arg_list) {
@@ -522,7 +522,7 @@ public class Vala.Parser : CodeVisitor {
        Expression parse_pointer_member_access (SourceLocation begin, Expression inner) throws ParseError {
                expect (TokenType.OP_PTR);
                string id = parse_identifier ();
-               var type_arg_list = parse_type_argument_list (true);
+               Gee.List<DataType> type_arg_list = parse_type_argument_list (true);
                var expr = context.create_member_access_pointer (inner, id, get_src (begin));
                if (type_arg_list != null) {
                        foreach (DataType type_arg in type_arg_list) {
@@ -1526,7 +1526,7 @@ public class Vala.Parser : CodeVisitor {
                return context.create_delete_statement (expr, get_src_com (begin));
        }
 
-       Gee.List<Attribute> parse_attributes () throws ParseError {
+       Gee.List<Attribute>? parse_attributes () throws ParseError {
                if (current () != TokenType.OPEN_BRACKET) {
                        return null;
                }
@@ -2629,7 +2629,7 @@ public class Vala.Parser : CodeVisitor {
        }
 
        // try to parse type argument list
-       Gee.List<DataType> parse_type_argument_list (bool maybe_expression) throws ParseError {
+       Gee.List<DataType>? parse_type_argument_list (bool maybe_expression) throws ParseError {
                var begin = get_location ();
                if (accept (TokenType.OP_LT)) {
                        var list = new ArrayList<DataType> ();
@@ -2684,7 +2684,7 @@ public class Vala.Parser : CodeVisitor {
                MemberAccess expr = null;
                do {
                        string id = parse_identifier ();
-                       var type_arg_list = parse_type_argument_list (false);
+                       Gee.List<DataType> type_arg_list = parse_type_argument_list (false);
                        expr = context.create_member_access (expr, id, get_src (begin));
                        if (type_arg_list != null) {
                                foreach (DataType type_arg in type_arg_list) {
index 1c35c7e..b81f4be 100644 (file)
@@ -40,7 +40,7 @@ public class Vala.PointerType : DataType {
                return base_type.to_string () + "*";
        }
 
-       public override string get_cname (bool var_type = false, bool const_type = false) {
+       public override string? get_cname (bool var_type = false, bool const_type = false) {
                if (base_type.data_type != null && base_type.data_type.is_reference_type ()) {
                        return base_type.get_cname (var_type, const_type);
                } else {
@@ -70,7 +70,7 @@ public class Vala.PointerType : DataType {
                return false;
        }
 
-       public override Symbol get_pointer_member (string member_name) {
+       public override Symbol? get_pointer_member (string member_name) {
                Symbol base_symbol = base_type.data_type;
 
                if (base_symbol == null) {
index f383c41..237567b 100644 (file)
@@ -755,7 +755,7 @@ public class Vala.Scanner : Object {
         *
         * @return saved comment
         */
-       public string pop_comment () {
+       public string? pop_comment () {
                if (_comment == null) {
                        return null;
                }
index 066ae0f..7dd6841 100644 (file)
@@ -81,7 +81,7 @@ public class Vala.Scope : Object {
         * @param name name of the symbol to be returned
         * @return     found symbol or null
         */
-       public Symbol lookup (string name) {
+       public Symbol? lookup (string name) {
                if (symbol_table == null) {
                        return null;
                }
index a8a7aea..5921b31 100644 (file)
@@ -1159,6 +1159,11 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                    !current_return_type.transfers_ownership) {
                        Report.warning (stmt.source_reference, "Local variable with strong reference used as return value and method return type hasn't been declared to transfer ownership");
                }
+
+               if (stmt.return_expression is NullLiteral
+                   && !current_return_type.nullable) {
+                       Report.warning (stmt.source_reference, "`null' incompatible with return type `%s`".printf (current_return_type.to_string ()));
+               }
        }
 
        public override void visit_throw_statement (ThrowStatement stmt) {
@@ -1363,7 +1368,7 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                expr.static_type = new NullType (expr.source_reference);
        }
 
-       private DataType get_static_type_for_symbol (Symbol sym) {
+       private DataType? get_static_type_for_symbol (Symbol sym) {
                if (sym is Field) {
                        var f = (Field) sym;
                        return f.type_reference;
@@ -1395,7 +1400,7 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                return null;
        }
 
-       public static Symbol symbol_lookup_inherited (Symbol sym, string name) {
+       public static Symbol? symbol_lookup_inherited (Symbol sym, string name) {
                var result = sym.scope.lookup (name);
                if (result != null) {
                        return result;
@@ -1905,7 +1910,7 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                return true;
        }
 
-       private static DataType get_instance_base_type (DataType instance_type, DataType base_type, CodeNode node_reference) {
+       private static DataType? get_instance_base_type (DataType instance_type, DataType base_type, CodeNode node_reference) {
                // construct a new type reference for the base type with correctly linked type arguments
                ReferenceType instance_base_type;
                if (base_type.data_type is Class) {
@@ -1929,7 +1934,7 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                return instance_base_type;
        }
 
-       public static DataType get_actual_type (DataType derived_instance_type, Symbol generic_member, DataType generic_type, CodeNode node_reference) {
+       public static DataType? get_actual_type (DataType derived_instance_type, Symbol generic_member, DataType generic_type, CodeNode node_reference) {
                DataType instance_type = derived_instance_type;
 
                while (instance_type is PointerType) {
@@ -2460,7 +2465,7 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                }
        }
 
-       private MemberAccess find_member_access (Expression expr) {
+       private MemberAccess? find_member_access (Expression expr) {
                if (expr is ParenthesizedExpression) {
                        var pe = (ParenthesizedExpression) expr;
                        return find_member_access (pe.inner);
@@ -2551,7 +2556,7 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                expr.static_type.takes_ownership = false;
        }
 
-       private DataType get_arithmetic_result_type (DataType left_type, DataType right_type) {
+       private DataType? get_arithmetic_result_type (DataType left_type, DataType right_type) {
                 if (!(left_type.data_type is Struct) || !(right_type.data_type is Struct)) {
                        // at least one operand not struct
                        return null;
@@ -2755,7 +2760,7 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                return result;
        }
 
-       private Method find_current_method () {
+       private Method? find_current_method () {
                var sym = current_symbol;
                while (sym != null) {
                        if (sym is Method) {
index 727ff87..fd53530 100644 (file)
@@ -37,11 +37,11 @@ public class Vala.SignalType : DataType {
                return true;
        }
 
-       public override DataType get_return_type () {
+       public override DataType? get_return_type () {
                return signal_symbol.return_type;
        }
 
-       public override Collection<FormalParameter> get_parameters () {
+       public override Collection<FormalParameter>? get_parameters () {
                return signal_symbol.get_parameters ();
        }
 
index cc0e5ec..e04cf24 100644 (file)
@@ -377,7 +377,7 @@ public class Vala.SourceFile : Object {
         * @param lineno 1-based line number
         * @return       the specified source line
         */
-       public string get_source_line (int lineno) {
+       public string? get_source_line (int lineno) {
                if (source_array == null) {
                        read_source_file ();
                }
index f3fe9ea..3ffc577 100644 (file)
@@ -48,7 +48,7 @@ public class Vala.StringLiteral : Literal {
         *
         * @return the unescaped string
         */     
-       public string eval () {
+       public string? eval () {
                if (value == null) {
                        return null;
                }
index 0830bee..4692058 100644 (file)
@@ -220,7 +220,7 @@ public class Vala.Struct : Typesymbol {
                return "%s%s%s".printf (parent_symbol.get_lower_case_cprefix (), infix, get_lower_case_csuffix ());
        }
        
-       public override string get_upper_case_cname (string? infix) {
+       public override string? get_upper_case_cname (string? infix) {
                return get_lower_case_cname (infix).up ();
        }
 
@@ -315,7 +315,7 @@ public class Vala.Struct : Typesymbol {
                }
        }
 
-       public override string get_type_id () {
+       public override string? get_type_id () {
                if (type_id == null) {
                        if (simple_type) {
                                Report.error (source_reference, "The type `%s` doesn't declare a type id".printf (get_full_name ()));
@@ -326,11 +326,11 @@ public class Vala.Struct : Typesymbol {
                return type_id;
        }
        
-       public void set_type_id (string name) {
+       public void set_type_id (string? name) {
                this.type_id = name;
        }
 
-       public override string get_marshaller_type_name () {
+       public override string? get_marshaller_type_name () {
                if (marshaller_type_name == null) {
                        if (simple_type) {
                                Report.error (source_reference, "The type `%s` doesn't declare a marshaller type name".printf (get_full_name ()));
@@ -341,11 +341,11 @@ public class Vala.Struct : Typesymbol {
                return marshaller_type_name;
        }
        
-       private void set_marshaller_type_name (string name) {
+       private void set_marshaller_type_name (string? name) {
                this.marshaller_type_name = name;
        }
        
-       public override string get_get_value_function () {
+       public override string? get_get_value_function () {
                if (get_value_function == null) {
                        if (simple_type) {
                                Report.error (source_reference, "The value type `%s` doesn't declare a GValue get function".printf (get_full_name ()));
@@ -358,7 +358,7 @@ public class Vala.Struct : Typesymbol {
                }
        }
        
-       public override string get_set_value_function () {
+       public override string? get_set_value_function () {
                if (set_value_function == null) {
                        if (simple_type) {
                                Report.error (source_reference, "The value type `%s` doesn't declare a GValue set function".printf (get_full_name ()));
@@ -371,15 +371,15 @@ public class Vala.Struct : Typesymbol {
                }
        }
        
-       private void set_get_value_function (string function) {
+       private void set_get_value_function (string? function) {
                get_value_function = function;
        }
        
-       private void set_set_value_function (string function) {
+       private void set_set_value_function (string? function) {
                set_value_function = function;
        }
 
-       public override string get_default_value () {
+       public override string? get_default_value () {
                if (default_value != null) {
                        return default_value;
                }
@@ -394,7 +394,7 @@ public class Vala.Struct : Typesymbol {
                return null;
        }
 
-       private void set_default_value (string value) {
+       private void set_default_value (string? value) {
                default_value = value;
        }
 
index 2c2863e..c10e32b 100644 (file)
@@ -30,7 +30,7 @@ public abstract class Vala.Symbol : CodeNode {
        /**
         * The parent of this symbol.
         */
-       public weak Symbol parent_symbol {
+       public weak Symbol? parent_symbol {
                get {
                        if (owner == null) {
                                return null;
index a7d3055..f1f342e 100644 (file)
@@ -141,7 +141,7 @@ public abstract class Vala.Typesymbol : Symbol {
         * @return the name of the GType name in C code or null if this data
         *         type is not registered with GType
         */
-       public virtual string get_type_id () {
+       public virtual string? get_type_id () {
                return null;
        }
        
@@ -150,21 +150,21 @@ public abstract class Vala.Typesymbol : Symbol {
         *
         * @return type name for marshallers
         */
-       public virtual string get_marshaller_type_name () {
+       public virtual string? get_marshaller_type_name () {
                return null;
        }
        
        /**
         * Returns the cname of the GValue getter function,
         */
-       public virtual string get_get_value_function () {
+       public virtual string? get_get_value_function () {
                return null;
        }
        
        /**
         * Returns the cname of the GValue setter function,
         */
-       public virtual string get_set_value_function () {
+       public virtual string? get_set_value_function () {
                return null;
        }
        
@@ -177,7 +177,7 @@ public abstract class Vala.Typesymbol : Symbol {
         *              name or null
         * @return      the upper case name to be used in C code
         */
-       public virtual string get_upper_case_cname (string? infix = null) {
+       public virtual string? get_upper_case_cname (string? infix = null) {
                return null;
        }
 
@@ -187,7 +187,7 @@ public abstract class Vala.Typesymbol : Symbol {
         *
         * @return      the name of the default value
         */
-       public virtual string get_default_value () {
+       public virtual string? get_default_value () {
                return null;
        }
 
index 10f06b3..826fd22 100644 (file)
@@ -72,7 +72,7 @@ public class Vala.UnresolvedType : DataType {
         * @param source reference to source code
         * @return       newly created type reference
         */
-       public static UnresolvedType new_from_expression (Expression expr) {
+       public static UnresolvedType? new_from_expression (Expression expr) {
                string ns = null;
                string type_name = null;
                if (expr is MemberAccess) {
index 8f5e70a..f45b77f 100644 (file)
@@ -53,7 +53,7 @@ public class Vala.ValueType : DataType {
                return result;
        }
 
-       public override string get_cname (bool var_type, bool const_type) {
+       public override string? get_cname (bool var_type, bool const_type) {
                string ptr = "";
                if (is_ref || is_out) {
                        ptr += "*";
index b759166..808cb05 100644 (file)
@@ -37,7 +37,7 @@ public class Vala.VoidType : DataType {
                return "void";
        }
 
-       public override string get_cname (bool var_type = false, bool const_type = false) {
+       public override string? get_cname (bool var_type = false, bool const_type = false) {
                return "void";
        }
 
index e21f6bd..14e39ab 100644 (file)
@@ -188,7 +188,7 @@ public class Vala.GIdlParser : CodeVisitor {
                return const_name;
        }
 
-       private Namespace parse_module (IdlModule module) {
+       private Namespace? parse_module (IdlModule module) {
                Symbol sym = context.root.scope.lookup (module.name);
                Namespace ns;
                if (sym is Namespace) {
@@ -280,7 +280,7 @@ public class Vala.GIdlParser : CodeVisitor {
                return ns;
        }
        
-       private Delegate parse_delegate (IdlNodeFunction f_node) {
+       private Delegate? parse_delegate (IdlNodeFunction f_node) {
                weak IdlNode node = (IdlNode) f_node;
        
                var cb = new Delegate (node.name, parse_param (f_node.result), current_source_reference);
@@ -710,7 +710,7 @@ public class Vala.GIdlParser : CodeVisitor {
                }
        }
        
-       private Typesymbol parse_enum (IdlNodeEnum en_node) {
+       private Typesymbol? parse_enum (IdlNodeEnum en_node) {
                weak IdlNode node = (IdlNode) en_node;
 
                var en = new Enum (node.name, current_source_reference);
@@ -978,7 +978,7 @@ public class Vala.GIdlParser : CodeVisitor {
                current_data_type = null;
        }
        
-       private UnresolvedType parse_type (IdlNodeType type_node) {
+       private UnresolvedType? parse_type (IdlNodeType type_node) {
                var type = new UnresolvedType ();
                if (type_node.tag == TypeTag.VOID) {
                        if (type_node.is_pointer) {
@@ -1184,7 +1184,7 @@ public class Vala.GIdlParser : CodeVisitor {
                return type;
        }
        
-       private Method create_method (string name, string symbol, IdlNodeParam? res, GLib.List<IdlNodeParam>? parameters, bool is_constructor, bool is_interface) {
+       private Method? create_method (string name, string symbol, IdlNodeParam? res, GLib.List<IdlNodeParam>? parameters, bool is_constructor, bool is_interface) {
                UnresolvedType return_type = null;
                if (res != null) {
                        return_type = parse_param (res);
@@ -1417,7 +1417,7 @@ public class Vala.GIdlParser : CodeVisitor {
                return false;
        }
 
-       private Method parse_function (IdlNodeFunction f, bool is_interface = false) {
+       private Method? parse_function (IdlNodeFunction f, bool is_interface = false) {
                weak IdlNode node = (IdlNode) f;
                
                if (f.deprecated) {
@@ -1468,7 +1468,7 @@ public class Vala.GIdlParser : CodeVisitor {
                return str.str;
        }
 
-       private Property parse_property (IdlNodeProperty prop_node) {
+       private Property? parse_property (IdlNodeProperty prop_node) {
                weak IdlNode node = (IdlNode) prop_node;
                
                if (prop_node.deprecated) {
@@ -1519,7 +1519,7 @@ public class Vala.GIdlParser : CodeVisitor {
                return prop;
        }
 
-       private Constant parse_constant (IdlNodeConstant const_node) {
+       private Constant? parse_constant (IdlNodeConstant const_node) {
                weak IdlNode node = (IdlNode) const_node;
                
                var type = parse_type (const_node.type);
@@ -1533,7 +1533,7 @@ public class Vala.GIdlParser : CodeVisitor {
                return c;
        }
 
-       private Field parse_field (IdlNodeField field_node) {
+       private Field? parse_field (IdlNodeField field_node) {
                weak IdlNode node = (IdlNode) field_node;
                
                var type = parse_type (field_node.type);
@@ -1586,7 +1586,7 @@ public class Vala.GIdlParser : CodeVisitor {
        }
 
        [NoArrayLength]
-       private string[] get_attributes (string codenode) {
+       private string[]? get_attributes (string codenode) {
                var attributes = codenode_attributes_map.get (codenode);
 
                if (attributes == null) {
@@ -1619,7 +1619,7 @@ public class Vala.GIdlParser : CodeVisitor {
                return s.offset (1).ndup (s.size () - 2);
        }
 
-       private Signal parse_signal (IdlNodeSignal sig_node) {
+       private Signal? parse_signal (IdlNodeSignal sig_node) {
                weak IdlNode node = (IdlNode) sig_node;
                
                if (sig_node.deprecated || sig_node.result == null) {
index 04502e0..8d38669 100644 (file)
@@ -79,7 +79,7 @@ class Vala.VAPIGen : Object {
                return true;
        }
        
-       private static string[] get_packages_from_depsfile (string depsfile) {
+       private static string[]? get_packages_from_depsfile (string depsfile) {
                string contents;
                if (FileUtils.get_contents (depsfile, out contents)) {
                        return contents.strip ().split ("\n");