| OLD | NEW | 
|     1 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file |     1 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file | 
|     2 // for details. All rights reserved. Use of this source code is governed by a |     2 // for details. All rights reserved. Use of this source code is governed by a | 
|     3 // BSD-style license that can be found in the LICENSE file. |     3 // BSD-style license that can be found in the LICENSE file. | 
|     4  |     4  | 
|     5 part of js_backend; |     5 part of js_backend; | 
|     6  |     6  | 
|     7 class JavaScriptItemCompilationContext extends ItemCompilationContext { |     7 class JavaScriptItemCompilationContext extends ItemCompilationContext { | 
|     8   final Set<HInstruction> boundsChecked = new Set<HInstruction>(); |     8   final Set<HInstruction> boundsChecked = new Set<HInstruction>(); | 
|     9   final Set<HInstruction> allocatedFixedLists = new Set<HInstruction>(); |     9   final Set<HInstruction> allocatedFixedLists = new Set<HInstruction>(); | 
|    10 } |    10 } | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
|    28     return new jsAst.Call(new jsAst.VariableUse(helperName), arguments); |    28     return new jsAst.Call(new jsAst.VariableUse(helperName), arguments); | 
|    29   } |    29   } | 
|    30  |    30  | 
|    31   void generateAdditionalArguments(SsaCodeGenerator codegen, |    31   void generateAdditionalArguments(SsaCodeGenerator codegen, | 
|    32                                    HTypeConversion node, |    32                                    HTypeConversion node, | 
|    33                                    List<jsAst.Expression> arguments) { |    33                                    List<jsAst.Expression> arguments) { | 
|    34     // No additional arguments needed. |    34     // No additional arguments needed. | 
|    35   } |    35   } | 
|    36 } |    36 } | 
|    37  |    37  | 
 |    38 class MalformedCheckedModeHelper extends CheckedModeHelper { | 
 |    39   const MalformedCheckedModeHelper(String name) : super(name); | 
 |    40  | 
 |    41   void generateAdditionalArguments(SsaCodeGenerator codegen, | 
 |    42                                    HTypeConversion node, | 
 |    43                                    List<jsAst.Expression> arguments) { | 
 |    44     ErroneousElement element = node.typeExpression.element; | 
 |    45     arguments.add(js.string(element.message)); | 
 |    46   } | 
 |    47 } | 
 |    48  | 
|    38 class PropertyCheckedModeHelper extends CheckedModeHelper { |    49 class PropertyCheckedModeHelper extends CheckedModeHelper { | 
|    39   const PropertyCheckedModeHelper(String name) : super(name); |    50   const PropertyCheckedModeHelper(String name) : super(name); | 
|    40  |    51  | 
|    41   void generateAdditionalArguments(SsaCodeGenerator codegen, |    52   void generateAdditionalArguments(SsaCodeGenerator codegen, | 
|    42                                    HTypeConversion node, |    53                                    HTypeConversion node, | 
|    43                                    List<jsAst.Expression> arguments) { |    54                                    List<jsAst.Expression> arguments) { | 
|    44     DartType type = node.typeExpression; |    55     DartType type = node.typeExpression; | 
|    45     String additionalArgument = codegen.backend.namer.operatorIsType(type); |    56     String additionalArgument = codegen.backend.namer.operatorIsType(type); | 
|    46     arguments.add(js.string(additionalArgument)); |    57     arguments.add(js.string(additionalArgument)); | 
|    47   } |    58   } | 
| (...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   331  |   342  | 
|   332   /// List of elements that the backend may use. |   343   /// List of elements that the backend may use. | 
|   333   final Set<Element> helpersUsed = new Set<Element>(); |   344   final Set<Element> helpersUsed = new Set<Element>(); | 
|   334  |   345  | 
|   335  |   346  | 
|   336   /// Set of typedefs that are used as type literals. |   347   /// Set of typedefs that are used as type literals. | 
|   337   final Set<TypedefElement> typedefTypeLiterals = new Set<TypedefElement>(); |   348   final Set<TypedefElement> typedefTypeLiterals = new Set<TypedefElement>(); | 
|   338  |   349  | 
|   339   /// All the checked mode helpers. |   350   /// All the checked mode helpers. | 
|   340   static const checkedModeHelpers = const [ |   351   static const checkedModeHelpers = const [ | 
 |   352       const MalformedCheckedModeHelper('checkMalformedType'), | 
|   341       const CheckedModeHelper('voidTypeCheck'), |   353       const CheckedModeHelper('voidTypeCheck'), | 
|   342       const CheckedModeHelper('stringTypeCast'), |   354       const CheckedModeHelper('stringTypeCast'), | 
|   343       const CheckedModeHelper('stringTypeCheck'), |   355       const CheckedModeHelper('stringTypeCheck'), | 
|   344       const CheckedModeHelper('doubleTypeCast'), |   356       const CheckedModeHelper('doubleTypeCast'), | 
|   345       const CheckedModeHelper('doubleTypeCheck'), |   357       const CheckedModeHelper('doubleTypeCheck'), | 
|   346       const CheckedModeHelper('numTypeCast'), |   358       const CheckedModeHelper('numTypeCast'), | 
|   347       const CheckedModeHelper('numTypeCheck'), |   359       const CheckedModeHelper('numTypeCheck'), | 
|   348       const CheckedModeHelper('boolTypeCast'), |   360       const CheckedModeHelper('boolTypeCast'), | 
|   349       const CheckedModeHelper('boolTypeCheck'), |   361       const CheckedModeHelper('boolTypeCheck'), | 
|   350       const CheckedModeHelper('intTypeCast'), |   362       const CheckedModeHelper('intTypeCast'), | 
| (...skipping 630 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   981           enqueue(world, helper.getElement(compiler), elements); |   993           enqueue(world, helper.getElement(compiler), elements); | 
|   982         } |   994         } | 
|   983         // We also need the native variant of the check (for DOM types). |   995         // We also need the native variant of the check (for DOM types). | 
|   984         helper = getNativeCheckedModeHelper(type, typeCast: false); |   996         helper = getNativeCheckedModeHelper(type, typeCast: false); | 
|   985         if (helper != null) { |   997         if (helper != null) { | 
|   986           enqueue(world, helper.getElement(compiler), elements); |   998           enqueue(world, helper.getElement(compiler), elements); | 
|   987         } |   999         } | 
|   988       } |  1000       } | 
|   989     } |  1001     } | 
|   990     bool isTypeVariable = type.kind == TypeKind.TYPE_VARIABLE; |  1002     bool isTypeVariable = type.kind == TypeKind.TYPE_VARIABLE; | 
 |  1003     if (type.kind == TypeKind.MALFORMED_TYPE) { | 
 |  1004       enqueueInResolution(getThrowTypeError(), elements); | 
 |  1005     } | 
