vala r2435 - in trunk: . vala
- From: juergbi svn gnome org
- To: svn-commits-list gnome org
- Subject: vala r2435 - in trunk: . vala
- Date: Thu, 12 Feb 2009 15:29:10 +0000 (UTC)
Author: juergbi
Date: Thu Feb 12 15:29:10 2009
New Revision: 2435
URL: http://svn.gnome.org/viewvc/vala?rev=2435&view=rev
Log:
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
Modified:
trunk/ChangeLog
trunk/THANKS
trunk/vala/valamember.vala
trunk/vala/valaparser.vala
Modified: trunk/THANKS
==============================================================================
--- trunk/THANKS (original)
+++ trunk/THANKS Thu Feb 12 15:29:10 2009
@@ -69,6 +69,7 @@
Roberto Majadas
Roland Hostettler
Ross Burton
+Ryan Lortie
Sam Liddicott
Samuel Cormier-Iijima
Sebastian DrÃge
Modified: trunk/vala/valamember.vala
==============================================================================
--- trunk/vala/valamember.vala (original)
+++ trunk/vala/valamember.vala Thu Feb 12 15:29:10 2009
@@ -29,6 +29,12 @@
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);
}
Modified: trunk/vala/valaparser.vala
==============================================================================
--- trunk/vala/valaparser.vala (original)
+++ trunk/vala/valaparser.vala Thu Feb 12 15:29:10 2009
@@ -54,9 +54,10 @@
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 @@
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 @@
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 @@
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 @@
} 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 @@
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 @@
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 @@
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 @@
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 @@
next ();
flags |= ModifierFlags.INLINE;
break;
+ case TokenType.NEW:
+ next ();
+ flags |= ModifierFlags.NEW;
+ break;
case TokenType.OVERRIDE:
next ();
flags |= ModifierFlags.OVERRIDE;
@@ -2742,6 +2769,9 @@
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 @@
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 @@
case TokenType.INTERFACE:
case TokenType.INTERNAL:
case TokenType.NAMESPACE:
+ case TokenType.NEW:
case TokenType.OVERRIDE:
case TokenType.PRIVATE:
case TokenType.PROTECTED:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]