| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 // Copyright (c) 2015, the Dartino project authors. Please see the AUTHORS file |  | 
| 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.md file. |  | 
| 4 |  | 
| 5 library fletchc.debug_info_function_codegen; |  | 
| 6 |  | 
| 7 import 'package:compiler/src/elements/elements.dart'; |  | 
| 8 import 'package:compiler/src/resolution/tree_elements.dart'; |  | 
| 9 import 'package:compiler/src/tree/tree.dart'; |  | 
| 10 import 'package:compiler/src/universe/selector.dart'; |  | 
| 11 |  | 
| 12 import 'package:compiler/src/dart_types.dart' show |  | 
| 13     DartType; |  | 
| 14 |  | 
| 15 import 'package:compiler/src/diagnostics/spannable.dart' show |  | 
| 16     Spannable; |  | 
| 17 |  | 
| 18 import 'bytecode_assembler.dart'; |  | 
| 19 import 'closure_environment.dart'; |  | 
| 20 import 'codegen_visitor.dart'; |  | 
| 21 |  | 
| 22 import 'fletch_function_builder.dart' show |  | 
| 23     FletchFunctionBuilder; |  | 
| 24 |  | 
| 25 import 'debug_registry.dart' show |  | 
| 26     DebugRegistry; |  | 
| 27 |  | 
| 28 import 'fletch_context.dart'; |  | 
| 29 import 'function_codegen.dart'; |  | 
| 30 import 'debug_info.dart'; |  | 
| 31 |  | 
| 32 class DebugInfoFunctionCodegen extends FunctionCodegen with DebugRegistry { |  | 
| 33   final FletchCompilerImplementation compiler; |  | 
| 34   final DebugInfo debugInfo; |  | 
| 35 |  | 
| 36   DebugInfoFunctionCodegen(this.debugInfo, |  | 
| 37                            FletchFunctionBuilder functionBuilder, |  | 
| 38                            FletchContext context, |  | 
| 39                            TreeElements elements, |  | 
| 40                            ClosureEnvironment closureEnvironment, |  | 
| 41                            FunctionElement function, |  | 
| 42                            this.compiler) |  | 
| 43       : super(functionBuilder, context, elements, null, |  | 
| 44               closureEnvironment, function) { |  | 
| 45     if (functionBuilder.isInstanceMember) pushVariableDeclaration(thisValue); |  | 
| 46   } |  | 
| 47 |  | 
| 48   void recordDebugInfo(Node node) { |  | 
| 49     debugInfo.addLocation(compiler, assembler.byteSize, node); |  | 
| 50   } |  | 
| 51 |  | 
| 52   void pushVariableDeclaration(LocalValue value) { |  | 
| 53     super.pushVariableDeclaration(value); |  | 
| 54     debugInfo.pushScope(assembler.byteSize, value); |  | 
| 55   } |  | 
| 56 |  | 
| 57   void popVariableDeclaration(Element element) { |  | 
| 58     super.popVariableDeclaration(element); |  | 
| 59     debugInfo.popScope(assembler.byteSize); |  | 
| 60   } |  | 
| 61 |  | 
| 62   void callIsSelector( |  | 
| 63       Node node, |  | 
| 64       DartType type, |  | 
| 65       Spannable diagnosticLocation) { |  | 
| 66     recordDebugInfo(node); |  | 
| 67     super.callIsSelector(node, type, diagnosticLocation); |  | 
| 68   } |  | 
| 69 |  | 
| 70   void invokeMethod(Node node, Selector selector) { |  | 
| 71     recordDebugInfo(node); |  | 
| 72     super.invokeMethod(node, selector); |  | 
| 73   } |  | 
| 74 |  | 
| 75   void invokeGetter(Node node, Name name) { |  | 
| 76     recordDebugInfo(node); |  | 
| 77     super.invokeGetter(node, name); |  | 
| 78   } |  | 
| 79 |  | 
| 80   void invokeSetter(Node node, Name name) { |  | 
| 81     recordDebugInfo(node); |  | 
| 82     super.invokeSetter(node, name); |  | 
| 83   } |  | 
| 84 |  | 
| 85   void invokeFactory(Node node, int constId, int arity) { |  | 
| 86     recordDebugInfo(node); |  | 
| 87     super.invokeFactory(node, constId, arity); |  | 
| 88   } |  | 
| 89 |  | 
| 90   void invokeStatic(Node node, int constId, int arity) { |  | 
| 91     recordDebugInfo(node); |  | 
| 92     super.invokeStatic(node, constId, arity); |  | 
| 93   } |  | 
| 94 |  | 
| 95   void generateReturn(Node node) { |  | 
| 96     recordDebugInfo(node); |  | 
| 97     super.generateReturn(node); |  | 
| 98   } |  | 
| 99 |  | 
| 100   void generateReturnNull(Node node) { |  | 
| 101     recordDebugInfo(node); |  | 
| 102     super.generateReturnNull(node); |  | 
| 103   } |  | 
| 104 |  | 
| 105   void generateImplicitReturn(FunctionExpression node) { |  | 
| 106     // If the method is empty, generate debug information for the |  | 
| 107     // implicit 'return null' that covers the entire method. That was, |  | 
| 108     // the debugger will use the entire (empty) method as the source |  | 
| 109     // listing is a breakpoint is set in the method. |  | 
| 110     if (node.body is Block) { |  | 
| 111       Block body = node.body; |  | 
| 112       if (body.statements.isEmpty) recordDebugInfo(node); |  | 
| 113     } |  | 
| 114     super.generateImplicitReturn(node); |  | 
| 115   } |  | 
| 116 |  | 
| 117   void generateSwitchCaseMatch(CaseMatch caseMatch, BytecodeLabel ifTrue) { |  | 
| 118     // We do not want to break on the evaluation of the individual |  | 
| 119     // case equality tests. |  | 
| 120     recordDebugInfo(null); |  | 
| 121     super.generateSwitchCaseMatch(caseMatch, ifTrue); |  | 
| 122   } |  | 
| 123 |  | 
| 124   void generateEmptyInitializer(Node node) { |  | 
| 125     recordDebugInfo(node); |  | 
| 126     super.generateEmptyInitializer(node); |  | 
| 127   } |  | 
| 128 |  | 
| 129   void generateIdentical(Node node) { |  | 
| 130     recordDebugInfo(node); |  | 
| 131     super.generateIdentical(node); |  | 
| 132   } |  | 
| 133 |  | 
| 134   void generateIdenticalNonNumeric(Node node) { |  | 
| 135     recordDebugInfo(node); |  | 
| 136     super.generateIdenticalNonNumeric(node); |  | 
| 137   } |  | 
| 138 |  | 
| 139   void generateThrow(Node node) { |  | 
| 140     recordDebugInfo(node); |  | 
| 141     super.generateThrow(node); |  | 
| 142   } |  | 
| 143 |  | 
| 144   void visitForValue(Node node) { |  | 
| 145     recordDebugInfo(node); |  | 
| 146     super.visitForValue(node); |  | 
| 147   } |  | 
| 148 |  | 
| 149   void visitForEffect(Node node) { |  | 
| 150     recordDebugInfo(node); |  | 
| 151     super.visitForEffect(node); |  | 
| 152   } |  | 
| 153 } |  | 
| OLD | NEW | 
|---|