|   991     if (!type.treatAsRaw || type.containsTypeVariables) { |  1006     if (!type.treatAsRaw || type.containsTypeVariables) { | 
|   992       enqueueInResolution(getSetRuntimeTypeInfo(), elements); |  1007       enqueueInResolution(getSetRuntimeTypeInfo(), elements); | 
|   993       enqueueInResolution(getGetRuntimeTypeInfo(), elements); |  1008       enqueueInResolution(getGetRuntimeTypeInfo(), elements); | 
|   994       enqueueInResolution(getGetRuntimeTypeArgument(), elements); |  1009       enqueueInResolution(getGetRuntimeTypeArgument(), elements); | 
|   995       if (inCheckedMode) { |  1010       if (inCheckedMode) { | 
|   996         enqueueInResolution(getAssertSubtype(), elements); |  1011         enqueueInResolution(getAssertSubtype(), elements); | 
|   997       } |  1012       } | 
|   998       enqueueInResolution(getCheckSubtype(), elements); |  1013       enqueueInResolution(getCheckSubtype(), elements); | 
|   999       if (isTypeVariable) { |  1014       if (isTypeVariable) { | 
|  1000         enqueueInResolution(getCheckSubtypeOfRuntimeType(), elements); |  1015         enqueueInResolution(getCheckSubtypeOfRuntimeType(), elements); | 
| (...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1316     if (name == null) return null; |  1331     if (name == null) return null; | 
|  1317     CheckedModeHelper helper = checkedModeHelperByName[name]; |  1332     CheckedModeHelper helper = checkedModeHelperByName[name]; | 
|  1318     assert(helper != null); |  1333     assert(helper != null); | 
|  1319     return helper; |  1334     return helper; | 
|  1320   } |  1335   } | 
|  1321  |  1336  | 
|  1322   String getCheckedModeHelperNameInternal(DartType type, |  1337   String getCheckedModeHelperNameInternal(DartType type, | 
|  1323                                           {bool typeCast, |  1338                                           {bool typeCast, | 
|  1324                                            bool nativeCheckOnly}) { |  1339                                            bool nativeCheckOnly}) { | 
|  1325     assert(type.kind != TypeKind.TYPEDEF); |  1340     assert(type.kind != TypeKind.TYPEDEF); | 
 |  1341     if (type.kind == TypeKind.MALFORMED_TYPE) { | 
 |  1342       // The same error is thrown for type test and type cast of a malformed | 
 |  1343       // type so we only need one check method. | 
 |  1344       return 'checkMalformedType'; | 
 |  1345     } | 
|  1326     Element element = type.element; |  1346     Element element = type.element; | 
|  1327     bool nativeCheck = nativeCheckOnly || |  1347     bool nativeCheck = nativeCheckOnly || | 
|  1328         emitter.nativeEmitter.requiresNativeIsCheck(element); |  1348         emitter.nativeEmitter.requiresNativeIsCheck(element); | 
|  1329  |  1349  | 
|  1330     // TODO(13955), TODO(9731).  The test for non-primitive types should use an |  1350     // TODO(13955), TODO(9731).  The test for non-primitive types should use an | 
|  1331     // interceptor.  The interceptor should be an argument to HTypeConversion so |  1351     // interceptor.  The interceptor should be an argument to HTypeConversion so | 
|  1332     // that it can be optimized by standard interceptor optimizations. |  1352     // that it can be optimized by standard interceptor optimizations. | 
|  1333     nativeCheck = true; |  1353     nativeCheck = true; | 
|  1334  |  1354  | 
|  1335     if (type == compiler.types.voidType) { |  1355     if (type == compiler.types.voidType) { | 
| (...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1860     copy(constant.values); |  1880     copy(constant.values); | 
|  1861     copy(constant.protoValue); |  1881     copy(constant.protoValue); | 
|  1862     copy(constant); |  1882     copy(constant); | 
|  1863   } |  1883   } | 
|  1864  |  1884  | 
|  1865   void visitConstructed(ConstructedConstant constant) { |  1885   void visitConstructed(ConstructedConstant constant) { | 
|  1866     copy(constant.fields); |  1886     copy(constant.fields); | 
|  1867     copy(constant); |  1887     copy(constant); | 
|  1868   } |  1888   } | 
|  1869 } |  1889 } | 
| OLD | NEW |