[svn] r6226: nemerle/trunk/ncc: generation/HierarchyEmitter.n hierarchy/ClassMembers.n typing/TypedTree.n

malekith svnadmin at nemerle.org
Thu May 4 23:03:05 CEST 2006


Log:
Changes by Wojtek Walewski: allow specifing modifiers for parameters and return types (modopt and modreq). For non-nullness.

Author: malekith
Date: Thu May  4 23:03:04 2006
New Revision: 6226

Modified:
   nemerle/trunk/ncc/generation/HierarchyEmitter.n
   nemerle/trunk/ncc/hierarchy/ClassMembers.n
   nemerle/trunk/ncc/typing/TypedTree.n

Modified: nemerle/trunk/ncc/generation/HierarchyEmitter.n
==============================================================================
--- nemerle/trunk/ncc/generation/HierarchyEmitter.n	(original)
+++ nemerle/trunk/ncc/generation/HierarchyEmitter.n	Thu May  4 23:03:04 2006
@@ -860,8 +860,7 @@
         method_builder = AttributeCompiler.CheckPInvoking (this, tb, attrs, parm_types_array);
       
         if (method_builder == null)
-          method_builder = tb.DefineMethod (Name, attrs, ReturnType.SystemType,
-                                            parm_types_array);
+          method_builder = tb.DefineMethod (Name, attrs);
         else
           pinvoke = true;
       }
@@ -875,12 +874,26 @@
           x.SetGenericBuilder (generic_parms [idx]); 
         });
         foreach (gp in fun_header.typarms) gp.UpdateConstraints ();
+      }
 
-        method_builder.SetReturnType (ReturnType.SystemType);
+      mutable paramTypeRequiredModifiers = [];
+      mutable paramTypeOptionalModifiers = [];
     
-        method_builder.SetParameters (param_types ());
+      foreach (p in fun_header.parms)
+      {
+        paramTypeRequiredModifiers ::= p.required_modifiers.ToArray ();
+        paramTypeOptionalModifiers ::= p.optional_modifiers.ToArray ();
       }
 
+      method_builder.SetSignature (
+        fun_header.ret_type.SystemType,
+        fun_header.ret_type_required_modifiers.ToArray (),
+        fun_header.ret_type_optional_modifiers.ToArray (),
+        param_types (),
+        paramTypeRequiredModifiers.Reverse ().ToArray (),
+        paramTypeOptionalModifiers.Reverse ().ToArray ());
+
+
       /* add the runtime modifiers for delegate methods */
       when (DeclaringType.IsDelegate) {
         assert (!pinvoke);
@@ -1017,7 +1030,12 @@
       when (Name != "value__")
         attrs &= ~FieldAttributes.RTSpecialName;
 
-      field_builder = tb.DefineField (Name, GetMemType ().SystemType, attrs);
+      field_builder = tb.DefineField (
+        Name,
+        GetMemType ().SystemType,
+        required_modifiers.ToArray (),
+        optional_modifiers.ToArray (),
+        attrs);
 
       when (IsLiteral)
         field_builder.SetConstant (const_value.AsObject ());

Modified: nemerle/trunk/ncc/hierarchy/ClassMembers.n
==============================================================================
--- nemerle/trunk/ncc/hierarchy/ClassMembers.n	(original)
+++ nemerle/trunk/ncc/hierarchy/ClassMembers.n	Thu May  4 23:03:04 2006
@@ -394,6 +394,9 @@
   public mutable const_value : Literal;
   mutable has_been_assigned = false;
   
+  public mutable required_modifiers : list[System.Type] = [];
+  public mutable optional_modifiers : list[System.Type] = [];
+  
   public this (par : TypeBuilder, f : PT.ClassMember.Field) {
     base (par, f);
     

Modified: nemerle/trunk/ncc/typing/TypedTree.n
==============================================================================
--- nemerle/trunk/ncc/typing/TypedTree.n	(original)
+++ nemerle/trunk/ncc/typing/TypedTree.n	Thu May  4 23:03:04 2006
@@ -47,8 +47,10 @@
     public name : string;
     public color : int;
     public mutable ty : TyVar;
-    public modifiers : Modifiers;
     public kind : ParmKind;
+    public modifiers : Modifiers;
+    public mutable required_modifiers : list[System.Type] = [];
+    public mutable optional_modifiers : list[System.Type] = [];
 
     public mutable default_value : option [Literal] = None ();
     // for local functions only
@@ -216,6 +218,8 @@
     public mutable parms : list [Fun_parm];
     public mutable typarms : list [StaticTyVar];
     public tenv : TyVarEnv;
+    public mutable ret_type_required_modifiers : list[System.Type] = [];
+    public mutable ret_type_optional_modifiers : list[System.Type] = [];
 
     public mutable usage : FunctionUsage;
     public mutable body : FunBody;



More information about the svn mailing list