[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