[svn] r5794: nemerle/trunk/ncc: hierarchy/TypeBuilder.n
parsing/MainParser.n testsuite/positive/assert.n
nazgul
svnadmin at nemerle.org
Mon Oct 3 19:32:16 CEST 2005
Log:
Fix processing property accessor attibutes in search for macros
Author: nazgul
Date: Mon Oct 3 19:32:11 2005
New Revision: 5794
Modified:
nemerle/trunk/ncc/hierarchy/TypeBuilder.n
nemerle/trunk/ncc/parsing/MainParser.n
nemerle/trunk/ncc/testsuite/positive/assert.n
Modified: nemerle/trunk/ncc/hierarchy/TypeBuilder.n
==============================================================================
--- nemerle/trunk/ncc/hierarchy/TypeBuilder.n (original)
+++ nemerle/trunk/ncc/hierarchy/TypeBuilder.n Mon Oct 3 19:32:11 2005
@@ -2220,7 +2220,7 @@
// we have to do the assignment here, in case macro has added a new
// custom attribute
mods.custom_attrs =
- List.Filter (mods.custom_attrs, fun (expr) {
+ mods.custom_attrs.Filter (fun (expr) {
match (MacroRegistry.lookup_macro (this.GlobalEnv, expr, suff)) {
| None => true
| Some =>
@@ -2252,31 +2252,37 @@
};
def process_member (mem, stage_suff) {
+ def syntax_tb = PT.SyntaxElement.TypeBuilder (this);
+ def syntax_mem = PT.SyntaxElement.ClassMember (mem);
+ def parms = [syntax_tb, syntax_mem];
+
match (mem) {
| PT.ClassMember.Field =>
- process_attributes ([PT.SyntaxElement.TypeBuilder (this), PT.SyntaxElement.ClassMember (mem)],
- ":field" + stage_suff, mem.modifiers, null)
+ process_attributes (parms, ":field" + stage_suff, mem.modifiers, null)
| (PT.ClassMember.Function) as f =>
- process_attributes ([PT.SyntaxElement.TypeBuilder (this), PT.SyntaxElement.ClassMember (mem)],
- ":method" + stage_suff, mem.modifiers, null);
+ process_attributes (parms, ":method" + stage_suff, mem.modifiers, null);
foreach (p : PT.Fun_parm in f.header.parms)
- process_attributes ([PT.SyntaxElement.TypeBuilder (this),
- PT.SyntaxElement.ClassMember (mem),
- PT.SyntaxElement.Parameter (p)],
+ process_attributes ([syntax_tb, syntax_mem, PT.SyntaxElement.Parameter (p)],
":param" + stage_suff, p.modifiers, null);
| PT.ClassMember.EnumOption
| PT.ClassMember.TypeDeclaration => ()
- | PT.ClassMember.Property =>
- process_attributes ([PT.SyntaxElement.TypeBuilder (this), PT.SyntaxElement.ClassMember (mem)],
- ":property" + stage_suff, mem.modifiers, null)
+ | PT.ClassMember.Property (_, _, _, getr, setr) =>
+ process_attributes (parms, ":property" + stage_suff, mem.modifiers, null);
+ match (getr) {
+ | Some (m) => process_member (m, stage_suff);
+ | _ => ()
+ }
+ match (setr) {
+ | Some (m) => process_member (m, stage_suff);
+ | _ => ()
+ }
| PT.ClassMember.Event =>
- process_attributes ([PT.SyntaxElement.TypeBuilder (this), PT.SyntaxElement.ClassMember (mem)],
- ":event" + stage_suff, mem.modifiers, null)
+ process_attributes (parms, ":event" + stage_suff, mem.modifiers, null)
}
};
Modified: nemerle/trunk/ncc/parsing/MainParser.n
==============================================================================
--- nemerle/trunk/ncc/parsing/MainParser.n (original)
+++ nemerle/trunk/ncc/parsing/MainParser.n Mon Oct 3 19:32:11 2005
@@ -830,6 +830,7 @@
def method_atts = Modifiers (mymods, []);
take_attributes_out (ref mycustoms, System.AttributeTargets.Method, true, method_atts);
+ parse_top_extensions (method_atts, MacroTargets.Method);
def (kind, bd) = parse_accessor_body ([], impl);
def name = Splicable.Name (mkname ("get_" + plain_name));
@@ -842,9 +843,11 @@
def method_atts = Modifiers (mymods, []);
take_attributes_out (ref mycustoms, System.AttributeTargets.Method, false, method_atts);
+ parse_top_extensions (method_atts, MacroTargets.Method);
def par_atts = Modifiers (NemerleAttributes.None, []);
take_attributes_out (ref mycustoms, System.AttributeTargets.Parameter, true, par_atts);
+
def val_n = Splicable.Name (mkname ("value"));
def setter_parms = parms + [Fun_parm (val_n, ret_type, par_atts)];
@@ -934,6 +937,7 @@
def method_atts = Modifiers (mymods, []);
take_attributes_out (ref mycustoms, System.AttributeTargets.Method, false, method_atts);
+ parse_top_extensions (method_atts, MacroTargets.Method);
def par_atts = Modifiers (NemerleAttributes.None, []);
take_attributes_out (ref mycustoms, System.AttributeTargets.Parameter, true, par_atts);
Modified: nemerle/trunk/ncc/testsuite/positive/assert.n
==============================================================================
--- nemerle/trunk/ncc/testsuite/positive/assert.n (original)
+++ nemerle/trunk/ncc/testsuite/positive/assert.n Mon Oct 3 19:32:11 2005
@@ -50,6 +50,19 @@
juu1 (requires (value != null) o : object) : void { }
+ CheckedProp : int {
+ get
+ ensures value > 0
+ {
+ 1
+ }
+
+ set
+ requires value < 10 otherwise throw System.Exception ("a")
+ {
+ _ = value;
+ }
+ }
myassert () : void {
printf ("Testing the assertions...\n");
More information about the svn
mailing list