|
@@ -2,16 +2,32 @@ package unit;
|
|
|
|
|
|
import utest.Assert;
|
|
|
|
|
|
+private class MyNotString {
|
|
|
+ var s:String;
|
|
|
+
|
|
|
+ public function new(s:String) {
|
|
|
+ this.s = s;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function toUpperCase() {
|
|
|
+ return new MyNotString(s.toUpperCase());
|
|
|
+ }
|
|
|
+
|
|
|
+ public function getString() {
|
|
|
+ return s;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
class TestConstrainedMonomorphs extends Test {
|
|
|
|
|
|
function infer(arg) {
|
|
|
- var s1 = arg.toUpperCase();
|
|
|
- var s:String = arg;
|
|
|
- HelperMacros.typedAs(arg, "foo");
|
|
|
- return s + s1;
|
|
|
+ var s1:MyNotString = arg.toUpperCase();
|
|
|
+ var s:MyNotString = arg;
|
|
|
+ HelperMacros.typedAs(arg, (null : MyNotString));
|
|
|
+ return s.getString() + s1.getString();
|
|
|
}
|
|
|
|
|
|
function testNarrowingInference() {
|
|
|
- eq("fooFOO", infer("foo"));
|
|
|
+ eq("fooFOO", infer(new MyNotString("foo")));
|
|
|
}
|
|
|
}
|