| 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 import 'dart:collection'; | 5 import 'dart:collection'; |
| 6 | 6 |
| 7 import 'package:js_runtime/shared/embedded_names.dart'; | 7 import 'package:js_runtime/shared/embedded_names.dart'; |
| 8 | 8 |
| 9 import '../closure.dart'; | 9 import '../closure.dart'; |
| 10 import '../common.dart'; | 10 import '../common.dart'; |
| (...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 assert(result.isValid()); | 293 assert(result.isValid()); |
| 294 return result; | 294 return result; |
| 295 } | 295 } |
| 296 | 296 |
| 297 void addWithPosition(HInstruction instruction, ast.Node node) { | 297 void addWithPosition(HInstruction instruction, ast.Node node) { |
| 298 add(attachPosition(instruction, node)); | 298 add(attachPosition(instruction, node)); |
| 299 } | 299 } |
| 300 | 300 |
| 301 HTypeConversion buildFunctionTypeConversion( | 301 HTypeConversion buildFunctionTypeConversion( |
| 302 HInstruction original, DartType type, int kind) { | 302 HInstruction original, DartType type, int kind) { |
| 303 String name = | 303 HInstruction reifiedType = buildFunctionType(type); |
| 304 kind == HTypeConversion.CAST_TYPE_CHECK ? '_asCheck' : '_assertCheck'; | 304 return new HTypeConversion.viaMethodOnType( |
| 305 | 305 type, kind, original.instructionType, reifiedType, original); |
| 306 List<HInstruction> arguments = <HInstruction>[ | |
| 307 buildFunctionType(type), | |
| 308 original | |
| 309 ]; | |
| 310 pushInvokeDynamic( | |
| 311 null, | |
| 312 new Selector.call( | |
| 313 new Name(name, helpers.jsHelperLibrary), CallStructure.ONE_ARG), | |
| 314 null, | |
| 315 arguments); | |
| 316 | |
| 317 return new HTypeConversion(type, kind, original.instructionType, pop()); | |
| 318 } | 306 } |
| 319 | 307 |
| 320 /** | 308 /** |
| 321 * Returns a complete argument list for a call of [function]. | 309 * Returns a complete argument list for a call of [function]. |
| 322 */ | 310 */ |
| 323 List<HInstruction> completeSendArgumentsList( | 311 List<HInstruction> completeSendArgumentsList( |
| 324 FunctionElement function, | 312 FunctionElement function, |
| 325 Selector selector, | 313 Selector selector, |
| 326 List<HInstruction> providedArguments, | 314 List<HInstruction> providedArguments, |
| 327 ast.Node currentNode) { | 315 ast.Node currentNode) { |
| (...skipping 3135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3463 !backend.isJsInterop(constructor)) { | 3451 !backend.isJsInterop(constructor)) { |
| 3464 // Native class generative constructors take a pre-constructed object. | 3452 // Native class generative constructors take a pre-constructed object. |
| 3465 inputs.add(graph.addConstantNull(compiler)); | 3453 inputs.add(graph.addConstantNull(compiler)); |
| 3466 } | 3454 } |
| 3467 inputs.addAll(makeStaticArgumentList( | 3455 inputs.addAll(makeStaticArgumentList( |
| 3468 callStructure, send.arguments, constructorImplementation)); | 3456 callStructure, send.arguments, constructorImplementation)); |
| 3469 | 3457 |
| 3470 TypeMask elementType = computeType(constructor); | 3458 TypeMask elementType = computeType(constructor); |
| 3471 if (isFixedListConstructorCall) { | 3459 if (isFixedListConstructorCall) { |
| 3472 if (!inputs[0].isNumber(compiler)) { | 3460 if (!inputs[0].isNumber(compiler)) { |
| 3473 HTypeConversion conversion = new HTypeConversion( | 3461 HTypeConversion conversion = new HTypeConversion(null, |
| 3474 null, | 3462 HTypeConversion.ARGUMENT_TYPE_CHECK, backend.numType, inputs[0]); |
| 3475 HTypeConversion.ARGUMENT_TYPE_CHECK, | |
| 3476 backend.numType, | |
| 3477 inputs[0], | |
| 3478 null); | |
| 3479 add(conversion); | 3463 add(conversion); |
| 3480 inputs[0] = conversion; | 3464 inputs[0] = conversion; |
| 3481 } | 3465 } |
| 3482 js.Template code = js.js.parseForeignJS('new Array(#)'); | 3466 js.Template code = js.js.parseForeignJS('new Array(#)'); |
| 3483 var behavior = new native.NativeBehavior(); | 3467 var behavior = new native.NativeBehavior(); |
| 3484 behavior.typesReturned.add(expectedType); | 3468 behavior.typesReturned.add(expectedType); |
| 3485 // The allocation can throw only if the given length is a double or | 3469 // The allocation can throw only if the given length is a double or |
| 3486 // outside the unsigned 32 bit range. | 3470 // outside the unsigned 32 bit range. |
| 3487 // TODO(sra): Array allocation should be an instruction so that canThrow | 3471 // TODO(sra): Array allocation should be an instruction so that canThrow |
| 3488 // can depend on a length type discovered in optimization. | 3472 // can depend on a length type discovered in optimization. |
| (...skipping 3297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6786 this.oldReturnLocal, | 6770 this.oldReturnLocal, |
| 6787 this.oldReturnType, | 6771 this.oldReturnType, |
| 6788 this.oldResolvedAst, | 6772 this.oldResolvedAst, |
| 6789 this.oldStack, | 6773 this.oldStack, |
| 6790 this.oldLocalsHandler, | 6774 this.oldLocalsHandler, |
| 6791 this.inTryStatement, | 6775 this.inTryStatement, |
| 6792 this.allFunctionsCalledOnce, | 6776 this.allFunctionsCalledOnce, |
| 6793 this.oldElementInferenceResults) | 6777 this.oldElementInferenceResults) |
| 6794 : super(function); | 6778 : super(function); |
| 6795 } | 6779 } |
| OLD | NEW |