| library test; |
| import self as self; |
| import "dart:core" as core; |
| |
| static method block_test() → void { |
| () → core::List<core::Object> g; |
| g = () → dynamic { |
| return <dynamic>[3]; |
| }; |
| assert(g is () → core::List<core::Object>); |
| assert(!(g is () → core::List<core::int>)); |
| g.call().add("hello"); |
| core::List<core::int> l = <dynamic>[3]; |
| g = () → dynamic { |
| return l; |
| }; |
| assert(g is () → core::List<core::Object>); |
| assert(g is () → core::List<core::int>); |
| try { |
| g.call().add("hello"); |
| throw "expected a runtime error"; |
| } |
| on core::TypeError catch(no-exception-var) { |
| } |
| core::Object o = l; |
| g = () → dynamic { |
| return o; |
| }; |
| assert(g is () → core::List<core::Object>); |
| assert(!(g is () → core::List<core::int>)); |
| assert(!(g is () → core::Object)); |
| g.call(); |
| o = 3; |
| try { |
| g.call(); |
| throw "expected a runtime error"; |
| } |
| on core::TypeError catch(no-exception-var) { |
| } |
| } |
| static method arrow_test() → void { |
| () → core::List<core::Object> g; |
| g = () → dynamic => <dynamic>[3]; |
| assert(g is () → core::List<core::Object>); |
| assert(!(g is () → core::List<core::int>)); |
| g.call().add("hello"); |
| core::List<core::int> l = <dynamic>[3]; |
| g = () → dynamic => l; |
| assert(g is () → core::List<core::Object>); |
| assert(g is () → core::List<core::int>); |
| try { |
| g.call().add("hello"); |
| throw "expected a runtime error"; |
| } |
| on core::TypeError catch(no-exception-var) { |
| } |
| core::Object o = l; |
| g = () → dynamic => o; |
| assert(g is () → core::List<core::Object>); |
| assert(!(g is () → core::List<core::int>)); |
| assert(!(g is () → core::Object)); |
| g.call(); |
| o = 3; |
| try { |
| g.call(); |
| throw "expected a runtime error"; |
| } |
| on core::TypeError catch(no-exception-var) { |
| } |
| } |
| static method main() → dynamic { |
| self::block_test(); |
| self::arrow_test(); |
| } |