Closed
Description
Forked from #33372.
I am a bit confused on the output of the following program:
void main(var arg) {
switch (arg) {
case 1:
willThrowNoSuchMethod();
break;
case 2:
willThrowCastError();
break;
case 3:
willThrowTypeError();
break;
}
}
void willThrowNoSuchMethod() {
dynamic x = [];
x.aMissingMethod();
return null;
return null;
}
void willThrowCastError() {
var x = [];
List<String> y = x;
return null;
return null;
}
void willThrowTypeError() {
dynamic x = 5;
String y = x;
return null;
return null;
}
... emits ...
main: function(arg) {
switch (arg) {
case 1:
F.willThrowNoSuchMethod();
break;
case 2:
F.willThrowCastError();
break;
case 3:
F.willThrowTypeError();
break;
}
},
willThrowNoSuchMethod: function() {
[].aMissingMethod$0();
return;
},
willThrowCastError: function() {
H.assertSubtype([], "$isList", [P.String], "$asList");
return;
},
willThrowTypeError: function() {
H.stringTypeCheck(5);
return;
}
Questions:
- Why isn't a NSM error inlined in lieu of
[].aMissingMethod$()
? - Why isn't a
TypeError
inlined in lieu ofH.assertSubtype
? - Why isn't a
TypeError
inlined in lieu ofH.stringTypeCheck
?