mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 01:30:32 +00:00
Insert implicit downcasts for simple assignments.
Notes on test changes: - This revealed runtime failures in some tests in pkg/front_end/testcases/inference. Since these tests were never meant to exercise runtime behavior in the first place, I just changed them so that main() does nothing. - This revealed runtime failures in some tests in tests/language_2. These tests began failing because they used "var" for a fields and then later assigned a value to the field that was incompatible with the inferred type. It looks like the intent was for these fields to have type "dynamic", so I changed the tests accordingly. Change-Id: I0ddb2063427b52b5e4be1884fa333e25be4bf4f3 Reviewed-on: https://dart-review.googlesource.com/16881 Commit-Queue: Paul Berry <paulberry@google.com> Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
parent
5f42a89f3f
commit
6f9d6965fe
|
@ -457,15 +457,19 @@ abstract class ShadowComplexAssignment extends ShadowSyntheticExpression {
|
|||
_storeLetType(inferrer, replacedCombiner, combinedType);
|
||||
} else {
|
||||
combinedType = inferrer.inferExpression(rhs, writeContext, true);
|
||||
_storeLetType(inferrer, rhs, combinedType);
|
||||
}
|
||||
if (write != null) {
|
||||
if (this is ShadowIndexAssign) {
|
||||
_storeLetType(inferrer, write, const VoidType());
|
||||
var replacedRhs =
|
||||
inferrer.checkAssignability(writeContext, combinedType, rhs);
|
||||
if (replacedRhs == null) {
|
||||
_storeLetType(inferrer, rhs, combinedType);
|
||||
} else {
|
||||
_storeLetType(inferrer, write, combinedType);
|
||||
_storeLetType(inferrer, replacedRhs, writeContext);
|
||||
}
|
||||
}
|
||||
if (this is ShadowIndexAssign) {
|
||||
_storeLetType(inferrer, write, const VoidType());
|
||||
} else {
|
||||
_storeLetType(inferrer, write, combinedType);
|
||||
}
|
||||
return isPostIncDec ? readType : combinedType;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -330,6 +330,32 @@ abstract class TypeInferrerImpl extends TypeInferrer {
|
|||
/// inference.
|
||||
TypePromoter get typePromoter;
|
||||
|
||||
/// Checks whether [actualType] can be assigned to [expectedType], and inserts
|
||||
/// an implicit downcast if appropriate.
|
||||
Expression checkAssignability(
|
||||
DartType expectedType, DartType actualType, Expression expression) {
|
||||
if (expectedType == null ||
|
||||
typeSchemaEnvironment.isSubtypeOf(actualType, expectedType)) {
|
||||
// Types are compatible.
|
||||
return null;
|
||||
} else {
|
||||
if (!typeSchemaEnvironment.isSubtypeOf(expectedType, actualType)) {
|
||||
// Error: not assignable.
|
||||
// TODO(paulberry): report the error.
|
||||
}
|
||||
// Insert an implicit downcast.
|
||||
if (strongMode) {
|
||||
var parent = expression.parent;
|
||||
var typeCheck = new ShadowAsExpression(expression, expectedType)
|
||||
..isTypeError = true;
|
||||
parent.replaceChild(expression, typeCheck);
|
||||
return typeCheck;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Finds a member of [receiverType] called [name], and if it is found,
|
||||
/// reports it through instrumentation using [fileOffset].
|
||||
///
|
||||
|
|
|
@ -9,7 +9,7 @@ static method main() → dynamic {
|
|||
return null;
|
||||
};
|
||||
core::String y = f.call(42);
|
||||
f = (core::Object x) → core::String => "hello";
|
||||
f = (core::Object x) → core::String => "hello" as{TypeError} (core::Object) → core::Null;
|
||||
self::foo((core::Object x) → core::Null {
|
||||
return null;
|
||||
});
|
||||
|
|
|
@ -10,7 +10,7 @@ class C<T> {
|
|||
C(this.t);
|
||||
}
|
||||
|
||||
main() {
|
||||
test() {
|
||||
var /*@type=C<int>*/ x = new /*@typeArgs=int*/ C(42);
|
||||
|
||||
num y;
|
||||
|
@ -25,3 +25,5 @@ main() {
|
|||
var /*@type=C<dynamic>*/ c_dynamic = new C<dynamic>(42);
|
||||
x. /*@target=C::t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
|
||||
}
|
||||
|
||||
main() {}
|
||||
|
|
|
@ -8,7 +8,7 @@ class C<T extends core::Object> extends core::Object {
|
|||
: self::C::t = t, super core::Object::•()
|
||||
;
|
||||
}
|
||||
static method main() → dynamic {
|
||||
static method test() → dynamic {
|
||||
dynamic x = new self::C::•<dynamic>(42);
|
||||
core::num y;
|
||||
self::C<core::int> c_int = new self::C::•<dynamic>(y);
|
||||
|
@ -17,3 +17,4 @@ static method main() → dynamic {
|
|||
dynamic c_dynamic = new self::C::•<dynamic>(42);
|
||||
x.t = "hello";
|
||||
}
|
||||
static method main() → dynamic {}
|
||||
|
|
|
@ -8,12 +8,13 @@ class C<T extends core::Object> extends core::Object {
|
|||
: self::C::t = t, super core::Object::•()
|
||||
;
|
||||
}
|
||||
static method main() → dynamic {
|
||||
static method test() → dynamic {
|
||||
self::C<core::int> x = new self::C::•<core::int>(42);
|
||||
core::num y;
|
||||
self::C<core::int> c_int = new self::C::•<core::int>(y);
|
||||
self::C<core::num> c_num = new self::C::•<core::num>(123);
|
||||
self::C<core::num> c_num2 = let final self::C<core::num> #t1 = new self::C::•<core::num>(456) in let final dynamic #t2 = #t1.{self::C::t} = 1.0 in #t1;
|
||||
self::C<dynamic> c_dynamic = new self::C::•<dynamic>(42);
|
||||
x.{self::C::t} = "hello";
|
||||
x.{self::C::t} = "hello" as{TypeError} core::int;
|
||||
}
|
||||
static method main() → dynamic {}
|
||||
|
|
|
@ -17,7 +17,9 @@ class C<T> {
|
|||
}
|
||||
}
|
||||
|
||||
main() {
|
||||
test() {
|
||||
var /*@type=C<int>*/ x = new /*@typeArgs=int*/ C(42);
|
||||
x. /*@target=C::t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
|
||||
}
|
||||
|
||||
main() {}
|
||||
|
|
|
@ -13,7 +13,8 @@ class C<T extends core::Object> extends core::Object {
|
|||
return x;
|
||||
}
|
||||
}
|
||||
static method main() → dynamic {
|
||||
static method test() → dynamic {
|
||||
dynamic x = self::C::•<dynamic>(42);
|
||||
x.t = "hello";
|
||||
}
|
||||
static method main() → dynamic {}
|
||||
|
|
|
@ -13,7 +13,8 @@ class C<T extends core::Object> extends core::Object {
|
|||
return x;
|
||||
}
|
||||
}
|
||||
static method main() → dynamic {
|
||||
static method test() → dynamic {
|
||||
self::C<core::int> x = self::C::•<core::int>(42);
|
||||
x.{self::C::t} = "hello";
|
||||
x.{self::C::t} = "hello" as{TypeError} core::int;
|
||||
}
|
||||
static method main() → dynamic {}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
/*@testedFeatures=inference*/
|
||||
library test;
|
||||
|
||||
void main() {
|
||||
void test() {
|
||||
{
|
||||
String f<S>(int x) => null;
|
||||
var /*@type=<S extends Object>(int) -> String*/ v = f;
|
||||
|
@ -69,3 +69,5 @@ void main() {
|
|||
x. /*@target=String::substring*/ substring(3);
|
||||
}
|
||||
}
|
||||
|
||||
main() {}
|
||||
|
|
|
@ -2,7 +2,7 @@ library test;
|
|||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
static method main() → void {
|
||||
static method test() → void {
|
||||
{
|
||||
function f<S extends core::Object>(core::int x) → core::String
|
||||
return null;
|
||||
|
@ -58,3 +58,4 @@ static method main() → void {
|
|||
z = <T extends core::Object>(dynamic x) → dynamic => x.substring(3);
|
||||
}
|
||||
}
|
||||
static method main() → dynamic {}
|
||||
|
|
|
@ -2,15 +2,15 @@ library test;
|
|||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
static method main() → void {
|
||||
static method test() → void {
|
||||
{
|
||||
function f<S extends core::Object>(core::int x) → core::String
|
||||
return null;
|
||||
<S extends core::Object>(core::int) → core::String v = f;
|
||||
v = <T extends core::Object>(core::int x) → core::String => null;
|
||||
v = <T extends core::Object>(core::int x) → core::String => "hello";
|
||||
v = <T extends core::Object>(core::String x) → core::String => "hello";
|
||||
v = <T extends core::Object>(core::int x) → core::int => 3;
|
||||
v = <T extends core::Object>(core::String x) → core::String => "hello" as{TypeError} <S extends core::Object>(core::int) → core::String;
|
||||
v = <T extends core::Object>(core::int x) → core::int => 3 as{TypeError} <S extends core::Object>(core::int) → core::String;
|
||||
v = <T extends core::Object>(core::int x) → core::String {
|
||||
return 3;
|
||||
};
|
||||
|
@ -21,7 +21,7 @@ static method main() → void {
|
|||
<S extends core::Object>(core::int) → core::String v = f;
|
||||
v = <T extends core::Object>(core::int x) → core::String => null;
|
||||
v = <T extends core::Object>(core::int x) → core::String => "hello";
|
||||
v = <T extends core::Object>(core::int x) → core::int => 3;
|
||||
v = <T extends core::Object>(core::int x) → core::int => 3 as{TypeError} <S extends core::Object>(core::int) → core::String;
|
||||
v = <T extends core::Object>(core::int x) → core::String {
|
||||
return 3;
|
||||
};
|
||||
|
@ -35,7 +35,7 @@ static method main() → void {
|
|||
<S extends core::Object>(core::int) → core::List<core::String> v = f;
|
||||
v = <T extends core::Object>(core::int x) → core::List<core::String> => null;
|
||||
v = <T extends core::Object>(core::int x) → core::List<core::String> => <core::String>["hello"];
|
||||
v = <T extends core::Object>(core::String x) → core::List<core::String> => <core::String>["hello"];
|
||||
v = <T extends core::Object>(core::String x) → core::List<core::String> => <core::String>["hello"] as{TypeError} <S extends core::Object>(core::int) → core::List<core::String>;
|
||||
v = <T extends core::Object>(core::int x) → core::List<core::String> => <core::String>[3];
|
||||
v = <T extends core::Object>(core::int x) → core::List<core::String> {
|
||||
return <core::String>[3];
|
||||
|
@ -52,9 +52,10 @@ static method main() → void {
|
|||
x = <T extends core::Object>(core::int x) → core::int => x;
|
||||
x = <T extends core::Object>(core::int x) → core::int => x.{core::num::+}(1);
|
||||
<T extends core::Object>(core::int) → core::String y = int2String;
|
||||
y = <T extends core::Object>(core::int x) → core::int => x;
|
||||
y = <T extends core::Object>(core::int x) → core::int => x as{TypeError} <T extends core::Object>(core::int) → core::String;
|
||||
y = <T extends core::Object>(core::int x) → core::String => x.substring(3);
|
||||
<T extends core::Object>(core::String) → core::String z = string2String;
|
||||
z = <T extends core::Object>(core::String x) → core::String => x.{core::String::substring}(3);
|
||||
}
|
||||
}
|
||||
static method main() → dynamic {}
|
||||
|
|
|
@ -6,12 +6,12 @@ static method test() → void {
|
|||
core::List<core::int> o;
|
||||
core::int y = o.{core::Iterable::fold}<core::int>(0, (core::int x, core::int y) → core::int => x.{core::num::+}(y));
|
||||
dynamic z = o.{core::Iterable::fold}<dynamic>(0, (dynamic x, core::int y) → dynamic => x.+(y));
|
||||
y = z;
|
||||
y = z as{TypeError} core::int;
|
||||
}
|
||||
static method functionExpressionInvocation() → void {
|
||||
core::List<core::int> o;
|
||||
core::int y = o.{core::Iterable::fold}.call<core::int>(0, (core::int x, core::int y) → core::int => x.{core::num::+}(y));
|
||||
dynamic z = o.{core::Iterable::fold}.call<dynamic>(0, (dynamic x, core::int y) → dynamic => x.+(y));
|
||||
y = z;
|
||||
y = z as{TypeError} core::int;
|
||||
}
|
||||
static method main() → dynamic {}
|
||||
|
|
|
@ -9,7 +9,7 @@ class Test1 extends core::Object {
|
|||
;
|
||||
method test() → void {
|
||||
core::int v1 = this.{self::Test1::t} = self::getInt();
|
||||
core::num v2 = this.{self::Test1::t} = self::getNum();
|
||||
core::num v2 = this.{self::Test1::t} = self::getNum() as{TypeError} core::int;
|
||||
core::int v4 = let final core::int #t1 = this.{self::Test1::t} in #t1.{core::num::==}(null) ?{core::int} this.{self::Test1::t} = self::getInt() : #t1;
|
||||
core::num v5 = let final core::int #t2 = this.{self::Test1::t} in #t2.{core::num::==}(null) ?{core::num} this.{self::Test1::t} = self::getNum() : #t2;
|
||||
core::int v7 = this.{self::Test1::t} = this.{self::Test1::t}.{core::num::+}(self::getInt());
|
||||
|
@ -43,7 +43,7 @@ class Test3 extends core::Object {
|
|||
: super core::Object::•()
|
||||
;
|
||||
method test3() → void {
|
||||
core::num v2 = this.{self::Test3::t} = self::getNum();
|
||||
core::num v2 = this.{self::Test3::t} = self::getNum() as{TypeError} core::double;
|
||||
core::double v3 = this.{self::Test3::t} = self::getDouble();
|
||||
core::num v5 = let final core::double #t10 = this.{self::Test3::t} in #t10.{core::num::==}(null) ?{core::num} this.{self::Test3::t} = self::getNum() : #t10;
|
||||
core::double v6 = let final core::double #t11 = this.{self::Test3::t} in #t11.{core::num::==}(null) ?{core::double} this.{self::Test3::t} = self::getDouble() : #t11;
|
||||
|
|
|
@ -10,7 +10,7 @@ static method getDouble() → core::double
|
|||
return 0.0;
|
||||
static method test1(core::int t) → void {
|
||||
core::int v1 = t = self::getInt();
|
||||
core::num v2 = t = self::getNum();
|
||||
core::num v2 = t = self::getNum() as{TypeError} core::int;
|
||||
core::int v4 = let final core::int #t1 = t in #t1.{core::num::==}(null) ?{core::int} t = self::getInt() : #t1;
|
||||
core::num v5 = let final core::int #t2 = t in #t2.{core::num::==}(null) ?{core::num} t = self::getNum() : #t2;
|
||||
core::int v7 = t = t.{core::num::+}(self::getInt());
|
||||
|
@ -32,7 +32,7 @@ static method test2(core::num t) → void {
|
|||
core::num v11 = let final core::num #t8 = t in let final core::num #t9 = t = #t8.{core::num::+}(1) in #t8;
|
||||
}
|
||||
static method test3(core::double t) → void {
|
||||
core::num v2 = t = self::getNum();
|
||||
core::num v2 = t = self::getNum() as{TypeError} core::double;
|
||||
core::double v3 = t = self::getDouble();
|
||||
core::num v5 = let final core::double #t10 = t in #t10.{core::num::==}(null) ?{core::num} t = self::getNum() : #t10;
|
||||
core::double v6 = let final core::double #t11 = t in #t11.{core::num::==}(null) ?{core::double} t = self::getDouble() : #t11;
|
||||
|
|
|
@ -9,7 +9,7 @@ class Test1 extends core::Object {
|
|||
;
|
||||
static method test(self::Test1 t) → void {
|
||||
core::int v1 = let final self::Test1 #t1 = t in #t1.==(null) ?{core::int} null : #t1.{self::Test1::prop} = self::getInt();
|
||||
core::num v2 = let final self::Test1 #t2 = t in #t2.==(null) ?{core::num} null : #t2.{self::Test1::prop} = self::getNum();
|
||||
core::num v2 = let final self::Test1 #t2 = t in #t2.==(null) ?{core::num} null : #t2.{self::Test1::prop} = self::getNum() as{TypeError} core::int;
|
||||
core::int v4 = let final self::Test1 #t3 = t in #t3.==(null) ?{core::int} null : let final core::int #t4 = #t3.{self::Test1::prop} in #t4.{core::num::==}(null) ?{core::int} #t3.{self::Test1::prop} = self::getInt() : #t4;
|
||||
core::num v5 = let final self::Test1 #t5 = t in #t5.==(null) ?{core::num} null : let final core::int #t6 = #t5.{self::Test1::prop} in #t6.{core::num::==}(null) ?{core::num} #t5.{self::Test1::prop} = self::getNum() : #t6;
|
||||
core::int v7 = let final self::Test1 #t7 = t in #t7.==(null) ?{core::int} null : #t7.{self::Test1::prop} = #t7.{self::Test1::prop}.{core::num::+}(self::getInt());
|
||||
|
@ -43,7 +43,7 @@ class Test3 extends core::Object {
|
|||
: super core::Object::•()
|
||||
;
|
||||
static method test3(self::Test3 t) → void {
|
||||
core::num v2 = let final self::Test3 #t29 = t in #t29.==(null) ?{core::num} null : #t29.{self::Test3::prop} = self::getNum();
|
||||
core::num v2 = let final self::Test3 #t29 = t in #t29.==(null) ?{core::num} null : #t29.{self::Test3::prop} = self::getNum() as{TypeError} core::double;
|
||||
core::double v3 = let final self::Test3 #t30 = t in #t30.==(null) ?{core::double} null : #t30.{self::Test3::prop} = self::getDouble();
|
||||
core::num v5 = let final self::Test3 #t31 = t in #t31.==(null) ?{core::num} null : let final core::double #t32 = #t31.{self::Test3::prop} in #t32.{core::num::==}(null) ?{core::num} #t31.{self::Test3::prop} = self::getNum() : #t32;
|
||||
core::double v6 = let final self::Test3 #t33 = t in #t33.==(null) ?{core::double} null : let final core::double #t34 = #t33.{self::Test3::prop} in #t34.{core::num::==}(null) ?{core::double} #t33.{self::Test3::prop} = self::getDouble() : #t34;
|
||||
|
|
|
@ -16,7 +16,7 @@ class Test1 extends self::Base {
|
|||
;
|
||||
method test() → void {
|
||||
core::int v1 = super.{self::Base::intProp} = self::getInt();
|
||||
core::num v2 = super.{self::Base::intProp} = self::getNum();
|
||||
core::num v2 = super.{self::Base::intProp} = self::getNum() as{TypeError} core::int;
|
||||
core::int v4 = let final core::int #t1 = super.{self::Base::intProp} in #t1.{core::num::==}(null) ?{core::int} super.{self::Base::intProp} = self::getInt() : #t1;
|
||||
core::num v5 = let final core::int #t2 = super.{self::Base::intProp} in #t2.{core::num::==}(null) ?{core::num} super.{self::Base::intProp} = self::getNum() : #t2;
|
||||
core::int v7 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(self::getInt());
|
||||
|
@ -48,7 +48,7 @@ class Test3 extends self::Base {
|
|||
: super self::Base::•()
|
||||
;
|
||||
method test3() → void {
|
||||
core::num v2 = super.{self::Base::doubleProp} = self::getNum();
|
||||
core::num v2 = super.{self::Base::doubleProp} = self::getNum() as{TypeError} core::double;
|
||||
core::double v3 = super.{self::Base::doubleProp} = self::getDouble();
|
||||
core::num v5 = let final core::double #t10 = super.{self::Base::doubleProp} in #t10.{core::num::==}(null) ?{core::num} super.{self::Base::doubleProp} = self::getNum() : #t10;
|
||||
core::double v6 = let final core::double #t11 = super.{self::Base::doubleProp} in #t11.{core::num::==}(null) ?{core::double} super.{self::Base::doubleProp} = self::getDouble() : #t11;
|
||||
|
|
|
@ -9,7 +9,7 @@ class Test1 extends core::Object {
|
|||
;
|
||||
static method test(self::Test1 t) → void {
|
||||
core::int v1 = t.{self::Test1::prop} = self::getInt();
|
||||
core::num v2 = t.{self::Test1::prop} = self::getNum();
|
||||
core::num v2 = t.{self::Test1::prop} = self::getNum() as{TypeError} core::int;
|
||||
core::int v4 = let final self::Test1 #t1 = t in let final core::int #t2 = #t1.{self::Test1::prop} in #t2.{core::num::==}(null) ?{core::int} #t1.{self::Test1::prop} = self::getInt() : #t2;
|
||||
core::num v5 = let final self::Test1 #t3 = t in let final core::int #t4 = #t3.{self::Test1::prop} in #t4.{core::num::==}(null) ?{core::num} #t3.{self::Test1::prop} = self::getNum() : #t4;
|
||||
core::int v7 = let final self::Test1 #t5 = t in #t5.{self::Test1::prop} = #t5.{self::Test1::prop}.{core::num::+}(self::getInt());
|
||||
|
@ -43,7 +43,7 @@ class Test3 extends core::Object {
|
|||
: super core::Object::•()
|
||||
;
|
||||
static method test3(self::Test3 t) → void {
|
||||
core::num v2 = t.{self::Test3::prop} = self::getNum();
|
||||
core::num v2 = t.{self::Test3::prop} = self::getNum() as{TypeError} core::double;
|
||||
core::double v3 = t.{self::Test3::prop} = self::getDouble();
|
||||
core::num v5 = let final self::Test3 #t24 = t in let final core::double #t25 = #t24.{self::Test3::prop} in #t25.{core::num::==}(null) ?{core::num} #t24.{self::Test3::prop} = self::getNum() : #t25;
|
||||
core::double v6 = let final self::Test3 #t26 = t in let final core::double #t27 = #t26.{self::Test3::prop} in #t27.{core::num::==}(null) ?{core::double} #t26.{self::Test3::prop} = self::getDouble() : #t27;
|
||||
|
|
|
@ -13,7 +13,7 @@ static method getDouble() → core::double
|
|||
return 0.0;
|
||||
static method test1() → void {
|
||||
core::int v1 = self::topLevelInt = self::getInt();
|
||||
core::num v2 = self::topLevelInt = self::getNum();
|
||||
core::num v2 = self::topLevelInt = self::getNum() as{TypeError} core::int;
|
||||
core::int v4 = let final core::int #t1 = self::topLevelInt in #t1.{core::num::==}(null) ?{core::int} self::topLevelInt = self::getInt() : #t1;
|
||||
core::num v5 = let final core::int #t2 = self::topLevelInt in #t2.{core::num::==}(null) ?{core::num} self::topLevelInt = self::getNum() : #t2;
|
||||
core::int v7 = self::topLevelInt = self::topLevelInt.{core::num::+}(self::getInt());
|
||||
|
@ -35,7 +35,7 @@ static method test2() → void {
|
|||
core::num v11 = let final core::num #t8 = self::topLevelNum in let final core::num #t9 = self::topLevelNum = #t8.{core::num::+}(1) in #t8;
|
||||
}
|
||||
static method test3() → void {
|
||||
core::num v2 = self::topLevelDouble = self::getNum();
|
||||
core::num v2 = self::topLevelDouble = self::getNum() as{TypeError} core::double;
|
||||
core::double v3 = self::topLevelDouble = self::getDouble();
|
||||
core::num v5 = let final core::double #t10 = self::topLevelDouble in #t10.{core::num::==}(null) ?{core::num} self::topLevelDouble = self::getNum() : #t10;
|
||||
core::double v6 = let final core::double #t11 = self::topLevelDouble in #t11.{core::num::==}(null) ?{core::double} self::topLevelDouble = self::getDouble() : #t11;
|
||||
|
|
|
@ -22,13 +22,13 @@ class B extends core::Object implements self::A {
|
|||
static method foo() → dynamic {
|
||||
core::String s;
|
||||
core::int i;
|
||||
s = new self::B::•().{self::B::x};
|
||||
s = new self::B::•().{self::B::y};
|
||||
s = new self::B::•().{self::B::x} as{TypeError} core::String;
|
||||
s = new self::B::•().{self::B::y} as{TypeError} core::String;
|
||||
s = new self::B::•().{self::B::z};
|
||||
s = new self::B::•().{self::B::w};
|
||||
i = new self::B::•().{self::B::x};
|
||||
s = new self::B::•().{self::B::w} as{TypeError} core::String;
|
||||
i = new self::B::•().{self::B::x} as{TypeError} core::int;
|
||||
i = new self::B::•().{self::B::y};
|
||||
i = new self::B::•().{self::B::z};
|
||||
i = new self::B::•().{self::B::z} as{TypeError} core::int;
|
||||
i = new self::B::•().{self::B::w};
|
||||
}
|
||||
static method main() → dynamic {}
|
||||
|
|
|
@ -27,27 +27,27 @@ static field self::B h = new self::A::•().{self::A::+}(3);
|
|||
static field dynamic i = new self::A::•().unary-();
|
||||
static field self::B j = null as self::B;
|
||||
static method test1() → dynamic {
|
||||
self::a = "hi";
|
||||
self::a = "hi" as{TypeError} self::A;
|
||||
self::a = new self::B::•(3);
|
||||
self::b = "hi";
|
||||
self::b = "hi" as{TypeError} self::B;
|
||||
self::b = new self::B::•(3);
|
||||
self::c1 = <dynamic>[];
|
||||
self::c1 = <dynamic, dynamic>{};
|
||||
self::c1 = <dynamic, dynamic>{} as{TypeError} core::List<dynamic>;
|
||||
self::c2 = <dynamic>[];
|
||||
self::c2 = <dynamic, dynamic>{};
|
||||
self::c2 = <dynamic, dynamic>{} as{TypeError} core::List<dynamic>;
|
||||
self::d = <dynamic, dynamic>{};
|
||||
self::d = 3;
|
||||
self::d = 3 as{TypeError} core::Map<dynamic, dynamic>;
|
||||
self::e = new self::A::•();
|
||||
self::e = <dynamic, dynamic>{};
|
||||
self::e = <dynamic, dynamic>{} as{TypeError} self::A;
|
||||
self::f = 3;
|
||||
self::f = false;
|
||||
self::f = false as{TypeError} core::int;
|
||||
self::g = 1;
|
||||
self::g = false;
|
||||
self::h = false;
|
||||
self::g = false as{TypeError} core::int;
|
||||
self::h = false as{TypeError} self::B;
|
||||
self::h = new self::B::•("b");
|
||||
self::i = false;
|
||||
self::j = new self::B::•("b");
|
||||
self::j = false;
|
||||
self::j = <dynamic>[];
|
||||
self::j = false as{TypeError} self::B;
|
||||
self::j = <dynamic>[] as{TypeError} self::B;
|
||||
}
|
||||
static method main() → dynamic {}
|
||||
|
|
|
@ -5,7 +5,7 @@ import "dart:core" as core;
|
|||
|
||||
static field core::int y = inf::x;
|
||||
static method test1() → dynamic {
|
||||
inf::x = "hi";
|
||||
self::y = "hi";
|
||||
inf::x = "hi" as{TypeError} core::int;
|
||||
self::y = "hi" as{TypeError} core::int;
|
||||
}
|
||||
static method main() → dynamic {}
|
||||
|
|
|
@ -10,7 +10,7 @@ class B extends core::Object {
|
|||
;
|
||||
}
|
||||
static method test1() → dynamic {
|
||||
inf::A::x = "hi";
|
||||
self::B::y = "hi";
|
||||
inf::A::x = "hi" as{TypeError} core::int;
|
||||
self::B::y = "hi" as{TypeError} core::int;
|
||||
}
|
||||
static method main() → dynamic {}
|
||||
|
|
|
@ -10,6 +10,4 @@ test1() {
|
|||
x = /*error:INVALID_ASSIGNMENT*/ "hi";
|
||||
}
|
||||
|
||||
main() {
|
||||
test1();
|
||||
}
|
||||
main() {}
|
||||
|
|
|
@ -6,6 +6,4 @@ static method test1() → dynamic {
|
|||
core::int x = 3;
|
||||
x = "hi";
|
||||
}
|
||||
static method main() → dynamic {
|
||||
self::test1();
|
||||
}
|
||||
static method main() → dynamic {}
|
||||
|
|
|
@ -4,8 +4,6 @@ import "dart:core" as core;
|
|||
|
||||
static method test1() → dynamic {
|
||||
core::int x = 3;
|
||||
x = "hi";
|
||||
}
|
||||
static method main() → dynamic {
|
||||
self::test1();
|
||||
x = "hi" as{TypeError} core::int;
|
||||
}
|
||||
static method main() → dynamic {}
|
||||
|
|
|
@ -10,6 +10,4 @@ test2() {
|
|||
x = /*error:INVALID_ASSIGNMENT*/ "hi";
|
||||
}
|
||||
|
||||
main() {
|
||||
test2();
|
||||
}
|
||||
main() {}
|
||||
|
|
|
@ -5,6 +5,4 @@ static method test2() → dynamic {
|
|||
dynamic x = 3;
|
||||
x = "hi";
|
||||
}
|
||||
static method main() → dynamic {
|
||||
self::test2();
|
||||
}
|
||||
static method main() → dynamic {}
|
||||
|
|
|
@ -4,8 +4,6 @@ import "dart:core" as core;
|
|||
|
||||
static method test2() → dynamic {
|
||||
core::int x = 3;
|
||||
x = "hi";
|
||||
}
|
||||
static method main() → dynamic {
|
||||
self::test2();
|
||||
x = "hi" as{TypeError} core::int;
|
||||
}
|
||||
static method main() → dynamic {}
|
||||
|
|
|
@ -11,13 +11,13 @@ class A extends core::Object {
|
|||
;
|
||||
method test1() → dynamic {
|
||||
core::int a = this.{self::A::x};
|
||||
a = "hi";
|
||||
a = "hi" as{TypeError} core::int;
|
||||
a = 3;
|
||||
core::int b = this.{self::A::y};
|
||||
b = "hi";
|
||||
b = "hi" as{TypeError} core::int;
|
||||
b = 4;
|
||||
core::int c = this.{self::A::z};
|
||||
c = "hi";
|
||||
c = "hi" as{TypeError} core::int;
|
||||
c = 4;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,6 +22,4 @@ test1() {
|
|||
int y = 0; // field def after use
|
||||
final /*@topType=int*/ z = 42; // should infer `int`
|
||||
|
||||
main() {
|
||||
test1();
|
||||
}
|
||||
main() {}
|
||||
|
|
|
@ -16,6 +16,4 @@ static method test1() → dynamic {
|
|||
c = "hi";
|
||||
c = 4;
|
||||
}
|
||||
static method main() → dynamic {
|
||||
self::test1();
|
||||
}
|
||||
static method main() → dynamic {}
|
||||
|
|
|
@ -7,15 +7,13 @@ static field core::int y = 0;
|
|||
static final field core::int z = 42;
|
||||
static method test1() → dynamic {
|
||||
core::int a = self::x;
|
||||
a = "hi";
|
||||
a = "hi" as{TypeError} core::int;
|
||||
a = 3;
|
||||
core::int b = self::y;
|
||||
b = "hi";
|
||||
b = "hi" as{TypeError} core::int;
|
||||
b = 4;
|
||||
core::int c = self::z;
|
||||
c = "hi";
|
||||
c = "hi" as{TypeError} core::int;
|
||||
c = 4;
|
||||
}
|
||||
static method main() → dynamic {
|
||||
self::test1();
|
||||
}
|
||||
static method main() → dynamic {}
|
||||
|
|
|
@ -7,7 +7,7 @@ static method test1() → dynamic {
|
|||
x.{core::Map::[]=}(3, "z");
|
||||
x.{core::Map::[]=}("hi", "w");
|
||||
x.{core::Map::[]=}(4.0, "u");
|
||||
x.{core::Map::[]=}(3, 42);
|
||||
x.{core::Map::[]=}(3, 42 as{TypeError} core::String);
|
||||
core::Map<core::num, core::String> y = x;
|
||||
}
|
||||
static method test2() → dynamic {
|
||||
|
@ -15,7 +15,7 @@ static method test2() → dynamic {
|
|||
x.{core::Map::[]=}(3, "z");
|
||||
x.{core::Map::[]=}("hi", "w");
|
||||
x.{core::Map::[]=}(4.0, "u");
|
||||
x.{core::Map::[]=}(3, 42);
|
||||
x.{core::Map::[]=}(3, 42 as{TypeError} core::Pattern);
|
||||
core::Pattern p = null;
|
||||
x.{core::Map::[]=}(2, p);
|
||||
core::Map<core::int, core::String> y = x;
|
||||
|
|
|
@ -4,6 +4,6 @@ import "dart:core" as core;
|
|||
|
||||
static method test1() → dynamic {
|
||||
core::Map<core::Null, core::Null> x = <core::Null, core::Null>{null: null};
|
||||
x.{core::Map::[]=}(3, "z");
|
||||
x.{core::Map::[]=}(3, "z" as{TypeError} core::Null);
|
||||
}
|
||||
static method main() → dynamic {}
|
||||
|
|
|
@ -8,14 +8,14 @@ static method test1() → dynamic {
|
|||
self::x1.{core::Map::[]=}(3, "z");
|
||||
self::x1.{core::Map::[]=}("hi", "w");
|
||||
self::x1.{core::Map::[]=}(4.0, "u");
|
||||
self::x1.{core::Map::[]=}(3, 42);
|
||||
self::x1.{core::Map::[]=}(3, 42 as{TypeError} core::String);
|
||||
core::Map<core::num, core::String> y = self::x1;
|
||||
}
|
||||
static method test2() → dynamic {
|
||||
self::x2.{core::Map::[]=}(3, "z");
|
||||
self::x2.{core::Map::[]=}("hi", "w");
|
||||
self::x2.{core::Map::[]=}(4.0, "u");
|
||||
self::x2.{core::Map::[]=}(3, 42);
|
||||
self::x2.{core::Map::[]=}(3, 42 as{TypeError} core::Pattern);
|
||||
core::Pattern p = null;
|
||||
self::x2.{core::Map::[]=}(2, p);
|
||||
core::Map<core::int, core::String> y = self::x2;
|
||||
|
|
|
@ -10,8 +10,8 @@ class A extends core::Object {
|
|||
}
|
||||
static method test5() → dynamic {
|
||||
self::A a1 = new self::A::•();
|
||||
a1.{self::A::x} = "hi";
|
||||
a1.{self::A::x} = "hi" as{TypeError} core::int;
|
||||
self::A a2 = new self::A::•();
|
||||
a2.{self::A::x} = "hi";
|
||||
a2.{self::A::x} = "hi" as{TypeError} core::int;
|
||||
}
|
||||
static method main() → dynamic {}
|
||||
|
|
|
@ -19,7 +19,7 @@ abstract class Test1 extends self::Base<core::int, core::int> {
|
|||
;
|
||||
method test() → void {
|
||||
core::int v1 = let final core::String #t1 = "x" in let final core::int #t2 = self::getInt() in let final void #t3 = super.{self::Base::[]=}(#t1, #t2) in #t2;
|
||||
core::num v2 = let final core::String #t4 = "x" in let final core::num #t5 = self::getNum() in let final void #t6 = super.{self::Base::[]=}(#t4, #t5) in #t5;
|
||||
core::num v2 = let final core::String #t4 = "x" in let final core::int #t5 = self::getNum() as{TypeError} core::int in let final void #t6 = super.{self::Base::[]=}(#t4, #t5) in #t5;
|
||||
core::int v4 = let final core::String #t7 = "x" in let final core::int #t8 = super.{self::Base::[]}(#t7) in #t8.{core::num::==}(null) ?{core::int} let final core::int #t9 = self::getInt() in let final void #t10 = super.{self::Base::[]=}(#t7, #t9) in #t9 : #t8;
|
||||
core::num v5 = let final core::String #t11 = "x" in let final core::int #t12 = super.{self::Base::[]}(#t11) in #t12.{core::num::==}(null) ?{core::num} let final core::num #t13 = self::getNum() in let final void #t14 = super.{self::Base::[]=}(#t11, #t13) in #t13 : #t12;
|
||||
core::int v7 = let final core::String #t15 = "x" in let final core::int #t16 = super.{self::Base::[]}(#t15).{core::num::+}(self::getInt()) in let final void #t17 = super.{self::Base::[]=}(#t15, #t16) in #t16;
|
||||
|
@ -55,7 +55,7 @@ abstract class Test3 extends self::Base<core::int, core::double> {
|
|||
: super self::Base::•()
|
||||
;
|
||||
method test() → void {
|
||||
core::num v2 = let final core::String #t63 = "x" in let final core::num #t64 = self::getNum() in let final void #t65 = super.{self::Base::[]=}(#t63, #t64) in #t64;
|
||||
core::num v2 = let final core::String #t63 = "x" in let final core::double #t64 = self::getNum() as{TypeError} core::double in let final void #t65 = super.{self::Base::[]=}(#t63, #t64) in #t64;
|
||||
core::double v3 = let final core::String #t66 = "x" in let final core::double #t67 = self::getDouble() in let final void #t68 = super.{self::Base::[]=}(#t66, #t67) in #t67;
|
||||
core::num v5 = let final core::String #t69 = "x" in let final core::int #t70 = super.{self::Base::[]}(#t69) in #t70.{core::num::==}(null) ?{core::num} let final core::num #t71 = self::getNum() in let final void #t72 = super.{self::Base::[]=}(#t69, #t71) in #t71 : #t70;
|
||||
core::num v6 = let final core::String #t73 = "x" in let final core::int #t74 = super.{self::Base::[]}(#t73) in #t74.{core::num::==}(null) ?{core::num} let final core::double #t75 = self::getDouble() in let final void #t76 = super.{self::Base::[]=}(#t73, #t75) in #t75 : #t74;
|
||||
|
@ -74,7 +74,7 @@ abstract class Test4 extends self::Base<core::num, core::int> {
|
|||
;
|
||||
method test() → void {
|
||||
core::int v1 = let final core::String #t92 = "x" in let final core::int #t93 = self::getInt() in let final void #t94 = super.{self::Base::[]=}(#t92, #t93) in #t93;
|
||||
core::num v2 = let final core::String #t95 = "x" in let final core::num #t96 = self::getNum() in let final void #t97 = super.{self::Base::[]=}(#t95, #t96) in #t96;
|
||||
core::num v2 = let final core::String #t95 = "x" in let final core::int #t96 = self::getNum() as{TypeError} core::int in let final void #t97 = super.{self::Base::[]=}(#t95, #t96) in #t96;
|
||||
core::num v4 = let final core::String #t98 = "x" in let final core::num #t99 = super.{self::Base::[]}(#t98) in #t99.{core::num::==}(null) ?{core::num} let final core::int #t100 = self::getInt() in let final void #t101 = super.{self::Base::[]=}(#t98, #t100) in #t100 : #t99;
|
||||
core::num v5 = let final core::String #t102 = "x" in let final core::num #t103 = super.{self::Base::[]}(#t102) in #t103.{core::num::==}(null) ?{core::num} let final core::num #t104 = self::getNum() in let final void #t105 = super.{self::Base::[]=}(#t102, #t104) in #t104 : #t103;
|
||||
core::num v7 = let final core::String #t106 = "x" in let final core::num #t107 = super.{self::Base::[]}(#t106).{core::num::+}(self::getInt()) in let final void #t108 = super.{self::Base::[]=}(#t106, #t107) in #t107;
|
||||
|
@ -110,7 +110,7 @@ abstract class Test6 extends self::Base<core::num, core::double> {
|
|||
: super self::Base::•()
|
||||
;
|
||||
method test() → void {
|
||||
core::num v2 = let final core::String #t154 = "x" in let final core::num #t155 = self::getNum() in let final void #t156 = super.{self::Base::[]=}(#t154, #t155) in #t155;
|
||||
core::num v2 = let final core::String #t154 = "x" in let final core::double #t155 = self::getNum() as{TypeError} core::double in let final void #t156 = super.{self::Base::[]=}(#t154, #t155) in #t155;
|
||||
core::double v3 = let final core::String #t157 = "x" in let final core::double #t158 = self::getDouble() in let final void #t159 = super.{self::Base::[]=}(#t157, #t158) in #t158;
|
||||
core::num v5 = let final core::String #t160 = "x" in let final core::num #t161 = super.{self::Base::[]}(#t160) in #t161.{core::num::==}(null) ?{core::num} let final core::num #t162 = self::getNum() in let final void #t163 = super.{self::Base::[]=}(#t160, #t162) in #t162 : #t161;
|
||||
core::num v6 = let final core::String #t164 = "x" in let final core::num #t165 = super.{self::Base::[]}(#t164) in #t165.{core::num::==}(null) ?{core::num} let final core::double #t166 = self::getDouble() in let final void #t167 = super.{self::Base::[]=}(#t164, #t166) in #t166 : #t165;
|
||||
|
@ -129,7 +129,7 @@ abstract class Test7 extends self::Base<core::double, core::int> {
|
|||
;
|
||||
method test() → void {
|
||||
core::int v1 = let final core::String #t183 = "x" in let final core::int #t184 = self::getInt() in let final void #t185 = super.{self::Base::[]=}(#t183, #t184) in #t184;
|
||||
core::num v2 = let final core::String #t186 = "x" in let final core::num #t187 = self::getNum() in let final void #t188 = super.{self::Base::[]=}(#t186, #t187) in #t187;
|
||||
core::num v2 = let final core::String #t186 = "x" in let final core::int #t187 = self::getNum() as{TypeError} core::int in let final void #t188 = super.{self::Base::[]=}(#t186, #t187) in #t187;
|
||||
core::num v4 = let final core::String #t189 = "x" in let final core::double #t190 = super.{self::Base::[]}(#t189) in #t190.{core::num::==}(null) ?{core::num} let final core::int #t191 = self::getInt() in let final void #t192 = super.{self::Base::[]=}(#t189, #t191) in #t191 : #t190;
|
||||
core::num v5 = let final core::String #t193 = "x" in let final core::double #t194 = super.{self::Base::[]}(#t193) in #t194.{core::num::==}(null) ?{core::num} let final core::num #t195 = self::getNum() in let final void #t196 = super.{self::Base::[]=}(#t193, #t195) in #t195 : #t194;
|
||||
core::double v7 = let final core::String #t197 = "x" in let final core::double #t198 = super.{self::Base::[]}(#t197).{core::double::+}(self::getInt()) in let final void #t199 = super.{self::Base::[]=}(#t197, #t198) in #t198;
|
||||
|
@ -165,7 +165,7 @@ abstract class Test9 extends self::Base<core::double, core::double> {
|
|||
: super self::Base::•()
|
||||
;
|
||||
method test() → void {
|
||||
core::num v2 = let final core::String #t245 = "x" in let final core::num #t246 = self::getNum() in let final void #t247 = super.{self::Base::[]=}(#t245, #t246) in #t246;
|
||||
core::num v2 = let final core::String #t245 = "x" in let final core::double #t246 = self::getNum() as{TypeError} core::double in let final void #t247 = super.{self::Base::[]=}(#t245, #t246) in #t246;
|
||||
core::double v3 = let final core::String #t248 = "x" in let final core::double #t249 = self::getDouble() in let final void #t250 = super.{self::Base::[]=}(#t248, #t249) in #t249;
|
||||
core::num v5 = let final core::String #t251 = "x" in let final core::double #t252 = super.{self::Base::[]}(#t251) in #t252.{core::num::==}(null) ?{core::num} let final core::num #t253 = self::getNum() in let final void #t254 = super.{self::Base::[]=}(#t251, #t253) in #t253 : #t252;
|
||||
core::double v6 = let final core::String #t255 = "x" in let final core::double #t256 = super.{self::Base::[]}(#t255) in #t256.{core::num::==}(null) ?{core::double} let final core::double #t257 = self::getDouble() in let final void #t258 = super.{self::Base::[]=}(#t255, #t257) in #t257 : #t256;
|
||||
|
|
|
@ -10,7 +10,7 @@ abstract class Test1 extends core::Object {
|
|||
abstract operator []=(core::String s, core::int v) → void;
|
||||
method test() → void {
|
||||
core::int v1 = let final core::String #t1 = "x" in let final core::int #t2 = self::getInt() in let final void #t3 = this.{self::Test1::[]=}(#t1, #t2) in #t2;
|
||||
core::num v2 = let final core::String #t4 = "x" in let final core::num #t5 = self::getNum() in let final void #t6 = this.{self::Test1::[]=}(#t4, #t5) in #t5;
|
||||
core::num v2 = let final core::String #t4 = "x" in let final core::int #t5 = self::getNum() as{TypeError} core::int in let final void #t6 = this.{self::Test1::[]=}(#t4, #t5) in #t5;
|
||||
core::int v4 = let final core::String #t7 = "x" in let final core::int #t8 = this.{self::Test1::[]}(#t7) in #t8.{core::num::==}(null) ?{core::int} let final core::int #t9 = self::getInt() in let final void #t10 = this.{self::Test1::[]=}(#t7, #t9) in #t9 : #t8;
|
||||
core::num v5 = let final core::String #t11 = "x" in let final core::int #t12 = this.{self::Test1::[]}(#t11) in #t12.{core::num::==}(null) ?{core::num} let final core::num #t13 = self::getNum() in let final void #t14 = this.{self::Test1::[]=}(#t11, #t13) in #t13 : #t12;
|
||||
core::int v7 = let final core::String #t15 = "x" in let final core::int #t16 = this.{self::Test1::[]}(#t15).{core::num::+}(self::getInt()) in let final void #t17 = this.{self::Test1::[]=}(#t15, #t16) in #t16;
|
||||
|
@ -46,7 +46,7 @@ abstract class Test3 extends core::Object {
|
|||
abstract operator [](core::String s) → core::int;
|
||||
abstract operator []=(core::String s, core::double v) → void;
|
||||
method test() → void {
|
||||
core::num v2 = let final core::String #t63 = "x" in let final core::num #t64 = self::getNum() in let final void #t65 = this.{self::Test3::[]=}(#t63, #t64) in #t64;
|
||||
core::num v2 = let final core::String #t63 = "x" in let final core::double #t64 = self::getNum() as{TypeError} core::double in let final void #t65 = this.{self::Test3::[]=}(#t63, #t64) in #t64;
|
||||
core::double v3 = let final core::String #t66 = "x" in let final core::double #t67 = self::getDouble() in let final void #t68 = this.{self::Test3::[]=}(#t66, #t67) in #t67;
|
||||
core::num v5 = let final core::String #t69 = "x" in let final core::int #t70 = this.{self::Test3::[]}(#t69) in #t70.{core::num::==}(null) ?{core::num} let final core::num #t71 = self::getNum() in let final void #t72 = this.{self::Test3::[]=}(#t69, #t71) in #t71 : #t70;
|
||||
core::num v6 = let final core::String #t73 = "x" in let final core::int #t74 = this.{self::Test3::[]}(#t73) in #t74.{core::num::==}(null) ?{core::num} let final core::double #t75 = self::getDouble() in let final void #t76 = this.{self::Test3::[]=}(#t73, #t75) in #t75 : #t74;
|
||||
|
@ -65,7 +65,7 @@ abstract class Test4 extends core::Object {
|
|||
abstract operator []=(core::String s, core::int v) → void;
|
||||
method test() → void {
|
||||
core::int v1 = let final core::String #t92 = "x" in let final core::int #t93 = self::getInt() in let final void #t94 = this.{self::Test4::[]=}(#t92, #t93) in #t93;
|
||||
core::num v2 = let final core::String #t95 = "x" in let final core::num #t96 = self::getNum() in let final void #t97 = this.{self::Test4::[]=}(#t95, #t96) in #t96;
|
||||
core::num v2 = let final core::String #t95 = "x" in let final core::int #t96 = self::getNum() as{TypeError} core::int in let final void #t97 = this.{self::Test4::[]=}(#t95, #t96) in #t96;
|
||||
core::num v4 = let final core::String #t98 = "x" in let final core::num #t99 = this.{self::Test4::[]}(#t98) in #t99.{core::num::==}(null) ?{core::num} let final core::int #t100 = self::getInt() in let final void #t101 = this.{self::Test4::[]=}(#t98, #t100) in #t100 : #t99;
|
||||
core::num v5 = let final core::String #t102 = "x" in let final core::num #t103 = this.{self::Test4::[]}(#t102) in #t103.{core::num::==}(null) ?{core::num} let final core::num #t104 = self::getNum() in let final void #t105 = this.{self::Test4::[]=}(#t102, #t104) in #t104 : #t103;
|
||||
core::num v7 = let final core::String #t106 = "x" in let final core::num #t107 = this.{self::Test4::[]}(#t106).{core::num::+}(self::getInt()) in let final void #t108 = this.{self::Test4::[]=}(#t106, #t107) in #t107;
|
||||
|
@ -101,7 +101,7 @@ abstract class Test6 extends core::Object {
|
|||
abstract operator [](core::String s) → core::num;
|
||||
abstract operator []=(core::String s, core::double v) → void;
|
||||
method test() → void {
|
||||
core::num v2 = let final core::String #t154 = "x" in let final core::num #t155 = self::getNum() in let final void #t156 = this.{self::Test6::[]=}(#t154, #t155) in #t155;
|
||||
core::num v2 = let final core::String #t154 = "x" in let final core::double #t155 = self::getNum() as{TypeError} core::double in let final void #t156 = this.{self::Test6::[]=}(#t154, #t155) in #t155;
|
||||
core::double v3 = let final core::String #t157 = "x" in let final core::double #t158 = self::getDouble() in let final void #t159 = this.{self::Test6::[]=}(#t157, #t158) in #t158;
|
||||
core::num v5 = let final core::String #t160 = "x" in let final core::num #t161 = this.{self::Test6::[]}(#t160) in #t161.{core::num::==}(null) ?{core::num} let final core::num #t162 = self::getNum() in let final void #t163 = this.{self::Test6::[]=}(#t160, #t162) in #t162 : #t161;
|
||||
core::num v6 = let final core::String #t164 = "x" in let final core::num #t165 = this.{self::Test6::[]}(#t164) in #t165.{core::num::==}(null) ?{core::num} let final core::double #t166 = self::getDouble() in let final void #t167 = this.{self::Test6::[]=}(#t164, #t166) in #t166 : #t165;
|
||||
|
@ -120,7 +120,7 @@ abstract class Test7 extends core::Object {
|
|||
abstract operator []=(core::String s, core::int v) → void;
|
||||
method test() → void {
|
||||
core::int v1 = let final core::String #t183 = "x" in let final core::int #t184 = self::getInt() in let final void #t185 = this.{self::Test7::[]=}(#t183, #t184) in #t184;
|
||||
core::num v2 = let final core::String #t186 = "x" in let final core::num #t187 = self::getNum() in let final void #t188 = this.{self::Test7::[]=}(#t186, #t187) in #t187;
|
||||
core::num v2 = let final core::String #t186 = "x" in let final core::int #t187 = self::getNum() as{TypeError} core::int in let final void #t188 = this.{self::Test7::[]=}(#t186, #t187) in #t187;
|
||||
core::num v4 = let final core::String #t189 = "x" in let final core::double #t190 = this.{self::Test7::[]}(#t189) in #t190.{core::num::==}(null) ?{core::num} let final core::int #t191 = self::getInt() in let final void #t192 = this.{self::Test7::[]=}(#t189, #t191) in #t191 : #t190;
|
||||
core::num v5 = let final core::String #t193 = "x" in let final core::double #t194 = this.{self::Test7::[]}(#t193) in #t194.{core::num::==}(null) ?{core::num} let final core::num #t195 = self::getNum() in let final void #t196 = this.{self::Test7::[]=}(#t193, #t195) in #t195 : #t194;
|
||||
core::double v7 = let final core::String #t197 = "x" in let final core::double #t198 = this.{self::Test7::[]}(#t197).{core::double::+}(self::getInt()) in let final void #t199 = this.{self::Test7::[]=}(#t197, #t198) in #t198;
|
||||
|
@ -156,7 +156,7 @@ abstract class Test9 extends core::Object {
|
|||
abstract operator [](core::String s) → core::double;
|
||||
abstract operator []=(core::String s, core::double v) → void;
|
||||
method test() → void {
|
||||
core::num v2 = let final core::String #t245 = "x" in let final core::num #t246 = self::getNum() in let final void #t247 = this.{self::Test9::[]=}(#t245, #t246) in #t246;
|
||||
core::num v2 = let final core::String #t245 = "x" in let final core::double #t246 = self::getNum() as{TypeError} core::double in let final void #t247 = this.{self::Test9::[]=}(#t245, #t246) in #t246;
|
||||
core::double v3 = let final core::String #t248 = "x" in let final core::double #t249 = self::getDouble() in let final void #t250 = this.{self::Test9::[]=}(#t248, #t249) in #t249;
|
||||
core::num v5 = let final core::String #t251 = "x" in let final core::double #t252 = this.{self::Test9::[]}(#t251) in #t252.{core::num::==}(null) ?{core::num} let final core::num #t253 = self::getNum() in let final void #t254 = this.{self::Test9::[]=}(#t251, #t253) in #t253 : #t252;
|
||||
core::double v6 = let final core::String #t255 = "x" in let final core::double #t256 = this.{self::Test9::[]}(#t255) in #t256.{core::num::==}(null) ?{core::double} let final core::double #t257 = self::getDouble() in let final void #t258 = this.{self::Test9::[]=}(#t255, #t257) in #t257 : #t256;
|
||||
|
|
|
@ -17,7 +17,7 @@ static method getDouble() → core::double
|
|||
return 0.0;
|
||||
static method test1(self::Test<core::int, core::int> t) → void {
|
||||
core::int v1 = let final self::Test<core::int, core::int> #t1 = t in let final core::String #t2 = "x" in let final core::int #t3 = self::getInt() in let final void #t4 = #t1.{self::Test::[]=}(#t2, #t3) in #t3;
|
||||
core::num v2 = let final self::Test<core::int, core::int> #t5 = t in let final core::String #t6 = "x" in let final core::num #t7 = self::getNum() in let final void #t8 = #t5.{self::Test::[]=}(#t6, #t7) in #t7;
|
||||
core::num v2 = let final self::Test<core::int, core::int> #t5 = t in let final core::String #t6 = "x" in let final core::int #t7 = self::getNum() as{TypeError} core::int in let final void #t8 = #t5.{self::Test::[]=}(#t6, #t7) in #t7;
|
||||
core::int v4 = let final self::Test<core::int, core::int> #t9 = t in let final core::String #t10 = "x" in let final core::int #t11 = #t9.{self::Test::[]}(#t10) in #t11.{core::num::==}(null) ?{core::int} let final core::int #t12 = self::getInt() in let final void #t13 = #t9.{self::Test::[]=}(#t10, #t12) in #t12 : #t11;
|
||||
core::num v5 = let final self::Test<core::int, core::int> #t14 = t in let final core::String #t15 = "x" in let final core::int #t16 = #t14.{self::Test::[]}(#t15) in #t16.{core::num::==}(null) ?{core::num} let final core::num #t17 = self::getNum() in let final void #t18 = #t14.{self::Test::[]=}(#t15, #t17) in #t17 : #t16;
|
||||
core::int v7 = let final self::Test<core::int, core::int> #t19 = t in let final core::String #t20 = "x" in let final core::int #t21 = #t19.{self::Test::[]}(#t20).{core::num::+}(self::getInt()) in let final void #t22 = #t19.{self::Test::[]=}(#t20, #t21) in #t21;
|
||||
|
@ -39,7 +39,7 @@ static method test2(self::Test<core::int, core::num> t) → void {
|
|||
core::int v11 = let final self::Test<core::int, core::num> #t78 = t in let final core::String #t79 = "x" in let final core::int #t80 = #t78.{self::Test::[]}(#t79) in let final void #t81 = #t78.{self::Test::[]=}(#t79, #t80.{core::num::+}(1)) in #t80;
|
||||
}
|
||||
static method test3(self::Test<core::int, core::double> t) → void {
|
||||
core::num v2 = let final self::Test<core::int, core::double> #t82 = t in let final core::String #t83 = "x" in let final core::num #t84 = self::getNum() in let final void #t85 = #t82.{self::Test::[]=}(#t83, #t84) in #t84;
|
||||
core::num v2 = let final self::Test<core::int, core::double> #t82 = t in let final core::String #t83 = "x" in let final core::double #t84 = self::getNum() as{TypeError} core::double in let final void #t85 = #t82.{self::Test::[]=}(#t83, #t84) in #t84;
|
||||
core::double v3 = let final self::Test<core::int, core::double> #t86 = t in let final core::String #t87 = "x" in let final core::double #t88 = self::getDouble() in let final void #t89 = #t86.{self::Test::[]=}(#t87, #t88) in #t88;
|
||||
core::num v5 = let final self::Test<core::int, core::double> #t90 = t in let final core::String #t91 = "x" in let final core::int #t92 = #t90.{self::Test::[]}(#t91) in #t92.{core::num::==}(null) ?{core::num} let final core::num #t93 = self::getNum() in let final void #t94 = #t90.{self::Test::[]=}(#t91, #t93) in #t93 : #t92;
|
||||
core::num v6 = let final self::Test<core::int, core::double> #t95 = t in let final core::String #t96 = "x" in let final core::int #t97 = #t95.{self::Test::[]}(#t96) in #t97.{core::num::==}(null) ?{core::num} let final core::double #t98 = self::getDouble() in let final void #t99 = #t95.{self::Test::[]=}(#t96, #t98) in #t98 : #t97;
|
||||
|
@ -51,7 +51,7 @@ static method test3(self::Test<core::int, core::double> t) → void {
|
|||
}
|
||||
static method test4(self::Test<core::num, core::int> t) → void {
|
||||
core::int v1 = let final self::Test<core::num, core::int> #t120 = t in let final core::String #t121 = "x" in let final core::int #t122 = self::getInt() in let final void #t123 = #t120.{self::Test::[]=}(#t121, #t122) in #t122;
|
||||
core::num v2 = let final self::Test<core::num, core::int> #t124 = t in let final core::String #t125 = "x" in let final core::num #t126 = self::getNum() in let final void #t127 = #t124.{self::Test::[]=}(#t125, #t126) in #t126;
|
||||
core::num v2 = let final self::Test<core::num, core::int> #t124 = t in let final core::String #t125 = "x" in let final core::int #t126 = self::getNum() as{TypeError} core::int in let final void #t127 = #t124.{self::Test::[]=}(#t125, #t126) in #t126;
|
||||
core::num v4 = let final self::Test<core::num, core::int> #t128 = t in let final core::String #t129 = "x" in let final core::num #t130 = #t128.{self::Test::[]}(#t129) in #t130.{core::num::==}(null) ?{core::num} let final core::int #t131 = self::getInt() in let final void #t132 = #t128.{self::Test::[]=}(#t129, #t131) in #t131 : #t130;
|
||||
core::num v5 = let final self::Test<core::num, core::int> #t133 = t in let final core::String #t134 = "x" in let final core::num #t135 = #t133.{self::Test::[]}(#t134) in #t135.{core::num::==}(null) ?{core::num} let final core::num #t136 = self::getNum() in let final void #t137 = #t133.{self::Test::[]=}(#t134, #t136) in #t136 : #t135;
|
||||
core::num v7 = let final self::Test<core::num, core::int> #t138 = t in let final core::String #t139 = "x" in let final core::num #t140 = #t138.{self::Test::[]}(#t139).{core::num::+}(self::getInt()) in let final void #t141 = #t138.{self::Test::[]=}(#t139, #t140) in #t140;
|
||||
|
@ -73,7 +73,7 @@ static method test5(self::Test<core::num, core::num> t) → void {
|
|||
core::num v11 = let final self::Test<core::num, core::num> #t197 = t in let final core::String #t198 = "x" in let final core::num #t199 = #t197.{self::Test::[]}(#t198) in let final void #t200 = #t197.{self::Test::[]=}(#t198, #t199.{core::num::+}(1)) in #t199;
|
||||
}
|
||||
static method test6(self::Test<core::num, core::double> t) → void {
|
||||
core::num v2 = let final self::Test<core::num, core::double> #t201 = t in let final core::String #t202 = "x" in let final core::num #t203 = self::getNum() in let final void #t204 = #t201.{self::Test::[]=}(#t202, #t203) in #t203;
|
||||
core::num v2 = let final self::Test<core::num, core::double> #t201 = t in let final core::String #t202 = "x" in let final core::double #t203 = self::getNum() as{TypeError} core::double in let final void #t204 = #t201.{self::Test::[]=}(#t202, #t203) in #t203;
|
||||
core::double v3 = let final self::Test<core::num, core::double> #t205 = t in let final core::String #t206 = "x" in let final core::double #t207 = self::getDouble() in let final void #t208 = #t205.{self::Test::[]=}(#t206, #t207) in #t207;
|
||||
core::num v5 = let final self::Test<core::num, core::double> #t209 = t in let final core::String #t210 = "x" in let final core::num #t211 = #t209.{self::Test::[]}(#t210) in #t211.{core::num::==}(null) ?{core::num} let final core::num #t212 = self::getNum() in let final void #t213 = #t209.{self::Test::[]=}(#t210, #t212) in #t212 : #t211;
|
||||
core::num v6 = let final self::Test<core::num, core::double> #t214 = t in let final core::String #t215 = "x" in let final core::num #t216 = #t214.{self::Test::[]}(#t215) in #t216.{core::num::==}(null) ?{core::num} let final core::double #t217 = self::getDouble() in let final void #t218 = #t214.{self::Test::[]=}(#t215, #t217) in #t217 : #t216;
|
||||
|
@ -85,7 +85,7 @@ static method test6(self::Test<core::num, core::double> t) → void {
|
|||
}
|
||||
static method test7(self::Test<core::double, core::int> t) → void {
|
||||
core::int v1 = let final self::Test<core::double, core::int> #t239 = t in let final core::String #t240 = "x" in let final core::int #t241 = self::getInt() in let final void #t242 = #t239.{self::Test::[]=}(#t240, #t241) in #t241;
|
||||
core::num v2 = let final self::Test<core::double, core::int> #t243 = t in let final core::String #t244 = "x" in let final core::num #t245 = self::getNum() in let final void #t246 = #t243.{self::Test::[]=}(#t244, #t245) in #t245;
|
||||
core::num v2 = let final self::Test<core::double, core::int> #t243 = t in let final core::String #t244 = "x" in let final core::int #t245 = self::getNum() as{TypeError} core::int in let final void #t246 = #t243.{self::Test::[]=}(#t244, #t245) in #t245;
|
||||
core::num v4 = let final self::Test<core::double, core::int> #t247 = t in let final core::String #t248 = "x" in let final core::double #t249 = #t247.{self::Test::[]}(#t248) in #t249.{core::num::==}(null) ?{core::num} let final core::int #t250 = self::getInt() in let final void #t251 = #t247.{self::Test::[]=}(#t248, #t250) in #t250 : #t249;
|
||||
core::num v5 = let final self::Test<core::double, core::int> #t252 = t in let final core::String #t253 = "x" in let final core::double #t254 = #t252.{self::Test::[]}(#t253) in #t254.{core::num::==}(null) ?{core::num} let final core::num #t255 = self::getNum() in let final void #t256 = #t252.{self::Test::[]=}(#t253, #t255) in #t255 : #t254;
|
||||
core::double v7 = let final self::Test<core::double, core::int> #t257 = t in let final core::String #t258 = "x" in let final core::double #t259 = #t257.{self::Test::[]}(#t258).{core::double::+}(self::getInt()) in let final void #t260 = #t257.{self::Test::[]=}(#t258, #t259) in #t259;
|
||||
|
@ -107,7 +107,7 @@ static method test8(self::Test<core::double, core::num> t) → void {
|
|||
core::double v11 = let final self::Test<core::double, core::num> #t316 = t in let final core::String #t317 = "x" in let final core::double #t318 = #t316.{self::Test::[]}(#t317) in let final void #t319 = #t316.{self::Test::[]=}(#t317, #t318.{core::double::+}(1)) in #t318;
|
||||
}
|
||||
static method test9(self::Test<core::double, core::double> t) → void {
|
||||
core::num v2 = let final self::Test<core::double, core::double> #t320 = t in let final core::String #t321 = "x" in let final core::num #t322 = self::getNum() in let final void #t323 = #t320.{self::Test::[]=}(#t321, #t322) in #t322;
|
||||
core::num v2 = let final self::Test<core::double, core::double> #t320 = t in let final core::String #t321 = "x" in let final core::double #t322 = self::getNum() as{TypeError} core::double in let final void #t323 = #t320.{self::Test::[]=}(#t321, #t322) in #t322;
|
||||
core::double v3 = let final self::Test<core::double, core::double> #t324 = t in let final core::String #t325 = "x" in let final core::double #t326 = self::getDouble() in let final void #t327 = #t324.{self::Test::[]=}(#t325, #t326) in #t326;
|
||||
core::num v5 = let final self::Test<core::double, core::double> #t328 = t in let final core::String #t329 = "x" in let final core::double #t330 = #t328.{self::Test::[]}(#t329) in #t330.{core::num::==}(null) ?{core::num} let final core::num #t331 = self::getNum() in let final void #t332 = #t328.{self::Test::[]=}(#t329, #t331) in #t331 : #t330;
|
||||
core::double v6 = let final self::Test<core::double, core::double> #t333 = t in let final core::String #t334 = "x" in let final core::double #t335 = #t333.{self::Test::[]}(#t334) in #t335.{core::num::==}(null) ?{core::double} let final core::double #t336 = self::getDouble() in let final void #t337 = #t333.{self::Test::[]=}(#t334, #t336) in #t336 : #t335;
|
||||
|
|
|
@ -717,7 +717,7 @@ class _HashSet<E> extends _HashSetBase<E> implements HashSet<E> {
|
|||
int oldLength = _buckets.length;
|
||||
int newLength = oldLength << 1;
|
||||
List oldBuckets = _buckets;
|
||||
List newBuckets = new List(newLength);
|
||||
List newBuckets = new List<_HashSetEntry<E>>(newLength);
|
||||
for (int i = 0; i < oldLength; i++) {
|
||||
_HashSetEntry<E> entry = oldBuckets[i];
|
||||
while (entry != null) {
|
||||
|
|
|
@ -7,7 +7,7 @@ import "package:expect/expect.dart";
|
|||
// Dart test program to test type-based optimization on fields.
|
||||
|
||||
class A {
|
||||
var a = 0;
|
||||
dynamic a = 0;
|
||||
var b = 0;
|
||||
foo() {
|
||||
var c = b + 27;
|
||||
|
|
|
@ -1106,7 +1106,7 @@ string_split_test: CompileTimeError
|
|||
super_bound_closure_test/none: CompileTimeError
|
||||
switch_case_test/none: CompileTimeError
|
||||
|
||||
vm/lazy_deopt_with_exception*: CompileTimeError
|
||||
vm/lazy_deopt_with_exception_test: CompileTimeError
|
||||
prefix6_negative_test: CompileTimeError, OK
|
||||
void_type_function_types_test/none: CompileTimeError # Issue 30177
|
||||
void_type_usage_test/param_as: CompileTimeError # Issue 30177
|
||||
|
|
|
@ -268,7 +268,6 @@ execute_finally6_test: RuntimeError # Issue 29920
|
|||
expect_test: RuntimeError # Issue 29920
|
||||
f_bounded_quantification3_test: RuntimeError # Issue 29920
|
||||
field_increment_bailout_test: RuntimeError # Issue 29920
|
||||
field_optimization3_test: RuntimeError # Issue 29920
|
||||
flatten_test/05: MissingRuntimeError # Issue 29920
|
||||
flatten_test/08: MissingRuntimeError # Issue 29920
|
||||
flatten_test/09: MissingRuntimeError # Issue 29920
|
||||
|
@ -331,7 +330,6 @@ left_shift_test: RuntimeError # Ints and doubles are unified.
|
|||
expect_test: RuntimeError # Issue 29920
|
||||
f_bounded_quantification3_test: RuntimeError # Issue 29920
|
||||
truncdiv_test: RuntimeError # Issue 29920
|
||||
field_optimization3_test: RuntimeError # Issue 29920
|
||||
first_class_types_test: RuntimeError, OK # Strong mode reifies inferred type argument.
|
||||
stacktrace_test: RuntimeError # Issue 29920
|
||||
const_evaluation_test/01: RuntimeError # Issue 29920
|
||||
|
|
|
@ -781,7 +781,6 @@ type_variable_scope2_test: MissingCompileTimeError
|
|||
type_variable_scope_test/00: MissingCompileTimeError
|
||||
type_variable_scope_test/01: MissingCompileTimeError
|
||||
type_variable_scope_test/02: MissingCompileTimeError
|
||||
type_variable_scope_test/03: MissingCompileTimeError
|
||||
type_variable_scope_test/04: MissingCompileTimeError
|
||||
type_variable_scope_test/05: MissingCompileTimeError
|
||||
type_variable_static_context_test: MissingCompileTimeError
|
||||
|
@ -961,6 +960,7 @@ library_env_test/has_no_io_support: RuntimeError, OK
|
|||
multiline_strings_test: Fail # Issue 23020
|
||||
regress_19413_test: MissingCompileTimeError
|
||||
regress_21793_test/01: MissingCompileTimeError
|
||||
type_variable_scope_test/03: MissingCompileTimeError
|
||||
unicode_bom_test: Fail # Issue 16067
|
||||
vm/debug_break_enabled_vm_test/01: Crash, OK # Expected to hit breakpoint.
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
import 'package:expect/expect.dart';
|
||||
|
||||
class C {
|
||||
var x = 42;
|
||||
dynamic x = 42;
|
||||
}
|
||||
|
||||
const NeverInline = "NeverInline";
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
import 'package:expect/expect.dart';
|
||||
|
||||
class C {
|
||||
var x = 42;
|
||||
dynamic x = 42;
|
||||
}
|
||||
|
||||
const NeverInline = "NeverInline";
|
||||
|
|
|
@ -12,7 +12,7 @@ import 'package:expect/expect.dart';
|
|||
class D {
|
||||
var a = 0.0;
|
||||
var b = 1.0;
|
||||
var c = 2.0;
|
||||
dynamic c = 2.0;
|
||||
test() {
|
||||
a = 0.0;
|
||||
b = 1.0;
|
||||
|
@ -46,7 +46,7 @@ testD() {
|
|||
class F {
|
||||
var a = new Float32x4.zero();
|
||||
var b = new Float32x4(1.0, 2.0, 3.0, 4.0);
|
||||
var c = new Float32x4.zero();
|
||||
dynamic c = new Float32x4.zero();
|
||||
test() {
|
||||
a = new Float32x4.zero();
|
||||
b = new Float32x4(1.0, 2.0, 3.0, 4.0);
|
||||
|
|
Loading…
Reference in a new issue