[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