| 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 '../closure.dart'; | 5 import '../closure.dart'; |
| 6 import '../constants/constant_system.dart'; |
| 6 import '../common/codegen.dart' show CodegenRegistry; | 7 import '../common/codegen.dart' show CodegenRegistry; |
| 7 import '../common_elements.dart'; | 8 import '../common_elements.dart'; |
| 8 import '../compiler.dart'; | 9 import '../compiler.dart'; |
| 9 import '../diagnostics/diagnostic_listener.dart'; | 10 import '../diagnostics/diagnostic_listener.dart'; |
| 10 import '../elements/elements.dart'; | 11 import '../elements/elements.dart'; |
| 11 import '../elements/entities.dart' show Entity, Local; | 12 import '../elements/entities.dart' show Entity, Local; |
| 12 import '../elements/resolution_types.dart'; | 13 import '../elements/resolution_types.dart'; |
| 14 import '../js_backend/backend_helpers.dart'; |
| 15 import '../js_backend/backend_usage.dart'; |
| 16 import '../js_backend/constant_handler_javascript.dart'; |
| 13 import '../js_backend/js_backend.dart'; | 17 import '../js_backend/js_backend.dart'; |
| 18 import '../js_backend/native_data.dart'; |
| 19 import '../js_backend/js_interop_analysis.dart'; |
| 20 import '../js_backend/interceptor_data.dart'; |
| 21 import '../js_backend/mirrors_data.dart'; |
| 22 import '../js_emitter/code_emitter_task.dart'; |
| 14 import '../options.dart'; | 23 import '../options.dart'; |
| 15 import '../resolution/tree_elements.dart'; | 24 import '../resolution/tree_elements.dart'; |
| 16 import '../types/types.dart'; | 25 import '../types/types.dart'; |
| 17 import '../world.dart' show ClosedWorld; | 26 import '../world.dart' show ClosedWorld; |
| 18 import 'jump_handler.dart'; | 27 import 'jump_handler.dart'; |
| 19 import 'locals_handler.dart'; | 28 import 'locals_handler.dart'; |
| 20 import 'nodes.dart'; | 29 import 'nodes.dart'; |
| 21 import 'type_builder.dart'; | 30 import 'type_builder.dart'; |
| 22 | 31 |
| 23 /// Base class for objects that build up an SSA graph. | 32 /// Base class for objects that build up an SSA graph. |
| (...skipping 24 matching lines...) Expand all Loading... |
| 48 ClosedWorld get closedWorld; | 57 ClosedWorld get closedWorld; |
| 49 | 58 |
| 50 CommonMasks get commonMasks => closedWorld.commonMasks; | 59 CommonMasks get commonMasks => closedWorld.commonMasks; |
| 51 | 60 |
| 52 DiagnosticReporter get reporter => backend.reporter; | 61 DiagnosticReporter get reporter => backend.reporter; |
| 53 | 62 |
| 54 CompilerOptions get options => compiler.options; | 63 CompilerOptions get options => compiler.options; |
| 55 | 64 |
| 56 CommonElements get commonElements => closedWorld.commonElements; | 65 CommonElements get commonElements => closedWorld.commonElements; |
| 57 | 66 |
| 67 CodeEmitterTask get emitter => backend.emitter; |
| 68 |
| 58 GlobalTypeInferenceResults get globalInferenceResults => | 69 GlobalTypeInferenceResults get globalInferenceResults => |
| 59 compiler.globalInference.results; | 70 compiler.globalInference.results; |
| 60 | 71 |
| 61 ClosureTask get closureToClassMapper => compiler.closureToClassMapper; | 72 ClosureTask get closureToClassMapper => compiler.closureToClassMapper; |
| 62 | 73 |
| 74 NativeData get nativeData => backend.nativeData; |
| 75 |
| 76 InterceptorData get interceptorData => backend.interceptorData; |
| 77 |
| 78 BackendUsage get backendUsage => backend.backendUsage; |
| 79 |
| 80 Namer get namer => backend.namer; |
| 81 |
| 82 RuntimeTypesNeed get rtiNeed => backend.rtiNeed; |
| 83 |
| 84 JavaScriptConstantCompiler get constants => backend.constants; |
| 85 |
| 86 ConstantSystem get constantSystem => constants.constantSystem; |
| 87 |
| 88 BackendHelpers get helpers => backend.helpers; |
| 89 |
| 90 RuntimeTypesEncoder get rtiEncoder => backend.rtiEncoder; |
| 91 |
| 92 FunctionInlineCache get inlineCache => backend.inlineCache; |
| 93 |
| 94 MirrorsData get mirrorsData => backend.mirrorsData; |
| 95 |
| 96 JsInteropAnalysis get jsInteropAnalysis => backend.jsInteropAnalysis; |
| 97 |
| 63 /// Used to track the locals while building the graph. | 98 /// Used to track the locals while building the graph. |
| 64 LocalsHandler localsHandler; | 99 LocalsHandler localsHandler; |
| 65 | 100 |
| 66 /// A stack of instructions. | 101 /// A stack of instructions. |
| 67 /// | 102 /// |
| 68 /// We build the SSA graph by simulating a stack machine. | 103 /// We build the SSA graph by simulating a stack machine. |
| 69 List<HInstruction> stack = <HInstruction>[]; | 104 List<HInstruction> stack = <HInstruction>[]; |
| 70 | 105 |
| 71 /// The count of nested loops we are currently building. | 106 /// The count of nested loops we are currently building. |
| 72 /// | 107 /// |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 208 // TODO(karlklose): this is needed to avoid a bug where the resolved type is | 243 // TODO(karlklose): this is needed to avoid a bug where the resolved type is |
| 209 // not stored on a type annotation in the closure translator. Remove when | 244 // not stored on a type annotation in the closure translator. Remove when |
| 210 // fixed. | 245 // fixed. |
| 211 bool hasDirectLocal(Local local) { | 246 bool hasDirectLocal(Local local) { |
| 212 return !localsHandler.isAccessedDirectly(local) || | 247 return !localsHandler.isAccessedDirectly(local) || |
| 213 localsHandler.directLocals[local] != null; | 248 localsHandler.directLocals[local] != null; |
| 214 } | 249 } |
| 215 | 250 |
| 216 HInstruction callSetRuntimeTypeInfoWithTypeArguments(ResolutionDartType type, | 251 HInstruction callSetRuntimeTypeInfoWithTypeArguments(ResolutionDartType type, |
| 217 List<HInstruction> rtiInputs, HInstruction newObject) { | 252 List<HInstruction> rtiInputs, HInstruction newObject) { |
| 218 if (!backend.rtiNeed.classNeedsRti(type.element)) { | 253 if (!rtiNeed.classNeedsRti(type.element)) { |
| 219 return newObject; | 254 return newObject; |
| 220 } | 255 } |
| 221 | 256 |
| 222 HInstruction typeInfo = new HTypeInfoExpression( | 257 HInstruction typeInfo = new HTypeInfoExpression( |
| 223 TypeInfoExpressionKind.INSTANCE, | 258 TypeInfoExpressionKind.INSTANCE, |
| 224 (type.element as ClassElement).thisType, | 259 (type.element as ClassElement).thisType, |
| 225 rtiInputs, | 260 rtiInputs, |
| 226 closedWorld.commonMasks.dynamicType); | 261 closedWorld.commonMasks.dynamicType); |
| 227 add(typeInfo); | 262 add(typeInfo); |
| 228 return callSetRuntimeTypeInfo(typeInfo, newObject); | 263 return callSetRuntimeTypeInfo(typeInfo, newObject); |
| 229 } | 264 } |
| 230 | 265 |
| 231 /// Called when control flow is about to change, in which case we need to | 266 /// Called when control flow is about to change, in which case we need to |
| 232 /// specify special successors if we are already in a try/catch/finally block. | 267 /// specify special successors if we are already in a try/catch/finally block. |
| 233 void handleInTryStatement() { | 268 void handleInTryStatement() { |
| 234 if (!inTryStatement) return; | 269 if (!inTryStatement) return; |
| 235 HBasicBlock block = close(new HExitTry()); | 270 HBasicBlock block = close(new HExitTry()); |
| 236 HBasicBlock newBlock = graph.addNewBlock(); | 271 HBasicBlock newBlock = graph.addNewBlock(); |
| 237 block.addSuccessor(newBlock); | 272 block.addSuccessor(newBlock); |
| 238 open(newBlock); | 273 open(newBlock); |
| 239 } | 274 } |
| 240 | 275 |
| 241 HInstruction callSetRuntimeTypeInfo( | 276 HInstruction callSetRuntimeTypeInfo( |
| 242 HInstruction typeInfo, HInstruction newObject); | 277 HInstruction typeInfo, HInstruction newObject); |
| 243 | 278 |
| 244 /// The element for which this SSA builder is being used. | 279 /// The element for which this SSA builder is being used. |
| 245 Element get targetElement; | 280 Element get targetElement; |
| 246 TypeBuilder get typeBuilder; | 281 TypeBuilder get typeBuilder; |
| 247 } | 282 } |
| OLD | NEW |