[svn] r6493: nemerle/trunk/ncc: external/LibrariesLoader.n typing/TypedTree.n typing/Typer-CallTyper.n

dragonfox svnadmin at nemerle.org
Tue Aug 8 09:42:17 CEST 2006


Log:
fix for optional parameters (bug 731)

Author: dragonfox
Date: Tue Aug  8 09:42:10 2006
New Revision: 6493

Modified:
   nemerle/trunk/ncc/external/LibrariesLoader.n
   nemerle/trunk/ncc/typing/TypedTree.n
   nemerle/trunk/ncc/typing/Typer-CallTyper.n

Modified: nemerle/trunk/ncc/external/LibrariesLoader.n
==============================================================================
--- nemerle/trunk/ncc/external/LibrariesLoader.n	(original)
+++ nemerle/trunk/ncc/external/LibrariesLoader.n	Tue Aug  8 09:42:10 2006
@@ -1882,7 +1882,9 @@
             modifiers = Modifiers.Empty // FIXME?
           );
           def deflt = p.DefaultValue;
-          when (deflt != System.DBNull.Value && deflt != System.Reflection.Missing.Value)
+          if (p.IsOptional)
+            fp.is_optional = true
+          else when (deflt != System.DBNull.Value)
             fp.default_value = Some (Literal.FromObject (deflt));
           fp
         };

Modified: nemerle/trunk/ncc/typing/TypedTree.n
==============================================================================
--- nemerle/trunk/ncc/typing/TypedTree.n	(original)
+++ nemerle/trunk/ncc/typing/TypedTree.n	Tue Aug  8 09:42:10 2006
@@ -52,6 +52,7 @@
     public mutable required_modifiers : list[System.Type] = [];
     public mutable optional_modifiers : list[System.Type] = [];
 
+    public mutable is_optional : bool = false;
     public mutable default_value : option [Literal] = None ();
     // for local functions only
     mutable local_default_value : option [TExpr] = None ();
@@ -101,7 +102,7 @@
     public HasDefaultValue : bool
     {
       get {
-        default_value.IsSome || local_default_value.IsSome
+        is_optional || default_value.IsSome || local_default_value.IsSome
       }
     }
 

Modified: nemerle/trunk/ncc/typing/Typer-CallTyper.n
==============================================================================
--- nemerle/trunk/ncc/typing/Typer-CallTyper.n	(original)
+++ nemerle/trunk/ncc/typing/Typer-CallTyper.n	Tue Aug  8 09:42:10 2006
@@ -548,7 +548,14 @@
               reorder_parms (rest_of_names,
                              Option.UnSome (seen_named_parms.Get (name)) :: acc)
             else if (use_defaults_for.Contains (name)) {
-              def expr = fp.DefaultValueAsTExpr ();
+              def expr =
+                if (fp.is_optional) {
+                  if (fp.ty.Fix ().Equals (InternalType.Object))
+                    typer.TypeExpr (<[ System.Reflection.Missing.Value ]>)
+                  else
+                    TExpr.DefaultValue (FreshTyVar ())
+                } else
+                  fp.DefaultValueAsTExpr ();
               reorder_parms (rest_of_names, Parm (expr) :: acc)
             } else
               Util.ice ("reorder_named_parms: reorder")



More information about the svn mailing list