Chromium Code Reviews| Index: pkg/compiler/lib/src/js_backend/checked_mode_helpers.dart |
| diff --git a/pkg/compiler/lib/src/js_backend/checked_mode_helpers.dart b/pkg/compiler/lib/src/js_backend/checked_mode_helpers.dart |
| index ab44766eea8b877bb925bed00bd66f5f0e6e846d..b05fe1fac1da9d366a768d23ed52dc3858f7f67d 100644 |
| --- a/pkg/compiler/lib/src/js_backend/checked_mode_helpers.dart |
| +++ b/pkg/compiler/lib/src/js_backend/checked_mode_helpers.dart |
| @@ -89,6 +89,18 @@ class TypeVariableCheckedModeHelper extends CheckedModeHelper { |
| } |
| } |
| +class FunctionWithRepresentationCheckedModeHelper extends CheckedModeHelper { |
|
Emily Fortuna
2017/02/25 00:26:02
Can you add a comment here to explain what you mea
sra1
2017/02/28 05:16:03
Done.
|
| + const FunctionWithRepresentationCheckedModeHelper(String name) : super(name); |
| + |
| + CallStructure get callStructure => CallStructure.TWO_ARGS; |
| + |
| + void generateAdditionalArguments(SsaCodeGenerator codegen, |
| + HTypeConversion node, List<jsAst.Expression> arguments) { |
| + codegen.use(node.typeRepresentation); |
| + arguments.add(codegen.pop()); |
| + } |
| +} |
| + |
| class SubtypeCheckedModeHelper extends CheckedModeHelper { |
| const SubtypeCheckedModeHelper(String name) : super(name); |
| @@ -149,6 +161,8 @@ class CheckedModeHelpers { |
| const TypeVariableCheckedModeHelper('assertSubtypeOfRuntimeType'), |
| const PropertyCheckedModeHelper('propertyTypeCast'), |
| const PropertyCheckedModeHelper('propertyTypeCheck'), |
| + const FunctionWithRepresentationCheckedModeHelper('functionTypeCast'), |
| + const FunctionWithRepresentationCheckedModeHelper('functionTypeCheck'), |
| ]; |
| // Checked mode helpers indexed by name. |
| @@ -212,7 +226,9 @@ class CheckedModeHelpers { |
| : 'assertSubtypeOfRuntimeType'; |
| } |
| - if (type.isFunctionType) return null; |
| + if (type.isFunctionType) { |
| + return typeCast ? 'functionTypeCast' : 'functionTypeCheck'; |
| + } |
| assert(invariant(NO_LOCATION_SPANNABLE, type.isInterfaceType, |
| message: "Unexpected type: $type")); |