| Index: pkg/compiler/lib/src/js_backend/runtime_types.dart
|
| diff --git a/pkg/compiler/lib/src/js_backend/runtime_types.dart b/pkg/compiler/lib/src/js_backend/runtime_types.dart
|
| index 9b54dcd33f539775817e284b82318634206d2440..6343d7c529c820d6b40c46b4bce91c7e03763c5a 100644
|
| --- a/pkg/compiler/lib/src/js_backend/runtime_types.dart
|
| +++ b/pkg/compiler/lib/src/js_backend/runtime_types.dart
|
| @@ -134,6 +134,8 @@ abstract class RuntimeTypesEncoder {
|
| [ShouldEncodeTypedefCallback shouldEncodeTypedef]);
|
|
|
| String getTypeRepresentationForTypeConstant(ResolutionDartType type);
|
| +
|
| + jsAst.Template get templateForIsVoidRti;
|
| }
|
|
|
| /// Common functionality for [_RuntimeTypesNeedBuilder] and [_RuntimeTypes].
|
| @@ -770,10 +772,10 @@ class _RuntimeTypes extends _RuntimeTypesBase
|
| class _RuntimeTypesEncoder implements RuntimeTypesEncoder {
|
| final Namer namer;
|
| final CommonElements commonElements;
|
| - final TypeRepresentationGenerator _representationGenerator;
|
| + final _TypeRepresentationGenerator _representationGenerator;
|
|
|
| _RuntimeTypesEncoder(this.namer, this.commonElements)
|
| - : _representationGenerator = new TypeRepresentationGenerator(namer);
|
| + : _representationGenerator = new _TypeRepresentationGenerator(namer);
|
|
|
| @override
|
| bool isSimpleFunctionType(ResolutionFunctionType type) {
|
| @@ -926,15 +928,22 @@ class _RuntimeTypesEncoder implements RuntimeTypesEncoder {
|
| String arguments = new List.filled(variables.length, 'dynamic').join(', ');
|
| return '$name<$arguments>';
|
| }
|
| +
|
| + static jsAst.Expression get _voidRti => js('1');
|
| +
|
| + @override
|
| + jsAst.Template get templateForIsVoidRti {
|
| + return jsAst.js.expressionTemplateFor("# === 1");
|
| + }
|
| }
|
|
|
| -class TypeRepresentationGenerator implements ResolutionDartTypeVisitor {
|
| +class _TypeRepresentationGenerator implements ResolutionDartTypeVisitor {
|
| final Namer namer;
|
| OnVariableCallback onVariable;
|
| ShouldEncodeTypedefCallback shouldEncodeTypedef;
|
| Map<ResolutionTypeVariableType, jsAst.Expression> typedefBindings;
|
|
|
| - TypeRepresentationGenerator(this.namer);
|
| + _TypeRepresentationGenerator(this.namer);
|
|
|
| /**
|
| * Creates a type representation for [type]. [onVariable] is called to provide
|
| @@ -1024,9 +1033,7 @@ class TypeRepresentationGenerator implements ResolutionDartTypeVisitor {
|
| // Type representations for functions have a property which is a tag marking
|
| // them as function types. The value is not used, so '1' is just a dummy.
|
| addProperty(namer.functionTypeTag, js.number(1));
|
| - if (type.returnType.isVoid) {
|
| - addProperty(namer.functionTypeVoidReturnTag, js('true'));
|
| - } else if (!type.returnType.treatAsDynamic) {
|
| + if (!type.returnType.treatAsDynamic) {
|
| addProperty(
|
| namer.functionTypeReturnTypeTag, visit(type.returnType, emitter));
|
| }
|
| @@ -1060,8 +1067,7 @@ class TypeRepresentationGenerator implements ResolutionDartTypeVisitor {
|
| }
|
|
|
| visitVoidType(ResolutionVoidType type, Emitter emitter) {
|
| - // TODO(ahe): Reify void type ("null" means "dynamic").
|
| - return js('null');
|
| + return _RuntimeTypesEncoder._voidRti;
|
| }
|
|
|
| visitTypedefType(ResolutionTypedefType type, Emitter emitter) {
|
|
|