diff --git a/pkg/dev_compiler/lib/src/codegen/js_codegen.dart b/pkg/dev_compiler/lib/src/codegen/js_codegen.dart index d4bf93ca59f4..f2079e672732 100644 --- a/pkg/dev_compiler/lib/src/codegen/js_codegen.dart +++ b/pkg/dev_compiler/lib/src/codegen/js_codegen.dart @@ -1000,6 +1000,9 @@ class JSCodegenVisitor extends GeneralizingAstVisitor with ConversionVisitor { type.normalParameterTypes.every(_typeIsLoaded)); } if (type.isDynamic || type.isVoid || type.isBottom) return true; + if (type is ParameterizedType && !type.typeArguments.every(_typeIsLoaded)) { + return false; + } return _loader.isLoaded(type.element); } diff --git a/pkg/dev_compiler/test/codegen/expect/functions.js b/pkg/dev_compiler/test/codegen/expect/functions.js new file mode 100644 index 000000000000..d9a9b4e06edc --- /dev/null +++ b/pkg/dev_compiler/test/codegen/expect/functions.js @@ -0,0 +1,19 @@ +var functions = dart.defineLibrary(functions, {}); +var core = dart.import(core); +(function(exports, core) { + 'use strict'; + function bootstrap() { + return dart.setType([new Foo()], core.List$(Foo)); + } + dart.fn(bootstrap, () => dart.functionType(core.List$(Foo), [])); + class Foo extends core.Object {} + dart.setSignature(Foo, {}); + function main() { + core.print(bootstrap()[core.$get](0)); + } + dart.fn(main, dart.void, []); + // Exports: + exports.bootstrap = bootstrap; + exports.Foo = Foo; + exports.main = main; +})(functions, core); diff --git a/pkg/dev_compiler/test/codegen/expect/functions.txt b/pkg/dev_compiler/test/codegen/expect/functions.txt new file mode 100644 index 000000000000..91e9cffbaa84 --- /dev/null +++ b/pkg/dev_compiler/test/codegen/expect/functions.txt @@ -0,0 +1 @@ +// Messages from compiling functions.dart diff --git a/pkg/dev_compiler/test/codegen/functions.dart b/pkg/dev_compiler/test/codegen/functions.dart new file mode 100644 index 000000000000..967f335f40ff --- /dev/null +++ b/pkg/dev_compiler/test/codegen/functions.dart @@ -0,0 +1,14 @@ +List bootstrap() { + return [new Foo()]; +} + +typedef B A2B(A x); + +A2B id(A2B f) => f; + +class Foo { +} + +void main() { + print(bootstrap()[0]); +}