[vala/staging: 2/4] vala: Member reference for ObjectCreationExpression is never null




commit e72804efa476dedc48911d8ed73cd938b4e6fa92
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Tue Feb 22 10:43:10 2022 +0100

    vala: Member reference for ObjectCreationExpression is never null

 vala/valaobjectcreationexpression.vala | 110 ++++++++++++++-------------------
 1 file changed, 48 insertions(+), 62 deletions(-)
---
diff --git a/vala/valaobjectcreationexpression.vala b/vala/valaobjectcreationexpression.vala
index dc2bd8f6c..9cea93417 100644
--- a/vala/valaobjectcreationexpression.vala
+++ b/vala/valaobjectcreationexpression.vala
@@ -41,13 +41,11 @@ public class Vala.ObjectCreationExpression : Expression, CallableExpression {
         * The construction method to use or the data type to be created
         * with the default construction method.
         */
-       public MemberAccess? member_name {
+       public MemberAccess member_name {
                get { return _member_name; }
                private set {
                        _member_name = value;
-                       if (_member_name != null) {
-                               _member_name.parent_node = this;
-                       }
+                       _member_name.parent_node = this;
                }
        }
 
@@ -62,7 +60,7 @@ public class Vala.ObjectCreationExpression : Expression, CallableExpression {
        private List<MemberInitializer> object_initializer = new ArrayList<MemberInitializer> ();
 
        private DataType _data_type;
-       private MemberAccess? _member_name;
+       private MemberAccess _member_name;
 
        /**
         * Creates a new object creation expression.
@@ -71,7 +69,7 @@ public class Vala.ObjectCreationExpression : Expression, CallableExpression {
         * @param source_reference reference to source code
         * @return                 newly created object creation expression
         */
-       public ObjectCreationExpression (MemberAccess? member_name, SourceReference? source_reference = null) 
{
+       public ObjectCreationExpression (MemberAccess member_name, SourceReference? source_reference = null) {
                this.source_reference = source_reference;
                this.member_name = member_name;
        }
@@ -183,76 +181,64 @@ public class Vala.ObjectCreationExpression : Expression, CallableExpression {
 
                checked = true;
 
-               if (member_name != null) {
-                       if (!member_name.check (context)) {
-                               error = true;
-                               return false;
-                       }
+               if (!member_name.check (context)) {
+                       error = true;
+                       return false;
                }
 
                TypeSymbol type;
 
-               if (type_reference == null) {
-                       if (member_name == null) {
-                               error = true;
-                               Report.error (source_reference, "Incomplete object creation expression");
-                               return false;
-                       }
-
-                       if (member_name.symbol_reference == null) {
-                               error = true;
-                               return false;
-                       }
-
-                       var constructor_sym = member_name.symbol_reference;
-                       var type_sym = member_name.symbol_reference;
-
-                       var type_args = member_name.get_type_arguments ();
-
-                       if (constructor_sym is Method) {
-                               type_sym = constructor_sym.parent_symbol;
+               if (member_name.symbol_reference == null) {
+                       error = true;
+                       return false;
+               }
 
-                               var constructor = (Method) constructor_sym;
-                               if (!(constructor_sym is CreationMethod)) {
-                                       error = true;
-                                       Report.error (source_reference, "`%s' is not a creation method", 
constructor.get_full_name ());
-                                       return false;
-                               }
+               var constructor_sym = member_name.symbol_reference;
+               var type_sym = member_name.symbol_reference;
 
-                               symbol_reference = constructor;
+               var type_args = member_name.get_type_arguments ();
 
-                               // inner expression can also be base access when chaining constructors
-                               unowned MemberAccess? ma = member_name.inner as MemberAccess;
-                               if (ma != null) {
-                                       type_args = ma.get_type_arguments ();
-                               }
-                       }
+               if (constructor_sym is Method) {
+                       type_sym = constructor_sym.parent_symbol;
 
-                       if (type_sym is Class) {
-                               type = (TypeSymbol) type_sym;
-                               if (((Class) type).is_error_base) {
-                                       type_reference = new ErrorType (null, null, source_reference);
-                               } else {
-                                       type_reference = new ObjectType ((Class) type, source_reference);
-                               }
-                       } else if (type_sym is Struct) {
-                               type = (TypeSymbol) type_sym;
-                               type_reference = new StructValueType ((Struct) type, source_reference);
-                       } else if (type_sym is ErrorCode) {
-                               type = (TypeSymbol) type_sym;
-                               type_reference = new ErrorType ((ErrorDomain) type_sym.parent_symbol, 
(ErrorCode) type_sym, source_reference);
-                               symbol_reference = type_sym;
-                       } else {
+                       var constructor = (Method) constructor_sym;
+                       if (!(constructor_sym is CreationMethod)) {
                                error = true;
-                               Report.error (source_reference, "`%s' is not a class, struct, or error code", 
type_sym.get_full_name ());
+                               Report.error (source_reference, "`%s' is not a creation method", 
constructor.get_full_name ());
                                return false;
                        }
 
-                       foreach (DataType type_arg in type_args) {
-                               type_reference.add_type_argument (type_arg);
+                       symbol_reference = constructor;
+
+                       // inner expression can also be base access when chaining constructors
+                       unowned MemberAccess? ma = member_name.inner as MemberAccess;
+                       if (ma != null) {
+                               type_args = ma.get_type_arguments ();
                        }
+               }
+
+               if (type_sym is Class) {
+                       type = (TypeSymbol) type_sym;
+                       if (((Class) type).is_error_base) {
+                               type_reference = new ErrorType (null, null, source_reference);
+                       } else {
+                               type_reference = new ObjectType ((Class) type, source_reference);
+                       }
+               } else if (type_sym is Struct) {
+                       type = (TypeSymbol) type_sym;
+                       type_reference = new StructValueType ((Struct) type, source_reference);
+               } else if (type_sym is ErrorCode) {
+                       type = (TypeSymbol) type_sym;
+                       type_reference = new ErrorType ((ErrorDomain) type_sym.parent_symbol, (ErrorCode) 
type_sym, source_reference);
+                       symbol_reference = type_sym;
                } else {
-                       type = type_reference.type_symbol;
+                       error = true;
+                       Report.error (source_reference, "`%s' is not a class, struct, or error code", 
type_sym.get_full_name ());
+                       return false;
+               }
+
+               foreach (DataType type_arg in type_args) {
+                       type_reference.add_type_argument (type_arg);
                }
 
                value_type = type_reference.copy ();


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]