[vala/staging] vala: Refactor UnresolvedSymbol/Type constructors



commit a7012f089b07baa8b44554cb36032dbda173e321
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Thu Apr 15 16:49:14 2021 +0200

    vala: Refactor UnresolvedSymbol/Type constructors

 vala/valaparser.vala           |  2 +-
 vala/valaunresolvedsymbol.vala | 17 ++++++-----------
 vala/valaunresolvedtype.vala   | 20 ++++++--------------
 3 files changed, 13 insertions(+), 26 deletions(-)
---
diff --git a/vala/valaparser.vala b/vala/valaparser.vala
index 4cbe72358..bad086982 100644
--- a/vala/valaparser.vala
+++ b/vala/valaparser.vala
@@ -982,7 +982,7 @@ public class Vala.Parser : CodeVisitor {
                }
 
                var member = parse_member_name ();
-               DataType element_type = UnresolvedType.new_from_expression (member);
+               DataType element_type = new UnresolvedType.from_expression (member);
                bool is_pointer_type = false;
                while (accept (TokenType.STAR)) {
                        element_type = new PointerType (element_type, get_src (begin));
diff --git a/vala/valaunresolvedsymbol.vala b/vala/valaunresolvedsymbol.vala
index 5e4791d44..ff77977cf 100644
--- a/vala/valaunresolvedsymbol.vala
+++ b/vala/valaunresolvedsymbol.vala
@@ -39,18 +39,13 @@ public class Vala.UnresolvedSymbol : Symbol {
                this.inner = inner;
        }
 
-       public static UnresolvedSymbol? new_from_expression (Expression expr) {
-               unowned MemberAccess? ma = expr as MemberAccess;
-               if (ma != null) {
-                       if (ma.inner != null) {
-                               return new UnresolvedSymbol (new_from_expression (ma.inner), ma.member_name, 
ma.source_reference);
-                       } else {
-                               return new UnresolvedSymbol (null, ma.member_name, ma.source_reference);
-                       }
+       public UnresolvedSymbol.from_expression (MemberAccess ma) {
+               base (ma.member_name, ma.source_reference);
+               if (ma.inner is MemberAccess) {
+                       inner = new UnresolvedSymbol.from_expression ((MemberAccess) ma.inner);
+               } else if (ma.inner != null) {
+                       Report.error (ma.source_reference, "Type reference must be simple name or member 
access expression");
                }
-
-               Report.error (expr.source_reference, "Type reference must be simple name or member access 
expression");
-               return null;
        }
 
        public override string to_string () {
diff --git a/vala/valaunresolvedtype.vala b/vala/valaunresolvedtype.vala
index 2185f1de2..8f2f47585 100644
--- a/vala/valaunresolvedtype.vala
+++ b/vala/valaunresolvedtype.vala
@@ -53,22 +53,14 @@ public class Vala.UnresolvedType : DataType {
         * @param expr   member access expression
         * @return       newly created type reference
         */
-       public static UnresolvedType? new_from_expression (Expression expr) {
-               var sym = UnresolvedSymbol.new_from_expression (expr);
+       public UnresolvedType.from_expression (MemberAccess expr) {
+               unresolved_symbol = new UnresolvedSymbol.from_expression (expr);
+               source_reference = expr.source_reference;
+               value_owned = true;
 
-               if (sym != null) {
-                       var type_ref = new UnresolvedType.from_symbol (sym, expr.source_reference);
-                       type_ref.value_owned = true;
-
-                       var ma = (MemberAccess) expr;
-                       foreach (DataType arg in ma.get_type_arguments ()) {
-                               type_ref.add_type_argument (arg);
-                       }
-
-                       return type_ref;
+               foreach (DataType arg in expr.get_type_arguments ()) {
+                       add_type_argument (arg);
                }
-
-               return null;
        }
 
        public override DataType copy () {


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