| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 'package:js_runtime/shared/embedded_names.dart'; | 5 import 'package:js_runtime/shared/embedded_names.dart'; |
| 6 import 'package:kernel/ast.dart' as ir; | 6 import 'package:kernel/ast.dart' as ir; |
| 7 | 7 |
| 8 import '../constants/expressions.dart'; | 8 import '../constants/expressions.dart'; |
| 9 import '../common.dart'; | 9 import '../common.dart'; |
| 10 import '../common/names.dart'; | 10 import '../common/names.dart'; |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 } | 62 } |
| 63 _typeConverter = new DartTypeConverter(this); | 63 _typeConverter = new DartTypeConverter(this); |
| 64 } | 64 } |
| 65 | 65 |
| 66 Compiler get _compiler => _backend.compiler; | 66 Compiler get _compiler => _backend.compiler; |
| 67 TreeElements get elements => _resolvedAst.elements; | 67 TreeElements get elements => _resolvedAst.elements; |
| 68 DiagnosticReporter get reporter => _compiler.reporter; | 68 DiagnosticReporter get reporter => _compiler.reporter; |
| 69 Element get _target => _resolvedAst.element; | 69 Element get _target => _resolvedAst.element; |
| 70 ClosedWorld get _closedWorld => _compiler.closedWorld; | 70 ClosedWorld get _closedWorld => _compiler.closedWorld; |
| 71 | 71 |
| 72 GlobalTypeInferenceResults get _globalInferenceResults => |
| 73 _compiler.globalInference.results; |
| 74 |
| 72 GlobalTypeInferenceElementResult _resultOf(Element e) => | 75 GlobalTypeInferenceElementResult _resultOf(Element e) => |
| 73 _compiler.globalInference.results.resultOf(e); | 76 _globalInferenceResults.resultOf(e); |
| 74 | 77 |
| 75 ConstantValue getConstantForSymbol(ir.SymbolLiteral node) { | 78 ConstantValue getConstantForSymbol(ir.SymbolLiteral node) { |
| 76 if (kernel.syntheticNodes.contains(node)) { | 79 if (kernel.syntheticNodes.contains(node)) { |
| 77 return _backend.constantSystem.createSymbol(_compiler, node.value); | 80 return _backend.constantSystem.createSymbol(_compiler, node.value); |
| 78 } | 81 } |
| 79 ast.Node astNode = getNode(node); | 82 ast.Node astNode = getNode(node); |
| 80 ConstantValue constantValue = _backend.constants | 83 ConstantValue constantValue = _backend.constants |
| 81 .getConstantValueForNode(astNode, _resolvedAst.elements); | 84 .getConstantValueForNode(astNode, _resolvedAst.elements); |
| 82 assert(invariant(astNode, constantValue != null, | 85 assert(invariant(astNode, constantValue != null, |
| 83 message: 'No constant computed for $node')); | 86 message: 'No constant computed for $node')); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 return getElement(variable) as LocalElement; | 129 return getElement(variable) as LocalElement; |
| 127 } | 130 } |
| 128 | 131 |
| 129 bool getCanThrow(ir.Node procedure) { | 132 bool getCanThrow(ir.Node procedure) { |
| 130 FunctionElement function = getElement(procedure); | 133 FunctionElement function = getElement(procedure); |
| 131 return !_closedWorld.getCannotThrow(function); | 134 return !_closedWorld.getCannotThrow(function); |
| 132 } | 135 } |
| 133 | 136 |
| 134 TypeMask returnTypeOf(ir.Member node) { | 137 TypeMask returnTypeOf(ir.Member node) { |
| 135 return TypeMaskFactory.inferredReturnTypeForElement( | 138 return TypeMaskFactory.inferredReturnTypeForElement( |
| 136 getElement(node), _compiler); | 139 getElement(node), _globalInferenceResults); |
| 137 } | 140 } |
| 138 | 141 |
| 139 SideEffects getSideEffects(ir.Node node) { | 142 SideEffects getSideEffects(ir.Node node) { |
| 140 return _closedWorld.getSideEffectsOfElement(getElement(node)); | 143 return _closedWorld.getSideEffectsOfElement(getElement(node)); |
| 141 } | 144 } |
| 142 | 145 |
| 143 CallStructure getCallStructure(ir.Arguments arguments) { | 146 CallStructure getCallStructure(ir.Arguments arguments) { |
| 144 int argumentCount = arguments.positional.length + arguments.named.length; | 147 int argumentCount = arguments.positional.length + arguments.named.length; |
| 145 List<String> namedArguments = arguments.named.map((e) => e.name).toList(); | 148 List<String> namedArguments = arguments.named.map((e) => e.name).toList(); |
| 146 return new CallStructure(argumentCount, namedArguments); | 149 return new CallStructure(argumentCount, namedArguments); |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 if (mask.isContainer && (mask as ContainerTypeMask).length != null) { | 261 if (mask.isContainer && (mask as ContainerTypeMask).length != null) { |
| 259 // A container on which we have inferred the length. | 262 // A container on which we have inferred the length. |
| 260 return true; | 263 return true; |
| 261 } | 264 } |
| 262 // TODO(sra): Recognize any combination of fixed length indexables. | 265 // TODO(sra): Recognize any combination of fixed length indexables. |
| 263 if (mask.containsOnly( | 266 if (mask.containsOnly( |
| 264 _closedWorld.backendClasses.fixedListImplementation) || | 267 _closedWorld.backendClasses.fixedListImplementation) || |
| 265 mask.containsOnly( | 268 mask.containsOnly( |
| 266 _closedWorld.backendClasses.constListImplementation) || | 269 _closedWorld.backendClasses.constListImplementation) || |
| 267 mask.containsOnlyString(_closedWorld) || | 270 mask.containsOnlyString(_closedWorld) || |
| 268 backend.isTypedArray(mask)) { | 271 _closedWorld.commonMasks.isTypedArray(mask)) { |
| 269 return true; | 272 return true; |
| 270 } | 273 } |
| 271 return false; | 274 return false; |
| 272 } | 275 } |
| 273 | 276 |
| 274 TypeMask inferredIndexType(ir.ForInStatement forInStatement) { | 277 TypeMask inferredIndexType(ir.ForInStatement forInStatement) { |
| 275 return TypeMaskFactory.inferredTypeForSelector( | 278 return TypeMaskFactory.inferredTypeForSelector(new Selector.index(), |
| 276 new Selector.index(), typeOfIterator(forInStatement), _compiler); | 279 typeOfIterator(forInStatement), _globalInferenceResults); |
| 277 } | 280 } |
| 278 | 281 |
| 279 TypeMask inferredTypeOf(ir.Member node) { | 282 TypeMask inferredTypeOf(ir.Member node) { |
| 280 return TypeMaskFactory.inferredTypeForElement(getElement(node), _compiler); | 283 return TypeMaskFactory.inferredTypeForElement( |
| 284 getElement(node), _globalInferenceResults); |
| 281 } | 285 } |
| 282 | 286 |
| 283 TypeMask selectorTypeOf(Selector selector, TypeMask mask) { | 287 TypeMask selectorTypeOf(Selector selector, TypeMask mask) { |
| 284 return TypeMaskFactory.inferredTypeForSelector(selector, mask, _compiler); | 288 return TypeMaskFactory.inferredTypeForSelector( |
| 289 selector, mask, _globalInferenceResults); |
| 285 } | 290 } |
| 286 | 291 |
| 287 TypeMask typeFromNativeBehavior(native.NativeBehavior nativeBehavior) { | 292 TypeMask typeFromNativeBehavior(native.NativeBehavior nativeBehavior) { |
| 288 return TypeMaskFactory.fromNativeBehavior(nativeBehavior, _compiler); | 293 return TypeMaskFactory.fromNativeBehavior(nativeBehavior, _closedWorld); |
| 289 } | 294 } |
| 290 | 295 |
| 291 ConstantValue getConstantFor(ir.Node node) { | 296 ConstantValue getConstantFor(ir.Node node) { |
| 292 ConstantValue constantValue = | 297 ConstantValue constantValue = |
| 293 _backend.constants.getConstantValueForNode(getNode(node), elements); | 298 _backend.constants.getConstantValueForNode(getNode(node), elements); |
| 294 assert(invariant(getNode(node), constantValue != null, | 299 assert(invariant(getNode(node), constantValue != null, |
| 295 message: 'No constant computed for $node')); | 300 message: 'No constant computed for $node')); |
| 296 return constantValue; | 301 return constantValue; |
| 297 } | 302 } |
| 298 | 303 |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 352 ir.Procedure get mapLiteralUntypedMaker => | 357 ir.Procedure get mapLiteralUntypedMaker => |
| 353 kernel.functions[_backend.helpers.mapLiteralUntypedMaker]; | 358 kernel.functions[_backend.helpers.mapLiteralUntypedMaker]; |
| 354 | 359 |
| 355 MemberElement get jsIndexableLength => _backend.helpers.jsIndexableLength; | 360 MemberElement get jsIndexableLength => _backend.helpers.jsIndexableLength; |
| 356 | 361 |
| 357 ir.Procedure get checkConcurrentModificationError => | 362 ir.Procedure get checkConcurrentModificationError => |
| 358 kernel.functions[_backend.helpers.checkConcurrentModificationError]; | 363 kernel.functions[_backend.helpers.checkConcurrentModificationError]; |
| 359 | 364 |
| 360 TypeMask get checkConcurrentModificationErrorReturnType => | 365 TypeMask get checkConcurrentModificationErrorReturnType => |
| 361 TypeMaskFactory.inferredReturnTypeForElement( | 366 TypeMaskFactory.inferredReturnTypeForElement( |
| 362 _backend.helpers.checkConcurrentModificationError, _compiler); | 367 _backend.helpers.checkConcurrentModificationError, |
| 368 _globalInferenceResults); |
| 363 | 369 |
| 364 ir.Procedure get checkSubtype => | 370 ir.Procedure get checkSubtype => |
| 365 kernel.functions[_backend.helpers.checkSubtype]; | 371 kernel.functions[_backend.helpers.checkSubtype]; |
| 366 | 372 |
| 367 ir.Procedure get checkSubtypeOfRuntimeType => | 373 ir.Procedure get checkSubtypeOfRuntimeType => |
| 368 kernel.functions[_backend.helpers.checkSubtypeOfRuntimeType]; | 374 kernel.functions[_backend.helpers.checkSubtypeOfRuntimeType]; |
| 369 | 375 |
| 370 ir.Procedure get assertHelper => | 376 ir.Procedure get assertHelper => |
| 371 kernel.functions[_backend.helpers.assertHelper]; | 377 kernel.functions[_backend.helpers.assertHelper]; |
| 372 | 378 |
| 373 TypeMask get throwTypeErrorType => TypeMaskFactory | 379 TypeMask get throwTypeErrorType => |
| 374 .inferredReturnTypeForElement(_backend.helpers.throwTypeError, _compiler); | 380 TypeMaskFactory.inferredReturnTypeForElement( |
| 381 _backend.helpers.throwTypeError, _globalInferenceResults); |
| 375 | 382 |
| 376 TypeMask get assertHelperReturnType => TypeMaskFactory | 383 TypeMask get assertHelperReturnType => |
| 377 .inferredReturnTypeForElement(_backend.helpers.assertHelper, _compiler); | 384 TypeMaskFactory.inferredReturnTypeForElement( |
| 385 _backend.helpers.assertHelper, _globalInferenceResults); |
| 378 | 386 |
| 379 ir.Procedure get assertTest => kernel.functions[_backend.helpers.assertTest]; | 387 ir.Procedure get assertTest => kernel.functions[_backend.helpers.assertTest]; |
| 380 | 388 |
| 381 TypeMask get assertTestReturnType => TypeMaskFactory | 389 TypeMask get assertTestReturnType => |
| 382 .inferredReturnTypeForElement(_backend.helpers.assertTest, _compiler); | 390 TypeMaskFactory.inferredReturnTypeForElement( |
| 391 _backend.helpers.assertTest, _globalInferenceResults); |
| 383 | 392 |
| 384 ir.Procedure get assertThrow => | 393 ir.Procedure get assertThrow => |
| 385 kernel.functions[_backend.helpers.assertThrow]; | 394 kernel.functions[_backend.helpers.assertThrow]; |
| 386 | 395 |
| 387 ir.Procedure get setRuntimeTypeInfo => | 396 ir.Procedure get setRuntimeTypeInfo => |
| 388 kernel.functions[_backend.helpers.setRuntimeTypeInfo]; | 397 kernel.functions[_backend.helpers.setRuntimeTypeInfo]; |
| 389 | 398 |
| 390 TypeMask get assertThrowReturnType => TypeMaskFactory | 399 TypeMask get assertThrowReturnType => |
| 391 .inferredReturnTypeForElement(_backend.helpers.assertThrow, _compiler); | 400 TypeMaskFactory.inferredReturnTypeForElement( |
| 401 _backend.helpers.assertThrow, _globalInferenceResults); |
| 392 | 402 |
| 393 ir.Procedure get runtimeTypeToString => | 403 ir.Procedure get runtimeTypeToString => |
| 394 kernel.functions[_backend.helpers.runtimeTypeToString]; | 404 kernel.functions[_backend.helpers.runtimeTypeToString]; |
| 395 | 405 |
| 396 ir.Procedure get createRuntimeType => | 406 ir.Procedure get createRuntimeType => |
| 397 kernel.functions[_backend.helpers.createRuntimeType]; | 407 kernel.functions[_backend.helpers.createRuntimeType]; |
| 398 | 408 |
| 399 TypeMask get createRuntimeTypeReturnType => | 409 TypeMask get createRuntimeTypeReturnType => |
| 400 TypeMaskFactory.inferredReturnTypeForElement( | 410 TypeMaskFactory.inferredReturnTypeForElement( |
| 401 _backend.helpers.createRuntimeType, _compiler); | 411 _backend.helpers.createRuntimeType, _globalInferenceResults); |
| 402 | 412 |
| 403 ir.Class get objectClass => kernel.classes[_compiler.coreClasses.objectClass]; | 413 ir.Class get objectClass => kernel.classes[_compiler.coreClasses.objectClass]; |
| 404 | 414 |
| 405 ir.Procedure get currentIsolate => | 415 ir.Procedure get currentIsolate => |
| 406 kernel.functions[_backend.helpers.currentIsolate]; | 416 kernel.functions[_backend.helpers.currentIsolate]; |
| 407 | 417 |
| 408 ir.Procedure get callInIsolate => | 418 ir.Procedure get callInIsolate => |
| 409 kernel.functions[_backend.helpers.callInIsolate]; | 419 kernel.functions[_backend.helpers.callInIsolate]; |
| 410 | 420 |
| 411 bool isInForeignLibrary(ir.Member member) => | 421 bool isInForeignLibrary(ir.Member member) => |
| (...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 844 astAdapter.reporter.internalError( | 854 astAdapter.reporter.internalError( |
| 845 CURRENT_ELEMENT_SPANNABLE, "Unexpected constant target: $element."); | 855 CURRENT_ELEMENT_SPANNABLE, "Unexpected constant target: $element."); |
| 846 return null; | 856 return null; |
| 847 } | 857 } |
| 848 | 858 |
| 849 @override | 859 @override |
| 850 ConstantExpression visitStringLiteral(ir.StringLiteral node) { | 860 ConstantExpression visitStringLiteral(ir.StringLiteral node) { |
| 851 return new StringConstantExpression(node.value); | 861 return new StringConstantExpression(node.value); |
| 852 } | 862 } |
| 853 } | 863 } |
| OLD | NEW |