[vala] girparser: improve support for changing symbol types away from instance



commit b9a36a992a5a9474b0b27aec834837981b6edf38
Author: Evan Nemerson <evan nemerson com>
Date:   Sun May 25 19:40:55 2014 -0700

    girparser: improve support for changing symbol types away from instance
    
    This makes it possible to move a symbol from an instance method of one
    type to a constructor of another, or to a static method.

 vala/valagirparser.vala |   11 ++++++++---
 1 files changed, 8 insertions(+), 3 deletions(-)
---
diff --git a/vala/valagirparser.vala b/vala/valagirparser.vala
index d60dffb..f35f1ec 100644
--- a/vala/valagirparser.vala
+++ b/vala/valagirparser.vala
@@ -2246,7 +2246,11 @@ public class Vala.GirParser : CodeVisitor {
                closure_idx = -1;
                destroy_idx = -1;
 
-               start_element ("parameter");
+               string element_type = reader.name;
+               if (current_token != MarkupTokenType.START_ELEMENT || (element_type != "parameter" && 
element_type != "instance-parameter")) {
+                       Report.error (get_current_src (), "expected start element of `parameter' or 
`instance-parameter'");
+               }
+               start_element (element_type);
                string name = reader.get_attribute ("name");
                if (name == null) {
                        name = default_name;
@@ -2337,7 +2341,7 @@ public class Vala.GirParser : CodeVisitor {
                                param.initializer = null;
                        }
                }
-               end_element ("parameter");
+               end_element (element_type);
                return param;
        }
 
@@ -2972,7 +2976,8 @@ public class Vala.GirParser : CodeVisitor {
                        next ();
 
                        while (current_token == MarkupTokenType.START_ELEMENT) {
-                               if (reader.name == "instance-parameter") {
+                               if (reader.name == "instance-parameter" &&
+                                   !(symbol_type == "function" || symbol_type == "constructor")) {
                                        skip_element ();
                                        continue;
                                }


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