[svn] r7077: nemerle/trunk/ncc: testsuite/positive/casts.n
typing/Typer.n
nazgul
svnadmin at nemerle.org
Sun Dec 10 20:57:42 CET 2006
Log:
Always lookup conversion operators when :> is used
Author: nazgul
Date: Sun Dec 10 20:57:39 2006
New Revision: 7077
Modified:
nemerle/trunk/ncc/testsuite/positive/casts.n
nemerle/trunk/ncc/typing/Typer.n
Modified: nemerle/trunk/ncc/testsuite/positive/casts.n
==============================================================================
--- nemerle/trunk/ncc/testsuite/positive/casts.n (original)
+++ nemerle/trunk/ncc/testsuite/positive/casts.n Sun Dec 10 20:57:39 2006
@@ -27,8 +27,24 @@
}
}
+namespace Bug806 {
+ class Op
+ {}
+
+ class ExtOp: Op {
+ public static @:>(_: Op): ExtOp { ExtOp() }
+ }
+
+ module Check {
+ public Run () : void {
+ _ = Op() :> ExtOp
+ }
+ }
+}
+
module Test {
Main() : int {
+ Bug806.Check.Run ();
ExplicitOperator.blah.Run ();
}
}
Modified: nemerle/trunk/ncc/typing/Typer.n
==============================================================================
--- nemerle/trunk/ncc/typing/Typer.n (original)
+++ nemerle/trunk/ncc/typing/Typer.n Sun Dec 10 20:57:39 2006
@@ -3102,16 +3102,6 @@
| None => expr.Type
}
- if (to.TryRequire (from)) {
- to.ForceRequire (from);
- TExpr.TypeConversion (expr, to, ConversionKind.DownCast ());
- } else if (from.TryRequire (to)) {
- from.ForceRequire (to);
- Message.Warning (10001, $"there is no check needed to cast $from to $to");
- Message.HintOnce (10001, "consider using : instead of :>");
-
- TExpr.TypeConversion (expr, to, ConversionKind.UpCast ())
- } else {
def get_convertion_operators (t) {
$[(t, x) | x in
LookupStaticMethod (t, "op_Explicit") +
@@ -3166,7 +3156,18 @@
ConversionKind.MethodCall (sr))
}
| [] =>
- if ( (is_strange_type (from) || is_strange_type (to))
+ if (to.TryRequire (from)) {
+ to.ForceRequire (from);
+ TExpr.TypeConversion (expr, to, ConversionKind.DownCast ());
+ }
+ else if (from.TryRequire (to)) {
+ from.ForceRequire (to);
+ Message.Warning (10001, $"there is no check needed to cast $from to $to");
+ Message.HintOnce (10001, "consider using : instead of :>");
+
+ TExpr.TypeConversion (expr, to, ConversionKind.UpCast ())
+ }
+ else if ( (is_strange_type (from) || is_strange_type (to))
&& !is_void (from) && !is_void (to) ) {
TExpr.TypeConversion (expr, to, ConversionKind.DownCast ())
} else if (is_enum (from) && is_enum (to)) {
@@ -3186,7 +3187,6 @@
TExpr.Error ()
}
}
- }
#endregion
More information about the svn
mailing list