]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Support `new' as member modifier in parser to prepare support for hiding
authorJürg Billeter <j@bitron.ch>
Thu, 12 Feb 2009 15:29:10 +0000 (15:29 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Thu, 12 Feb 2009 15:29:10 +0000 (15:29 +0000)
2009-02-12  Jürg Billeter  <j@bitron.ch>

* vala/valamember.vala:
* vala/valaparser.vala:

Support `new' as member modifier in parser to prepare support for
hiding members, patch by Andreas Brauchli

svn path=/trunk/; revision=2435

ChangeLog
THANKS
vala/valamember.vala
vala/valaparser.vala

index 544612769b846336a8b50952c0681d14f090fa5e..9d28ad23fa52538753a536b9e17c80c7a65ea609 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2009-02-12  Jürg Billeter  <j@bitron.ch>
+
+       * vala/valamember.vala:
+       * vala/valaparser.vala:
+
+       Support `new' as member modifier in parser to prepare support for
+       hiding members, patch by Andreas Brauchli
+
 2009-02-12  Ryan Lortie  <desrt@desrt.ca>
 
        * vala/valamethod.vala:
diff --git a/THANKS b/THANKS
index 09b52dec8058192cd051b528435c7a4502a32103..fa4e61472da2bcaac25f0129dfd6a3081b10d857 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -69,6 +69,7 @@ Rob Taylor
 Roberto Majadas
 Roland Hostettler
 Ross Burton
+Ryan Lortie
 Sam Liddicott
 Samuel Cormier-Iijima
 Sebastian Dröge
index ceb4ceeb2d19ff23bf5039d5d204932d7057867b..7da055f58384de5b3751a7b18776e3e60aa74513 100644 (file)
@@ -29,6 +29,12 @@ using Gee;
 public abstract class Vala.Member : Symbol {
        private Gee.List<string> cheader_filenames = new ArrayList<string> ();
 
+       /**
+        * Specifies whether this method explicitly hides a member of a base
+        * type.
+        */
+       public bool hides { get; set; }
+
        public Member (string? name, SourceReference? source_reference) {
                base (name, source_reference);
        }
index d0514daa3eb64fb51c4bdcf5afcd009d75eb9548..bb785b0a35dae2450700cd7f9b16b4e6cbaa8618 100644 (file)
@@ -54,9 +54,10 @@ public class Vala.Parser : CodeVisitor {
                CLASS = 1 << 1,
                EXTERN = 1 << 2,
                INLINE = 1 << 3,
-               OVERRIDE = 1 << 4,
-               STATIC = 1 << 5,
-               VIRTUAL = 1 << 6
+               NEW = 1 << 4,
+               OVERRIDE = 1 << 5,
+               STATIC = 1 << 6,
+               VIRTUAL = 1 << 7
        }
 
        public Parser () {
@@ -1858,6 +1859,7 @@ public class Vala.Parser : CodeVisitor {
                        case TokenType.INTERFACE:
                        case TokenType.INTERNAL:
                        case TokenType.NAMESPACE:
+                       case TokenType.NEW:
                        case TokenType.OVERRIDE:
                        case TokenType.PRIVATE:
                        case TokenType.PROTECTED:
@@ -2085,6 +2087,9 @@ public class Vala.Parser : CodeVisitor {
                if (ModifierFlags.EXTERN in flags || scanner.source_file.external_package) {
                        c.external = true;
                }
+               if (ModifierFlags.NEW in flags) {
+                       c.hides = true;
+               }
                set_attributes (c, attrs);
                return c;
        }
@@ -2111,6 +2116,9 @@ public class Vala.Parser : CodeVisitor {
                if (ModifierFlags.EXTERN in flags || scanner.source_file.external_package) {
                        f.external = true;
                }
+               if (ModifierFlags.NEW in flags) {
+                       f.hides = true;
+               }
                if (accept (TokenType.ASSIGN)) {
                        f.initializer = parse_expression ();
                }
@@ -2147,6 +2155,9 @@ public class Vala.Parser : CodeVisitor {
                } else if (ModifierFlags.CLASS in flags) {
                        method.binding = MemberBinding.CLASS;
                }
+               if (ModifierFlags.NEW in flags) {
+                       method.hides = true;
+               }
 
                if (method.binding == MemberBinding.INSTANCE) {
                        if (ModifierFlags.ABSTRACT in flags) {
@@ -2243,6 +2254,9 @@ public class Vala.Parser : CodeVisitor {
                if (ModifierFlags.OVERRIDE in flags) {
                        prop.overrides = true;
                }
+               if (ModifierFlags.NEW in flags) {
+                       prop.hides = true;
+               }
                if (ModifierFlags.EXTERN in flags || scanner.source_file.external_package) {
                        prop.external = true;
                }
@@ -2344,6 +2358,9 @@ public class Vala.Parser : CodeVisitor {
                if (ModifierFlags.VIRTUAL in flags) {
                        sig.is_virtual = true;
                }
+               if (ModifierFlags.NEW in flags) {
+                       sig.hides = true;
+               }
                expect (TokenType.OPEN_PARENS);
                if (current () != TokenType.CLOSE_PARENS) {
                        do {
@@ -2360,6 +2377,9 @@ public class Vala.Parser : CodeVisitor {
                var begin = get_location ();
                var flags = parse_member_declaration_modifiers ();
                expect (TokenType.CONSTRUCT);
+               if (ModifierFlags.NEW in flags) {
+                       throw new ParseError.SYNTAX (get_error ("`new' modifier not allowed on constructor"));
+               }
                var c = new Constructor (get_src_com (begin));
                if (ModifierFlags.STATIC in flags) {
                        c.binding = MemberBinding.STATIC;
@@ -2377,6 +2397,9 @@ public class Vala.Parser : CodeVisitor {
                parse_identifier ();
                expect (TokenType.OPEN_PARENS);
                expect (TokenType.CLOSE_PARENS);
+               if (ModifierFlags.NEW in flags) {
+                       throw new ParseError.SYNTAX (get_error ("`new' modifier not allowed on destructor"));
+               }
                var d = new Destructor (get_src_com (begin));
                if (ModifierFlags.STATIC in flags) {
                        d.binding = MemberBinding.STATIC;
@@ -2685,6 +2708,10 @@ public class Vala.Parser : CodeVisitor {
                                next ();
                                flags |= ModifierFlags.INLINE;
                                break;
+                       case TokenType.NEW:
+                               next ();
+                               flags |= ModifierFlags.NEW;
+                               break;
                        case TokenType.OVERRIDE:
                                next ();
                                flags |= ModifierFlags.OVERRIDE;
@@ -2742,6 +2769,9 @@ public class Vala.Parser : CodeVisitor {
                var access = parse_access_modifier ();
                var flags = parse_member_declaration_modifiers ();
                var sym = parse_symbol_name ();
+               if (ModifierFlags.NEW in flags) {
+                       throw new ParseError.SYNTAX (get_error ("`new' modifier not allowed on creation method"));
+               }
                CreationMethod method;
                if (sym.inner == null) {
                        method = new CreationMethod (sym.name, null, get_src_com (begin));
@@ -2782,6 +2812,9 @@ public class Vala.Parser : CodeVisitor {
                var access = parse_access_modifier ();
                var flags = parse_member_declaration_modifiers ();
                expect (TokenType.DELEGATE);
+               if (ModifierFlags.NEW in flags) {
+                       throw new ParseError.SYNTAX (get_error ("`new' modifier not allowed on delegates"));
+               }
                var type = parse_type ();
                var sym = parse_symbol_name ();
                var type_param_list = parse_type_parameter_list ();
@@ -2940,6 +2973,7 @@ public class Vala.Parser : CodeVisitor {
                case TokenType.INTERFACE:
                case TokenType.INTERNAL:
                case TokenType.NAMESPACE:
+               case TokenType.NEW:
                case TokenType.OVERRIDE:
                case TokenType.PRIVATE:
                case TokenType.PROTECTED: