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 () {
case TokenType.INTERFACE:
case TokenType.INTERNAL:
case TokenType.NAMESPACE:
+ case TokenType.NEW:
case TokenType.OVERRIDE:
case TokenType.PRIVATE:
case TokenType.PROTECTED:
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;
}
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 ();
}
} 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) {
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;
}
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 {
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;
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;
next ();
flags |= ModifierFlags.INLINE;
break;
+ case TokenType.NEW:
+ next ();
+ flags |= ModifierFlags.NEW;
+ break;
case TokenType.OVERRIDE:
next ();
flags |= ModifierFlags.OVERRIDE;
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));
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 ();
case TokenType.INTERFACE:
case TokenType.INTERNAL:
case TokenType.NAMESPACE:
+ case TokenType.NEW:
case TokenType.OVERRIDE:
case TokenType.PRIVATE:
case TokenType.PROTECTED: