| 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(); |
| } |